public bool Save() { var success = false; if (!ClearPassword.IsEmpty()) { Salt = Utils.Encryption.GetSalt(); Password = Utils.Encryption.GetSHAHash(ClearPassword, Salt); } if (Roles != null) { RoleList = string.Join(",", Roles); } if (Id == 0) { success = Add(); } else { success = Update(); } if (!AuthToken.IsEmpty()) { Cache.Instance.Add(CacheKey(AuthToken), this); } return(success); }
public void DoActiveStateAction(SecureString password) { switch (ActionButtonText) { case ACTION_DECRYPT: if (password.Length > 0) { ActionButtonText = ACTION_STOP; var localTaskId = _taskId; _encryptionTask = Task.Run(() => { var pwd = new System.Net.NetworkCredential(string.Empty, password).Password; EncryptedDictionary.DecryptKey(pwd, () => localTaskId == _taskId); if (ActionButtonText == ACTION_STOP && localTaskId == _taskId) { ActionButtonText = ACTION_ENCRYPT; var wasAnyNotEncrypted = EncryptedDictionary.Dictionary.Values.Any(x => x.Encrypted == null); EncryptedDictionary.DecryptPart(); foreach (var record in Records) { record.NotifyEncryptionChange(); } if (wasAnyNotEncrypted) { EncryptedDictionary.Save(FilenameSecret); SaveOpenRecords(FilenameOpen); } IsUnlocked = true; ClearPassword?.Invoke(); } }).ContinueWith(x => OnDecryption()); } break; case ACTION_STOP: if (_encryptionTask != null) { ++_taskId; _encryptionTask = null; ActionButtonText = ACTION_DECRYPT; } break; case ACTION_ENCRYPT: ActionButtonText = ACTION_DECRYPT; EncryptedDictionary.EncryptAll(); EncryptedDictionary.ClearKeyAndPartialEncryption(); IsUnlocked = false; foreach (var record in Records) { record.NotifyEncryptionChange(); } OnEncryption(); break; } }