/// <summary> /// translate the account data coming from the client to a full user object /// </summary> /// <param name="account"></param> /// <param name="user"></param> private static void AccountToUser(Account account, IUser user) { user.EmailAddress = account.EmailAddress; user.DateOfBirth = account.DateOfBirth; user.Position = account.Position; user.PersonnelNumber = account.PersonnelNumber; var bitsOfName = account.Name.Split(' '); user.FirstName = bitsOfName[0]; user.LastName = bitsOfName[1]; user.Roles.Clear(); if (account.IsAdministrator) user.Roles.Add(Role.GetRole(Role.BuiltInRole.Administrator)); if (account.IsManager) user.Roles.Add(Role.GetRole(Role.BuiltInRole.Manager)); if (account.IsAnalytics) user.Roles.Add(Role.GetRole(Role.BuiltInRole.Analytics)); user.MobilePhoneNumber = account.MobilePhoneNumber; if (user.Avatar == null) user.Avatar = new Avatar { PublicID = account.PhotoId }; else user.Avatar.PublicID = account.PhotoId; //user.NeedsAD = account.NeedsAD; user.CreatedDate = DateTime.UtcNow; }
private User CreateOrEditUser(Account account, bool isEdit) { var user = new User(); if (isEdit) { using (var orgSession = OrgStore.OpenSession()) { //we are editing a user so first get it from raven user = orgSession.Load<User>(account.Id); if (user == null)//cant find user in database { GetLogger().Error(string.Format("Admin: EditOrCreateAccounts: Cannot find user {0}", account.Id)); //errorBuilder.Append("Cannot find user"); - what to do about this? } } } else { user.Id = IlluminateDatabase.GenerateId<User>(); user.OrgKey = OrgKey; } return user; }
//private User UserADSettings(User user) //{ // if (user.NeedsAD && string.IsNullOrEmpty(user.ADUsername)) // { // var adUserResult = ADHelper.UserToADUser(user); // user.ADPassword = adUserResult.Password; // user.ADUsername = adUserResult.Username; // } // if (!user.NeedsAD) // { // user.ADUsername = string.Empty; // user.ADPassword = string.Empty; // } // return user; //} /// <summary> /// check a specific account is in the right format /// </summary> /// <param name="account"></param> /// <returns></returns> private static string CheckAccount(Account account) { var errors = new StringBuilder(); if (string.IsNullOrEmpty(account.EmailAddress)) errors.AppendFormat("Email address required"); if (string.IsNullOrEmpty(account.Name)) errors.AppendFormat("Users name required"); else if (account.Name.Split(' ').Length != 2) errors.AppendFormat("Users name must be in the form First Name Last Name"); return errors.ToString(); }
public JsonResult AddAccounts(Account[] accounts) { return EditOrCreateAccounts(accounts, false); }
// need to verify that e-mail address given doesn't exist already in database. //used to both edit existing employees and add new ones private JsonResult EditOrCreateAccounts(Account[] accounts, bool isEdit) { //check the all the details are correct and if not send message to client var errors = CheckAccounts(accounts); if (errors.Length > 0) return JsonError(new AccountsAdminViewModel { ErrorMessage = errors }, errors); var users = new List<IUser>(); var errorBuilder = new StringBuilder(); // create/edit the users foreach (var account in accounts) { var user = CreateOrEditUser(account, isEdit); if (user == null && isEdit)//cant find user in database { errorBuilder.Append("Cannot find user"); } using (var session = OrgStore.OpenSession()) { if (session.Query<User>().Any(u => u.EmailAddress == account.EmailAddress) && !isEdit) { GetLogger().Error("Admin:EditOrCreateAccounts: attempted to add a user with an e-mail address already in OrgDB"); errorBuilder.Append("Cannot add user with this e-mail address. E-mail address already registered to another user"); } else { //set the user details to that coming from the client AccountToUser(account, user);// only do this if account.EmailAddress is not in DB, check master or OrgDB? } } //user = UserADSettings(user); //if (isEdit) continue; // in original loop, user was saved here, but as only users being added are added to users, can loop through user list and add each one later. users.Add(user); } if (errorBuilder.Length > 0) return JsonError(new AccountsAdminViewModel { ErrorMessage = errorBuilder.ToString() }, errorBuilder.ToString()); var vm = new AccountsAdminViewModel(); // now open session here, first, store users using (var orgSession = OrgStore.OpenSession()) { foreach (var user in users) { orgSession.Store(user); } //save the changes to Raven and send a success message to the client try { var shouldSave = true; var editedAdded = "added"; if (isEdit) { editedAdded = "edited"; } else { shouldSave=AddUsersToMasterDB(users); } if (shouldSave) { orgSession.SaveChanges(); vm.SuccessMessage = string.Format("Succesfully {0} {1} employee accounts", editedAdded, accounts.Length); return JsonSuccess(vm, vm.SuccessMessage); } else { GetLogger().Error("Admin:EditOrCreateAccounts: attempted to add a user with an e-mail address already in MasterDB"); vm.ErrorMessage = "Cannot add user with this e-mail address. E-mail address already registered to another user"; return JsonError(vm, vm.ErrorMessage); } } catch (Exception ex) { GetLogger().Error(string.Format("Admin:EditOrCreateAccounts: Cannot save changes to Raven"), ex); vm.ErrorMessage = "Cannot save changes"; return JsonError(vm, vm.ErrorMessage); } } }
public JsonResult DeleteAccounts(Account[] accounts) { using (var orgSession = OrgStore.OpenSession()) { var errorBuilder = new StringBuilder(); foreach (var user in accounts.Select(account => orgSession.Load<User>(account.Id))) { if (user == null) errorBuilder.Append("Cannot find user"); if (user != null) user.IsDeleted = true; // flag the membership reboot acount as closed. var userAccountService = MvcApplication.UserAccountService; var account = userAccountService.GetByEmail(user.EmailAddress); userAccountService.DeleteAccount(account.Id); } if (errorBuilder.Length > 0) return JsonError(new AccountsAdminViewModel { ErrorMessage = errorBuilder.ToString() }, errorBuilder.ToString()); var vm = new AccountsAdminViewModel(); //save the changes to Raven and send a success message to the client try { orgSession.SaveChanges(); vm.SuccessMessage = string.Format("Succesfully soft deleted {0} employee accounts", accounts.Length); return JsonSuccess(vm, vm.SuccessMessage); } catch (Exception ex) { GetLogger().Error("Administration:Delete accounts:", ex); vm.ErrorMessage = "Cannot delete accounts"; return JsonError(vm, vm.ErrorMessage); } } }
public JsonResult EditAccounts(Account[] accounts) { return EditOrCreateAccounts(accounts, true); }
public void AddAccountsNoName() { var controller = GetAuthenticatedControllerMock<AdministrationController>(Orguser); controller.ControllerContext = new ControllerContext(GetContext(false), new RouteData(), controller); var account = new Account { Id = "blah", EmailAddress = "blah" }; var result = controller.AddAccounts(new[] { account }); var jsonresponse = ValidateAndUnwrapJsonResult(result); var data = jsonresponse.Data as AccountsAdminViewModel; Assert.IsNotNull(data.ErrorMessage); Assert.IsNull(data.SuccessMessage); Assert.IsTrue(data.ErrorMessage.Contains("Users name required")); using (var session = OrgStore.OpenSession()) { var newUser = session.Query<User>().FirstOrDefault(u => u.LastName == "Bunter"); Assert.IsNull(newUser); } }
public void EditAccounts() { const string userId = "blah"; var controller = GetAuthenticatedControllerMock<AdministrationController>(Orguser); controller.ControllerContext = new ControllerContext(GetContext(false), new RouteData(), controller); using (var session = OrgStore.OpenSession()) { var user = new User { Id = userId, FirstName = "Billy", LastName = "Bunter", EmailAddress = "sasas" }; session.Store(user); session.SaveChanges(); } var account = new Account { Name = "Bob Baker", EmailAddress = "wwewe", Id = userId }; var result = controller.EditAccounts(new[] { account }); var jsonresponse = ValidateAndUnwrapJsonResult(result); var data = jsonresponse.Data as AccountsAdminViewModel; Assert.IsNull(data.ErrorMessage); Assert.IsNotNull(data.SuccessMessage); using (var session = OrgStore.OpenSession()) { var changedUser = session.Load<User>(userId); Assert.IsNotNull(changedUser); Assert.AreEqual(account.EmailAddress, changedUser.EmailAddress); Assert.AreEqual(account.Name, changedUser.Name); } }
public void AddAccountsGood() { var controller = GetAuthenticatedControllerMock<AdministrationController>(Orguser); controller.ControllerContext = new ControllerContext(GetContext(false), new RouteData(), controller); var account = new Account { Name = "Bill Bunter", EmailAddress = "*****@*****.**", Id = "blah" }; var result=controller.AddAccounts(new [] {account}); var jsonresponse = ValidateAndUnwrapJsonResult(result); var data = jsonresponse.Data as AccountsAdminViewModel; Assert.IsNull(data.ErrorMessage); Assert.IsNotNull(data.SuccessMessage); using (var session = OrgStore.OpenSession()) { var newUser=session.Query<User>().FirstOrDefault(u => u.LastName == "Bunter"); Assert.IsNotNull(newUser); Assert.AreEqual(account.EmailAddress,newUser.EmailAddress); Assert.AreEqual(session.Query<User>().Count(u => u.LastName == "Bunter"), 1); } }