public JsonResult AddOrEditGroup(GroupEditViewModel model)
        {
            SyncContext.Lock();
            try
            {
                using (var masterPassword = SessionContext.GetMasterPassword())
                {
                    if (ModelState.IsValid)
                    {
                        var currentVaultName = SessionContext.GetCurrentVaultName();
                        var vaultRepository  = VaultRepositoryFactory.CreateInstance();
                        var vault            = vaultRepository.GetVault(currentVaultName, masterPassword);
                        var vaultManipulator = this.VaultManipulatorFactory.CreateInstance(vault);

                        var group = vaultManipulator.GetGroupById(Guid.Parse(model.Id));

                        bool isNew = false;
                        if (group == null)
                        {
                            group    = new Model.Group();
                            group.Id = Guid.Parse(model.Id);
                            isNew    = true;
                        }

                        group.Name = model.Name;

                        if (isNew)
                        {
                            Guid?parentId = model.ParentId == "#" ? null : (Guid?)Guid.Parse(model.ParentId);
                            vaultManipulator.AddGroup(parentId, group);
                        }
                        else
                        {
                            vaultManipulator.UpdateGroup(group);
                        }

                        vaultRepository.SaveVault(vault, masterPassword);
                        return(Json(new { success = true }));
                    }
                    else
                    {
                        return(Json(new { success = false }));
                    }
                }
            }
            finally
            {
                SyncContext.Release();
            }
        }
        public IActionResult Rename(VaultRenameViewModel model)
        {
            SyncContext.Lock();
            try
            {
                using (var masterPassword = SessionContext.GetMasterPassword())
                {
                    if (ModelState.IsValid)
                    {
                        var vaultRepository = VaultRepositoryFactory.CreateInstance();
                        if (vaultRepository.VaultExists(model.NewVaultName))
                        {
                            ModelState.AddModelError(nameof(model.NewVaultName), StringResources.VaultNameAlreadyExists);
                            return(View(model));
                        }

                        var currentVaultName = SessionContext.GetCurrentVaultName();
                        var vault            = vaultRepository.GetVault(currentVaultName, masterPassword);
                        vault.Name = model.NewVaultName;

                        vaultRepository.SaveVault(vault, masterPassword);
                        vaultRepository.DeleteVault(currentVaultName);
                        SessionContext.SetCurrentVaultName(model.NewVaultName);

                        return(RedirectToAction("Index", "VaultExplorer"));
                    }
                    else
                    {
                        return(View(model));
                    }
                }
            }
            finally
            {
                SyncContext.Release();
            }
        }