public async Task UnlockTestNoCredentialsAsync() { // Arrange var id = new KeePassId(Guid.NewGuid()); var log = Substitute.For <ILogger>(); var filePicker = Substitute.For <IFilePicker>(); var db = Substitute.For <IFile>(); filePicker.GetDatabaseAsync().Returns(Task.FromResult(db)); var access = Substitute.For <IDatabaseFileAccess>(); access.GetDatabaseAsync(id).Returns(db); var credentialProvider = Substitute.For <ICredentialProvider>(); var cache = Substitute.ForPartsOf <DatabaseCache>(log, access, filePicker); // Act var result = await cache.UnlockAsync(id, credentialProvider); // Assert Assert.Null(result); await access.Received(1).GetDatabaseAsync(id); await credentialProvider.Received(1).GetCredentialsAsync(db); }
public void ParameterEncode() { var db = new KeePassId(Guid.NewGuid()); var group = new KeePassId(Guid.NewGuid()); var parameter = DatabaseGroupParameter.Encode(db, group); var d = db.Id.ToString(); var g = group.Id.ToString(); Assert.Equal(db.Id.ToString("N") + group.Id.ToString("N"), parameter); }
public async Task <IKeePassDatabase> UnlockAsync(KeePassId id, ICredentialProvider provider) { IKeePassDatabase db; if (_idCache.TryGetValue(id, out db)) { return(db); } var unlocked = await _cache.UnlockAsync(id, provider); if (unlocked != null) { _idCache.Add(id, unlocked); } return(unlocked); }
public async Task <IEnumerable <IFile> > GetDatabasesAsync() { var folder = await _folder; var files = await folder.GetFilesAsync(); var result = new List <IFile>(); foreach (var file in files) { Guid g; if (Guid.TryParse(file.Name.Replace("-", string.Empty), out g)) { var id = new KeePassId(g); var dbStorageItem = await GetDatabaseAsync(id); // Ensure that the item exists and the ID is consistent with the ID generator if (string.Equals(dbStorageItem?.IdFromPath().ToString(), file.Name, StringComparison.Ordinal)) { result.Add(dbStorageItem); } else { // There was a problem with the db cache await file.DeleteAsync(); } } else { // There was a problem parsing the name await file.DeleteAsync(); } } return(result); }
public async Task <IFile> GetDatabaseAsync(KeePassId id) { var token = GetDatabaseToken(id); if (!_accessList.ContainsItem(token)) { return(null); } try { var file = await _accessList.GetFileAsync(token); if (file.IsAvailable) { return(file.AsFile()); } } catch (Exception) { } return(null); }
private string GetKeyToken(KeePassId token) => $"{token}.key";
private string GetDatabaseToken(KeePassId token) => $"{token}.kdbx";
public DatabaseGroupParameter(KeePassId database, KeePassId group) { Database = database; Group = group; }
public static string Encode(KeePassId database, KeePassId group) { return(database.Id.ToString("N") + group.Id.ToString("N")); }