示例#1
0
        public JsonResult ChangePassword(string old_p, string new_p)
        {
            try
            {
                if (!string.IsNullOrWhiteSpace(old_p) && !string.IsNullOrWhiteSpace(new_p))
                {
                    RFLoginCache.Login(LoginUsername, old_p);
                    var oldPasswordHash = RFLoginCache.GetPasswordHash(LoginUsername);
                    RFLoginCache.Login(LoginUsername, new_p);
                    var newPasswordHash = RFLoginCache.GetPasswordHash(LoginUsername);

                    var vaults = Context.GetKeysByType <RFKeyVaultKey>();
                    if (vaults.Any())
                    {
                        foreach (var vaultKey in vaults.Values)
                        {
                            using (var secure = new RFSecureActivity(Context, LoginUsername, new RFSimpleKeyDomain(vaultKey.Root), vaultKey.Enum))
                            {
                                var vault = secure.OpenKeyVault(oldPasswordHash);
                                vault.ResetUser(LoginUsername, newPasswordHash);
                                secure.SaveKeyVault();
                            }
                        }
                    }
                }

                Context.UserLog.LogEntry(new RFUserLogEntry
                {
                    Action       = "ChangePassword",
                    Area         = "Encryption",
                    Description  = "Changed password.",
                    IsUserAction = true,
                    IsWarning    = false,
                    Username     = Username,
                    Timestamp    = DateTimeOffset.Now
                });

                return(Json(true));
            }
            catch (Exception ex)
            {
                RFLoginCache.Logout(LoginUsername);
                return(Json(JsonError.Throw("ChangePassword", ex)));
            }
        }
示例#2
0
        public ActionResult BackupMasterKey(string p)
        {
            try
            {
                var keys = new List <object>();
                RFLoginCache.Login(LoginUsername, p);
                // find all vaults
                var vaults = Context.GetKeysByType <RFKeyVaultKey>();
                var sb     = new StringBuilder();
                sb.AppendLine("VaultName,KeyID,Base64");
                if (vaults.Any())
                {
                    foreach (var vaultKey in vaults.Values)
                    {
                        using (var secure = new RFSecureActivity(Context, LoginUsername, new RFSimpleKeyDomain(vaultKey.Root), vaultKey.Enum))
                        {
                            var vault     = secure.OpenKeyVault(RFLoginCache.GetPasswordHash(LoginUsername));
                            var masterKey = vault.GetKey(RFKeyVault.MASTER_KEY_ID);
                            if (masterKey != null)
                            {
                                sb.AppendFormat("{0},{1},{2}{3}", vaultKey.Enum.ToString(), RFKeyVault.MASTER_KEY_ID, Convert.ToBase64String(masterKey), Environment.NewLine);
                            }
                        }
                    }
                }

                Context.UserLog.LogEntry(new RFUserLogEntry
                {
                    Action       = "BackupMasterKey",
                    Area         = "Encryption",
                    Description  = "Backed up Master Key.",
                    IsUserAction = true,
                    IsWarning    = false,
                    Username     = Username,
                    Timestamp    = DateTimeOffset.Now
                });

                return(File(System.Text.Encoding.ASCII.GetBytes(sb.ToString()), "text/csv", string.Format("Master Key Backup {0}.csv", RFDate.Today().ToString("yyyy-MM-dd"))));
            }
            catch (Exception ex)
            {
                return(Content("<html><body><h3>Error</h3><p>" + ex.Message + "</p></body></html>"));
            }
        }
示例#3
0
 public JsonResult GetKeys(string p)
 {
     try
     {
         var keys = new List <object>();
         RFLoginCache.Login(LoginUsername, p);
         // find all vaults
         var vaults = Context.GetKeysByType <RFKeyVaultKey>();
         if (vaults.Any())
         {
             foreach (var vaultKey in vaults.Values)
             {
                 using (var secure = new RFSecureActivity(Context, LoginUsername, new RFSimpleKeyDomain(vaultKey.Root), vaultKey.Enum))
                 {
                     var vault = secure.OpenKeyVault(RFLoginCache.GetPasswordHash(LoginUsername));
                     foreach (var key in vault.Rows)
                     {
                         keys.Add(new
                         {
                             Vault             = vaultKey.Enum.ToString(),
                             KeyID             = key.Key.KeyID,
                             SecuredByKeyID    = key.Key.SecuredByKeyID,
                             SecuredByUsername = key.Key.SecuredByUsername,
                             CipherStream      = key.CipherStream,
                             Accessible        = vault.GetKey(key.Key.KeyID) != null && (string.IsNullOrWhiteSpace(key.Key.SecuredByUsername) || key.Key.SecuredByUsername.Equals(LoginUsername, StringComparison.InvariantCultureIgnoreCase))
                         });
                     }
                 }
             }
         }
         return(Json(new
         {
             Keys = keys
         }));
     }
     catch (Exception ex)
     {
         return(Json(JsonError.Throw("GetKeys", ex)));
     }
 }
示例#4
0
        public JsonResult ResetMaster(string p)
        {
            try
            {
                var passwordHash = RFLoginCache.Login(LoginUsername, p);
                var vaults       = Context.GetKeysByType <RFKeyVaultKey>();
                if (vaults.Any())
                {
                    foreach (var vaultKey in vaults.Values)
                    {
                        using (var secure = new RFSecureActivity(Context, LoginUsername, new RFSimpleKeyDomain(vaultKey.Root), vaultKey.Enum))
                        {
                            var vault  = secure.OpenKeyVault(passwordHash);
                            var newKey = RFSecure.GenerateNewKey();
                            vault.ChangeMasterKey(newKey);
                            secure.SaveKeyVault();
                        }
                    }
                }

                Context.UserLog.LogEntry(new RFUserLogEntry
                {
                    Action       = "ResetMaster",
                    Area         = "Encryption",
                    Description  = "Reset Master Key.",
                    IsUserAction = true,
                    IsWarning    = false,
                    Username     = Username,
                    Timestamp    = DateTimeOffset.Now
                });

                return(Json(true));
            }
            catch (Exception ex)
            {
                RFLoginCache.Logout(LoginUsername);
                return(Json(JsonError.Throw("ResetMaster", ex)));
            }
        }