Пример #1
0
        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);
        }
Пример #2
0
        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;
            }
        }