Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
 private string GetKeyToken(KeePassId token) => $"{token}.key";
Ejemplo n.º 7
0
 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"));
 }