Пример #1
0
        /// <summary>
        /// Initializes the singleton application object.  This is the first line of authored code
        /// executed, and as such is the logical equivalent of main() or WinMain().
        /// </summary>
        public App()
        {
            InitializeComponent();
            UnhandledException += App_UnhandledException;
            Suspending         += OnSuspending;

            using (var db = new PasswordManagerContext()) {
                try {
                    db.Database.Migrate();
                }
                catch (Exception ex) {
                    //Log.Error(ex.Message, ex);
                }
                try {
                    var t = db.Settings.FirstOrDefaultAsync(x => x.Name == AppSettings.MASTER_PASSWORD_KEY).Result;
                    if (t == null)
                    {
                        db.Settings.Add(new Setting {
                            Name = AppSettings.MASTER_PASSWORD_KEY
                        });
                        db.SaveChanges();
                    }
                }
                catch (Exception ex) {
                    //Log.Error(ex.Message, ex);
                }
            }
        }
Пример #2
0
        private static bool GetHasMasterPassword()
        {
            var context = new PasswordManagerContext();
            var pwd     = context.Settings.Single(x => x.Name == MASTER_PASSWORD_KEY);

            return(pwd.Value != null?pwd.Value.Any() : false);
        }
Пример #3
0
        public void Create(int UserId, string WebsiteName, string encryptedPassword, string Username = null, string Url = null)
        {
            using (var db = new PasswordManagerContext())
            {
                if (Username == null)
                {
                    Username = "******";
                }
                if (Url == null)
                {
                    Url = "Unknown";
                }

                var website = new Website()
                {
                    UserId   = UserId,
                    Name     = WebsiteName,
                    Password = encryptedPassword,
                    Username = Username,
                    Url      = Url
                };

                _service.Create(website);
            }
        }
Пример #4
0
        public void OneTimeSetUp()
        {
            var option = new DbContextOptionsBuilder <PasswordManagerContext>().UseInMemoryDatabase(databaseName: "InMemoryDb")
                         .Options;

            _context = new PasswordManagerContext(option);
            _sut     = new MasterPasswordService(_context);

            _context.Users.Add(new User()
            {
                FirstName    = "John",
                LastName     = "Doe",
                EmailAddress = "*****@*****.**",
            });
            _context.SaveChanges();
            _context.Users.Add(new User()
            {
                FirstName    = "Jane",
                LastName     = "Doe",
                EmailAddress = "*****@*****.**",
            });
            _context.SaveChanges();

            var salt1         = Hash.GenerateSalt(20);
            var hashPassword1 = Hash.GenerateHash(Encoding.ASCII.GetBytes("Password123"), salt1, 1000, 16);

            var salt2         = Hash.GenerateSalt(20);
            var hashPassword2 = Hash.GenerateHash(Encoding.ASCII.GetBytes("Password!_"), salt2, 1000, 16);

            _sut.Create(hashPassword1, salt1, 1000, _context.Users.Where(u => u.EmailAddress == "*****@*****.**").FirstOrDefault().Id);
            _sut.Create(hashPassword2, salt2, 1000, _context.Users.Where(u => u.EmailAddress == "*****@*****.**").FirstOrDefault().Id);
        }
Пример #5
0
 public List <Website> GetAll(int userId)
 {
     using (var db = new PasswordManagerContext())
     {
         return(db.Websites.Where(w => w.UserId == userId).ToList());
     }
 }
Пример #6
0
        public void Setup()
        {
            using (var db = new PasswordManagerContext())
            {
                var selectedUser =
                    from u in db.Users
                    where u.EmailAddress == "*****@*****.**"
                    select u;

                db.Users.RemoveRange(selectedUser);
                db.SaveChanges();

                db.Users.Add(new User()
                {
                    FirstName = "Unit", LastName = "Test", EmailAddress = "*****@*****.**"
                });
                db.SaveChanges();

                _testUser = db.Users.Where(u => u.EmailAddress == "*****@*****.**").FirstOrDefault();


                var salt         = Hash.GenerateSalt(20);
                var hashPassword = Hash.GenerateHash(Encoding.ASCII.GetBytes("Password123"), salt, 1000, 16);

                db.MasterPasswords.Add(new MasterPassword()
                {
                    Hash = hashPassword, Salt = salt, Iterations = 1000, UserId = _testUser.Id
                });
                db.SaveChanges();
                _testMPassword = db.MasterPasswords.Where(mp => mp.UserId == _testUser.Id).FirstOrDefault();
            }
        }
 public void Execute(DeleteProfileCommand command)
 {
     using (var db = new PasswordManagerContext()) {
         var profile = db.Profiles.Find(command.Id);
         db.Remove(profile);
         db.SaveChanges();
     }
 }
Пример #8
0
        public void WhenAUserIsUpdatedTheDatabaseWillShowTheChange()
        {
            var userManager = new UserManager();

            using (var db = new PasswordManagerContext())
            {
                userManager.Update(_testUser.Id, newLastName: "Smith");
                Assert.AreEqual("Smith", db.Users.Find(_testUser.Id).LastName);
            }
        }
Пример #9
0
 public void Execute(CreateMasterPasswordCommand command)
 {
     using (var db = new PasswordManagerContext()) {
         var mp = db.Settings.Single(x => x.Name == AppSettings.MASTER_PASSWORD_KEY);
         mp.Value = SecurePasswordHasher.Hash(command.Password);
         db.Update(mp);
         db.SaveChanges();
         AppSettings.MasterPassword = command.Password;
     }
 }
Пример #10
0
        public void WhenCheckedToSeeIfAUserExistsItsAlwayCorrect()
        {
            var userManager = new UserManager();

            using (var db = new PasswordManagerContext())
            {
                var expectedUser = db.Users.Find(_testUser.Id);
                var answer       = userManager.Exist(_testUser.EmailAddress);

                Assert.AreEqual(true, answer);
            }
        }
Пример #11
0
        public void WhenAUserIsRetrivedByEmailItIsTheCorrectUser()
        {
            var userManager = new UserManager();

            using (var db = new PasswordManagerContext())
            {
                var expectedUser = db.Users.Find(_testUser.Id);
                var user         = userManager.Retrieve(_testUser.EmailAddress);

                Assert.AreEqual(expectedUser.Id, user.Id);
            }
        }
        public void WhenRequestedTheCorrectWebsiteIsReturned()
        {
            var websiteManager = new WebsiteManager();

            using (var db = new PasswordManagerContext())
            {
                var expectedWebsite = db.Websites.Find(_testWebsite.Id);
                var website         = websiteManager.Retrieve(_testWebsite.Id);

                Assert.AreEqual(expectedWebsite.Id, website.Id);
            }
        }
        public void WhenUpdatedTheDatabaseWillReflectTheChanges()
        {
            var websiteManager = new WebsiteManager();

            using (var db = new PasswordManagerContext())
            {
                var expectedUsername = "******";
                websiteManager.Update(_testWebsite.Id, username: expectedUsername);

                Assert.AreEqual(expectedUsername, db.Websites.Find(_testWebsite.Id).Username);
            }
        }
        public void WhenRetrieveAllIsCalledWillReturnAllWebsitesForThatUser()
        {
            var websiteManager = new WebsiteManager();

            using (var db = new PasswordManagerContext())
            {
                var            count    = db.Websites.Count(u => u.UserId == _testUser.Id);
                List <Website> websites = websiteManager.GetAll(_testUser.Id);

                Assert.AreEqual(count, websites.Count());
            }
        }
Пример #15
0
        public void WhenAPasswordIsRetrivedByIdItIsTheCorrectPassword()
        {
            var masterPasswordManager = new MasterPasswordManager();

            using (var db = new PasswordManagerContext())
            {
                var expectedPassword = db.MasterPasswords.Find(_testMPassword.Id);
                var actualPassword   = masterPasswordManager.RetrieveByUserId(_testUser.Id);

                Assert.AreEqual(expectedPassword.Hash, actualPassword.Hash);
            }
        }
        public void WhenAWebsiteIsDeletedTheDatabaseIsUpdated()
        {
            using (var db = new PasswordManagerContext())
            {
                var websiteManager         = new WebsiteManager();
                var numberOfWebsitesBefore = db.Websites.Count();
                websiteManager.Delete(_testWebsite.Id);
                var numberOfWebsitesAfter = db.Websites.Count();

                Assert.AreEqual(numberOfWebsitesBefore - 1, numberOfWebsitesAfter);
            }
        }
Пример #17
0
        public void WhenAUserIsDeletedTheDatabaseIsUpdated()
        {
            var userManager = new UserManager();

            using (var db = new PasswordManagerContext())
            {
                var numberOfUsersBefore = db.Users.Count();
                userManager.Delete(_testUser.Id);
                var numberOfUsersAfter = db.Users.Count();

                Assert.AreEqual(numberOfUsersBefore - 1, numberOfUsersAfter);
            }
        }
Пример #18
0
        public void WhenAUserIsCreatedTheDatabaseIsUpdated()
        {
            var userManager = new UserManager();

            using (var db = new PasswordManagerContext())
            {
                var numberOfUsersBefore = db.Users.Count();
                userManager.Create("Brandon", "Campbell", "*****@*****.**");
                var numberOfUsersAfter = db.Users.Count();

                Assert.AreEqual(numberOfUsersBefore + 1, numberOfUsersAfter);
            }
        }
Пример #19
0
        public void WhenAPasswordIsUpdatedTheDatabaseWillShowTheChange()
        {
            var masterPasswordManager = new MasterPasswordManager();

            using (var db = new PasswordManagerContext())
            {
                var oldHash      = _testMPassword.Hash;
                var salt         = Hash.GenerateSalt(20);
                var hashPassword = Hash.GenerateHash(Encoding.ASCII.GetBytes("ThisIsAStrongPassword123"), salt, 1000, 16);
                masterPasswordManager.Update(_testMPassword.Id, hashPassword, salt);
                Assert.AreEqual(false, Hash.CompareHash(db.MasterPasswords.Find(_testMPassword.Id).Hash, oldHash));
            }
        }
Пример #20
0
        public void WhenAPasswordIsDeletedTheDatabaseIsUpdated()
        {
            var masterPasswordManager = new MasterPasswordManager();

            using (var db = new PasswordManagerContext())
            {
                var numberOfPasswordsBefore = db.MasterPasswords.Count();
                masterPasswordManager.Delete(db.MasterPasswords.Where(mp => mp.UserId == _testUser.Id).FirstOrDefault().Id);
                var numberOfPasswordsAfter = db.MasterPasswords.Count();

                Assert.AreEqual(numberOfPasswordsBefore - 1, numberOfPasswordsAfter);
            }
        }
        public void TearDown()
        {
            using (var db = new PasswordManagerContext())
            {
                var selectedUser =
                    from u in db.Users
                    where u.EmailAddress == "*****@*****.**"
                    select u;

                db.Users.RemoveRange(selectedUser);
                db.SaveChanges();
            }
        }
 public void Execute(UpdateProfileCommand command)
 {
     using (var db = new PasswordManagerContext()) {
         var pwd     = Cryptographer.Encrypt(command.Password, AppSettings.MasterPassword);
         var profile = db.Profiles.Find(command.Id);
         profile.Name     = command.Profile;
         profile.Account  = command.Account;
         profile.Password = pwd.EncryptedPassword;
         profile.IV       = pwd.IV;
         profile.Salt     = pwd.Salt;
         db.SaveChanges();
     }
 }
 public void Execute(CreateProfileCommand command)
 {
     using (var db = new PasswordManagerContext()) {
         var pwd = Cryptographer.Encrypt(command.Password, AppSettings.MasterPassword);
         db.Profiles.Add(new Profile {
             Name     = command.Profile,
             Password = pwd.EncryptedPassword,
             Account  = command.Account,
             IV       = pwd.IV,
             Salt     = pwd.Salt
         });
         db.SaveChanges();
     }
 }
Пример #24
0
        public void WhenAPasswordIsCreatedTheDatabaseIsUpdated()
        {
            var masterPasswordManager = new MasterPasswordManager();

            using (var db = new PasswordManagerContext())
            {
                db.MasterPasswords.RemoveRange(db.MasterPasswords.Where(mp => mp.UserId == _testUser.Id));
                db.SaveChanges();
                var numberOfUsersBefore = db.MasterPasswords.Count();
                masterPasswordManager.Create(_testUser.Id, "ThisIsAStrongPassword123");
                var numberOfUsersAfter = db.MasterPasswords.Count();

                Assert.AreEqual(numberOfUsersBefore + 1, numberOfUsersAfter);
            }
        }
        public void WhenAWebsiteIsCreatedTheDatabaseIsUpdated()
        {
            var websiteManager = new WebsiteManager();

            using (var db = new PasswordManagerContext())
            {
                var website = db.Websites.Find(_testWebsite.Id);
                db.Websites.RemoveRange(website);
                db.SaveChanges();

                var numberOfWebsitesBefore = db.Websites.Count();
                websiteManager.Create(_testUser.Id, "Google", _encryptedPassword, "Username1", $"https://www.youtube.com/");
                var numberOfWebsitesAfter = db.Websites.Count();

                Assert.AreEqual(numberOfWebsitesBefore + 1, numberOfWebsitesAfter);
                _testWebsite = db.Websites.Where(w => w.UserId == _testUser.Id).FirstOrDefault();
            }
        }
        public void TearDown()
        {
            using (var db = new PasswordManagerContext())
            {
                db.MasterPasswords.RemoveRange(db.MasterPasswords.Where(mp => mp.UserId == _testUser.Id).FirstOrDefault());
                db.SaveChanges();

                if (db.Websites.Where(w => w.UserId == _testUser.Id).FirstOrDefault() != null)
                {
                    db.Websites.RemoveRange(db.Websites.Where(w => w.UserId == _testUser.Id).FirstOrDefault());
                    db.SaveChanges();
                }

                var user = db.Users.Find(_testUser.Id);
                db.Users.RemoveRange(user);
                db.SaveChanges();
            }
        }
        public void Setup()
        {
            using (var db = new PasswordManagerContext())
            {
                var selectedUser =
                    from u in db.Users
                    where u.EmailAddress == "*****@*****.**"
                    select u;

                db.Users.RemoveRange(selectedUser);
                db.SaveChanges();

                db.Users.Add(new User()
                {
                    FirstName = "Unit", LastName = "Test", EmailAddress = "*****@*****.**"
                });
                db.SaveChanges();
            }
        }
        public void Setup()
        {
            using (var db = new PasswordManagerContext())
            {
                var selectedUser =
                    from u in db.Users
                    where u.EmailAddress == "*****@*****.**"
                    select u;

                db.Users.RemoveRange(selectedUser);
                db.SaveChanges();

                db.Users.Add(new User()
                {
                    FirstName = "Unit", LastName = "Test", EmailAddress = "*****@*****.**"
                });
                db.SaveChanges();

                _testUser = db.Users.Where(u => u.EmailAddress == "*****@*****.**").FirstOrDefault();

                var salt         = Hash.GenerateSalt(20);
                var hashPassword = Hash.GenerateHash(Encoding.ASCII.GetBytes("Password123"), salt, 1000, 16);

                db.MasterPasswords.Add(new MasterPassword()
                {
                    Hash = hashPassword, Salt = salt, Iterations = 1000, UserId = _testUser.Id
                });
                db.SaveChanges();
                var testMPassword = db.MasterPasswords.Where(mp => mp.UserId == _testUser.Id).FirstOrDefault();
                _masterPasswordId = testMPassword.Id;

                _encryptedPassword = SymmetricEncryption.Encrypt(Convert.ToBase64String(hashPassword), "YouTubePassword1");

                db.Websites.Add(new Website()
                {
                    Name = "YouTube", Username = "******", Password = _encryptedPassword, Url = $"https://www.youtube.com/", UserId = _testUser.Id
                });
                db.SaveChanges();
                _testWebsite = db.Websites.Where(w => w.UserId == _testUser.Id).FirstOrDefault();
            };
        }
Пример #29
0
        public void OneTimeSetUp()
        {
            var option = new DbContextOptionsBuilder <PasswordManagerContext>().UseInMemoryDatabase(databaseName: "InMemoryDb")
                         .Options;

            _context = new PasswordManagerContext(option);
            _sut     = new UserService(_context);

            _sut.CreateUser(new User()
            {
                FirstName    = "John",
                LastName     = "Doe",
                EmailAddress = "*****@*****.**",
            });

            _sut.CreateUser(new User()
            {
                FirstName    = "Jane",
                LastName     = "Doe",
                EmailAddress = "*****@*****.**",
            });
        }
 public DeleteEntryCommandHandler(PasswordManagerContext context, IVaultService vaultService) : base(context)
 {
     VaultService = vaultService;
 }