public static void UpdateItem(PasswordEntry entry)
 {
     using (var connection = NewConnection())
      {
     connection.CreateTable<PasswordEntry>();
     entry.Labels = (entry.Labels ?? "").ToLower();
     connection.Update(entry);
     connection.Commit();
      }
 }
        private static void InsertItem(PasswordEntry entry)
        {
            using (var connection = NewConnection())
             {
            connection.CreateTable<PasswordEntry>();

            var id = connection.Insert(entry);
            //entry.Id = id;

            connection.Commit();
             }
        }
        private void ContentDialog_PrimaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args)
        {
            var deferral = args.GetDeferral();
             args.Cancel = false;
             NewEntry = new PasswordEntry
             {
            Id = -1,
            Domain = Domain.Text,
            Username = Username.Text,
            PasswordLength = SettingsProvider.DefaultPasswordLength,
            UseCapitalLetters = SettingsProvider.IncludeCapitalsByDefault,
            UseDigits = SettingsProvider.IncludeDigitsByDefault,
            UseSpecialCharacters = SettingsProvider.IncludeSpecialsByDefault,
             };
             PasswordStorage.Entries.Add(NewEntry);

             deferral.Complete();
        }
예제 #4
0
        public EditViewModel(IMessenger messenger)
        {
            _messenger = messenger;
             if (IsInDesignMode)
             {
            EditedEntry = new PasswordEntry
            {
               Domain = "company.com",
               PasswordLength = 15,
               Tag = "Some tag",
               TagAsCurrentMonth = false,
               UseCapitalLetters = true,
               UseDigits = true,
               UseSpecialCharacters = false,
               Username = "******"
            };
             }

             SaveChangesCommand = new RelayCommand(SaveChanges);
             CancelCommand = new RelayCommand(Cancel);
        }
        public DetailsViewModel(IMessenger messenger)
        {
            _messenger = messenger;
             if (IsInDesignMode)
             {
            Entry = new PasswordEntry
            {
               Domain = "company.com",
               PasswordLength = 15,
               Tag = "Some tag",
               TagAsCurrentMonth = false,
               UseCapitalLetters = true,
               UseDigits = true,
               UseSpecialCharacters = false,
               Username = "******"
            };
             }

             GenerateCommand = new RelayCommand(Generate);
             EditCommand = new RelayCommand(() => _messenger.Send(new EditEntryMessage(Entry)));
             DeleteCommand = new RelayCommand(Delete);
        }
 public DeleteEntryMessage(PasswordEntry entry)
 {
     Entry = entry;
 }
 public ShowEntryDetailsMessage(PasswordEntry entry)
 {
     Entry = entry;
 }
 public MoveEntryToDirectoryMessage(PasswordEntry entry, string destination)
 {
     Entry = entry;
      Destination = destination;
 }
        public static string Generate(PasswordEntry entry)
        {
            var entryStringified = entry.Domain + entry.Username + (entry.TagAsCurrentMonth
            ? DateTime.Now.ToString("yyyy-MM-dd")
            : entry.Tag);
             var entryBytes = Encoding.UTF8.GetBytes(entryStringified);
             var secretBytes = Encoding.UTF8.GetBytes(SettingsProvider.SecretSequence);

             var resultBytes = new byte[entryBytes.Length + secretBytes.Length];

             for (int i = 0; i < entryBytes.Length; i++)
             {
            resultBytes[i] = (byte)((entryBytes[i % entryBytes.Length] * i * secretBytes[Math.Abs(secretBytes.Length - i) % secretBytes.Length]) % 256);
             }

             for (int i = entryBytes.Length; i < resultBytes.Length; i++)
             {
            resultBytes[i] = (byte)((entryBytes[i * secretBytes[i % secretBytes.Length] % entryBytes.Length] * secretBytes[entryBytes[i % entryBytes.Length] % secretBytes.Length]) % 256);
             }

             var hap = HashAlgorithmProvider.OpenAlgorithm(HashAlgorithmNames.Sha512);
             var ch = hap.CreateHash();

             ch.Append(resultBytes.AsBuffer());

             var hash = ch.GetValueAndReset().ToArray();
             var hashCharacters = new List<char>();
             var pointer = 0;
             if (entry.UseDigits)
            for (int i = 0; i < 12; i++)
            {
               hashCharacters.Add(Digits[hash[pointer] * i % Digits.Length]);
               pointer++;
            }
             if (entry.UseSpecialCharacters)
            for (int i = 0; i < 12; i++)
            {
               hashCharacters.Add(Specials[hash[pointer] * i % Specials.Length]);
               pointer++;
            }
             if (entry.UseCapitalLetters)
            for (int i = 0; i < 20; i++)
            {
               hashCharacters.Add(CapitalLetters[hash[pointer] * i % CapitalLetters.Length]);
               pointer++;
            }
             for (int i = 0; i < 20; i++)
             {
            hashCharacters.Add(LowerLetters[hash[pointer] * i % LowerLetters.Length]);
            pointer++;
             }
             var passwordChars = new List<char>(entry.PasswordLength);

             for (int i = 0; passwordChars.Count < entry.PasswordLength; i += 13)
             {
            passwordChars.Add(hashCharacters[i % hashCharacters.Count]);
             }

             var threshold = Math.Sqrt(Enumerable.Sum(hash, x => (double)x));

             return string.Join("", passwordChars.OrderBy(x => x > threshold));
        }
 public EditEntryMessage(PasswordEntry entry)
 {
     Entry = entry;
 }
        private static void RemoveItem(PasswordEntry item)
        {
            using (var connection = NewConnection())
             {
            connection.CreateTable<PasswordEntry>();

            connection.Delete<PasswordEntry>(item.Id);
            connection.Commit();
             }
        }