public async Task <ActionResult> Index(AddUserToOrganizationFormViewModel viewModel) { #if DEBUG SiteUser.SerialNumber = "1321312"; #endif //get active customer, which is the admin var activeCustomer = UserManager.GetActiveCustomer(HttpContext); var existingUser = await _securityRepository.FindUserByEmailAsync(viewModel.Email); if (existingUser != null) { var organizationsOfUser = await _orgUserRepo.GetOrganizationsOfUserAsync(existingUser.UserName); if (organizationsOfUser.Any(o => o.CustomerId == activeCustomer?.CustomerId)) { return(new HttpStatusCodeResult(400)); } return(await AddExistingUserToOrganizationAsync(existingUser.UserName, activeCustomer, viewModel)); } if (!ModelState.IsValid || string.IsNullOrWhiteSpace(SiteUser.SerialNumber)) { return(new HttpStatusCodeResult(400)); } return(await AddNewUserToOrganizationAsync(activeCustomer, viewModel)); }
public async Task <ActionResult> AddNewUserToOrganizationAsync(AddUserToOrganizationFormViewModel viewModel, string customerNumber) { var existingUser = await UserManager.QuerySiteUserAsync(viewModel.Email); if (existingUser != null) { return(new HttpStatusCodeResult(400)); } var user = await _accountRepo.CreateUserAsync(viewModel.FirstName, viewModel.LastName, viewModel.Telephone, viewModel.Mobile, viewModel.Email, string.Empty, string.Empty, string.Empty); if (user == null) { throw new ApplicationException("CreateNewFailed"); } var customer = await _customerSupportRepo.GetCustomerByNumberAsync(customerNumber); var roles = viewModel.Roles.Split(','); await _orgUserRepo.AddUserToOrganizationAsync(user, new CustomerBasicInfo { CustomerName = customer.CustomerName, CustomerNo = customerNumber }, roles); var guid = await _securityRepository.GeneratePasswordGuidAsync(user.UserName); var resetPasswordToken = _tokenGenerator.Encrypt(new ResetPasswordConfirmationData { GuidString = guid, UserName = viewModel.Email }); //fire and forget email //var host = Request.Url?.Host + (Request?.Url?.IsDefaultPort == true ? "" : ":" + Request?.Url?.Port); var link = $"{ConfigurationManager.AppSettings["publicSitePrefix"]}/p/resetpassword?payload={resetPasswordToken}"; await SendEmailToNewUserAsync(viewModel.Email, viewModel.Roles, link, customer.CustomerName); return(Json(true)); }
private async Task <ActionResult> AddExistingUserToOrganizationAsync(string userName, CustomerBasicInfo organization, AddUserToOrganizationFormViewModel viewModel) { var user = await UserManager.QuerySiteUserAsync(userName); if (user == null) { return(new HttpStatusCodeResult(400)); } var roles = viewModel.Roles.Split(','); await _orgUserRepo.AddUserToOrganizationAsync(user, organization, roles); //fire and forget email var link = $"{ConfigurationManager.AppSettings["domainUrl"]}"; await SendEmailToExistingUserAsync(viewModel.Email, viewModel.Roles, link, organization.CustomerName); var startPage = _contentRepo.Get <StartPage>(ContentReference.StartPage); var settingPage = _contentRepo.Get <SettingsPage>(startPage.SettingsPage); return(RedirectToAction("Index", new { node = settingPage.HandleOrganizationUserPage })); }
private async Task <ActionResult> AddNewUserToOrganizationAsync(CustomerBasicInfo organization, AddUserToOrganizationFormViewModel viewModel) { var user = await _accountRepo.CreateUserAsync(viewModel.FirstName, viewModel.LastName, viewModel.Telephone, viewModel.Mobile, viewModel.Email, string.Empty, string.Empty, string.Empty); if (user == null) { throw new ApplicationException("CreateNewFailed"); } var roles = viewModel.Roles.Split(','); await _orgUserRepo.AddUserToOrganizationAsync(user, organization, roles); var startPage = _contentRepo.Get <StartPage>(ContentReference.StartPage); var settingPage = _contentRepo.Get <SettingsPage>(startPage.SettingsPage); var guid = await _securityRepository.GeneratePasswordGuidAsync(user.UserName); var resetPasswordToken = _tokenGenerator.Encrypt(new ResetPasswordConfirmationData { GuidString = guid, UserName = viewModel.Email }); //fire and forget email //var host = Request.Url?.Host + (Request?.Url?.IsDefaultPort == true ? "" : ":" + Request?.Url?.Port); var link = $"{ConfigurationManager.AppSettings["publicSitePrefix"]}/p/resetpassword?payload={resetPasswordToken}"; await SendEmailToNewUserAsync(viewModel.Email, viewModel.Roles, link, organization.CustomerName); TempData["reference"] = "NewUserAdded"; return(RedirectToAction("Index", new { node = settingPage.HandleOrganizationUserPage })); }