public async Task <IActionResult> OnPostAsync(string returnUrl = null) { returnUrl = returnUrl ?? Url.Content("~/"); if (ModelState.IsValid) { int?tenantId = null; if (Input.SelectedTenantId != null) { tenantId = Input.SelectedTenantId; Input.IsAdmin = false; } var user = new IzendaUser { UserName = Input.UserID, Email = Input.UserID, TenantId = tenantId, }; var result = await _userManager.CreateAsync(user); // Save new user into client DB if (result.Succeeded) // if successful, then start creating a user at Izenda DB { var assignedRole = !string.IsNullOrEmpty(Input.SelectedRole) ? Input.SelectedRole : "Employee"; // set default role if required. As an example, Employee is set by default var isRoleExisting = _roleManager.FindByNameAsync(assignedRole); // check assigned role exist in client DB. if not, assigned role is null if (isRoleExisting == null) { try { await _roleManager.CreateAsync(new Microsoft.AspNetCore.Identity.IdentityRole(assignedRole)); result = await _userManager.AddToRoleAsync(user, assignedRole); } catch (Exception e) { Debug.WriteLine(e); } } else { result = await _userManager.AddToRoleAsync(user, assignedRole); } if (result.Succeeded) { var izendaAdminAuthToken = IzendaTokenAuthorization.GetIzendaAdminToken(); user.Tenant = _tenantManager.GetTenantById(Input.SelectedTenantId); // set client DB application user's tenant var tenantName = user.Tenant?.Name ?? null; // Create a new user at Izenda DB var success = await IzendaUtilities.CreateIzendaUser( tenantName, Input.UserID, Input.LastName, Input.FirstName, Input.IsAdmin, assignedRole, izendaAdminAuthToken); if (success) { return(LocalRedirect(returnUrl)); } } ModelState.AddModelError(string.Empty, "Failed to create a new user. User already exists in DB."); return(Page()); } } ModelState.AddModelError(string.Empty, "Failed to create a new user. Invalid model."); return(Page()); }
public async Task <IActionResult> OnPostAsync(string returnUrl = null) { returnUrl = returnUrl ?? Url.Content("~/"); if (ModelState.IsValid) { var tenant = await HandleTenant(Input.Tenant); var roleName = IsSystemTenant(tenant.Name) ? "Administrator" : "Manager"; var user = new IzendaUser { Tenant_Id = tenant.Id, UserName = Input.Email, Email = Input.Email }; var result = await userManager.CreateAsync(user, Input.Password); await userManager.AddToRoleAsync(user, roleName); if (result.Succeeded) { logger.LogInformation("User created a new account with password."); //determine tenant Tenants izendaTenant = null; if (!IsSystemTenant(tenant.Name)) { izendaTenant = new Tenants(); izendaTenant.Active = true; izendaTenant.Deleted = false; izendaTenant.Name = tenant.Name; izendaTenant.TenantID = tenant.Name; TenantIntegrationConfig.AddOrUpdateTenant(izendaTenant); } //determine roles var roleDetail = new RoleDetail() { Name = roleName, TenantUniqueName = tenant.Name, Active = true, Permission = new Izenda.BI.Framework.Models.Permissions.Permission(), }; var izendaUser = new UserDetail() { UserName = user.Email, EmailAddress = user.Email, FirstName = "John", //todo fix this LastName = "Doe", TenantDisplayId = izendaTenant?.Name, SystemAdmin = IsSystemTenant(tenant.Name), Deleted = false, Active = true, Roles = new List <Role>() }; izendaUser.Roles.Add(new Role() { Name = roleDetail.Name }); RoleIntegrationConfig.AddOrUpdateRole(roleDetail); UserIntegrationConfig.AddOrUpdateUser(izendaUser); await signInManager.SignInAsync(user, isPersistent : false); return(LocalRedirect(returnUrl)); } foreach (var error in result.Errors) { ModelState.AddModelError(string.Empty, error.Description); } } // If we got this far, something failed, redisplay form return(Page()); }