// Todo: switch to mine if Leye doesn't respond private async Task AssignDefaultPermission(ImanageUser user, string role) { //var customerPermission = ((Permission[])Enum.GetValues(typeof(Permission))) // .Where(p => p.GetPermissionCategory() == role) // .Select(item => item); var permissionFromRole = PermisionProvider .GetSystemDefaultRoles() .Where(x => x.Key == role).SelectMany(x => x.Value); await AssignPermissionsToUser(permissionFromRole.ToList(), user.Id); }
private async Task <List <ValidationResult> > CreateIdentityUser(ImanageUser user) { string password = Utils.GenerateRandom(6).ToUpper(); var userResult = await _userManager.CreateAsync(user, password); if (!userResult.Succeeded) { results.Add(new ValidationResult(userResult.Errors.FirstOrDefault().Description)); return(results); } return(results); }
private async Task <List <ValidationResult> > CreateUserType(SetupUserViewModel userViewModel, ImanageUser user, UserTypes userType) { if (userType == UserTypes.LandLord) { if (userViewModel.Role != (int)UserRoles.LandLord) { results.Add(new ValidationResult("Partner can only be assigned basic user role.")); await ReverseUserCreated(user); return(results); } } return(results); }
public async Task <List <ValidationResult> > Send2FAToken(ImanageUser user) { if (user == null) { results.Add(new ValidationResult($"User not found")); return(results); } var isTwoFactoreEnabled = user.TwoFactorEnabled; var code = await _userManager.GenerateTwoFactorTokenAsync(user, "Phone2FA"); await SendMessage("sms", BusMessageTypes.USER_MSG, new UserEmailTokenViewModel { Code = code, User = user, EmailType = EmailTypeEnum.UserPhoneActivation }); return(results); }
public async Task <List <ValidationResult> > CreateTruckOwnerUser(EstateManagerSetUpUser model) { _logger.Log(LogLevel.Debug, "Creating new Truck Owner User", model); Enum.TryParse(typeof(UserTypes), model.UserType.ToString(), out object userType); try { var user = new ImanageUser() { UserName = model.Email, FirstName = model.Name, MiddleName = model.Name, LastName = model.Name, Gender = 1, Email = model.Email, UserType = (UserTypes)userType, PhoneNumber = model.PhoneNumber }; var status = await CreateIdentityUser(user); if (status.Any()) { return(status); } //Create new Account var account = new Account { Name = model.Name, Address = model.Address, PhoneNumber = model.PhoneNumber, PhoneNumber2 = model.PhoneNumber2, Website = model.Website, Email = model.Email, CAC = model.CAC, NIN = model.NIN, AccountType = Enums.AccountType.EstateManagementCompany, Status = Enums.AccountStatus.PendingVerification, User_Id = user.Id }; var status2 = await AddAsync(account); model.AccountId = account.Id.ToString(); //Add Claims await _userManager.AddClaimAsync(user, new System.Security.Claims.Claim(ClaimTypesHelper.AccountId, account.Id.ToString())); //await _producerClient.Produce("new_truck_owner", new BusMessage //{ // BusMessageType = (int)BusMessageTypes.NEW_TRUCK_OWNER, // Data = JsonConvert.SerializeObject(model) //}); await _userManager.UpdateAsync(user); //send Password Reset Email await _userService.RequestPasswordReset(user.Email); return(results); } catch (Exception ex) { _logger.Log(LogLevel.Error, "Failed to create new Truck Owner User", model); results.Add(new ValidationResult(ex.Message)); model.IsValid = false; return(results); } }
public async Task <List <ValidationResult> > CreateMarketerUser(LandLordSetUpUser model) { _logger.Log(LogLevel.Debug, "Creating new Marketer User", model); Enum.TryParse(typeof(UserTypes), model.UserType.ToString(), out object userType); try { var user = new ImanageUser() { UserName = model.Email, LastName = model.Name, FirstName = model.Name, MiddleName = model.Name, Gender = 1, Email = model.Email, UserType = (UserTypes)userType, PhoneNumber = model.PhoneNumber, //TwoFactorEnabled = true }; var status = await CreateIdentityUser(user); if (status.Any()) { return(status); } //Create new Account var account = new Account { Name = model.Name, Address = model.Address, PhoneNumber = model.PhoneNumber, PhoneNumber2 = model.PhoneNumber2, Website = model.Website, Email = model.Email, CAC = model.CAC, NIN = model.NIN, AccountType = Enums.AccountType.LandLord, Status = Enums.AccountStatus.PendingVerification, User_Id = user.Id }; var status2 = await AddAsync(account); model.Id = user.Id.ToString(); model.AccountId = account.Id.ToString(); //Add Claims await _userManager.AddClaimAsync(user, new System.Security.Claims.Claim(ClaimTypesHelper.AccountId, account.Id.ToString())); //Broadcast new user (accountId) /*await _producerClient.Produce("new_marketer", new BusMessage * { * BusMessageType = (int)BusMessageTypes.NEW_MARKETER, * Data = JsonConvert.SerializeObject(model) * });*/ //Send Email Confirmation /*var code = await _userManager.GenerateEmailConfirmationTokenAsync(user); * code = WebUtility.UrlEncode(code); * await SendMessage("email", BusMessageTypes.USER_MSG, new UserEmailTokenViewModel * { * Code = code, * User = user, * EmailType = EmailTypeEnum.UserEmailActivation * });*/ //Activate User and Confirm Email //user.Activated = true; //user.EmailConfirmed = true; await _userManager.UpdateAsync(user); //send Password Reset Email await _userService.RequestPasswordReset(user.Email); return(results); } catch (Exception ex) { _logger.Log(LogLevel.Error, "Failed to create new Marketer User", model); results.Add(new ValidationResult(ex.Message)); model.IsValid = false; return(results); } }
private async Task ReverseUserCreated(ImanageUser user) { await _userManager.DeleteAsync(user); }
public async Task <List <ValidationResult> > SetupUser(SetupUserViewModel userViewModel) { bool isValid = Validator.TryValidateObject(userViewModel, new ValidationContext(userViewModel, null, null), results, false); if (!isValid) { return(results); } Enum.TryParse(typeof(UserTypes), userViewModel.UserType.ToString(), out object userType); var user = new ImanageUser() { UserName = userViewModel.Email, LastName = userViewModel.LastName, FirstName = userViewModel.FirstName, MiddleName = userViewModel.MiddleName, Gender = userViewModel.Gender, Email = userViewModel.Email, UserType = (UserTypes)userType }; Enum.TryParse(typeof(UserRoles), userViewModel.Role.ToString(), out object role); var status = await CreateIdentityUser(user); userViewModel.Role = (int)role; if (status.Any()) { return(results); } userViewModel.User_Id = user.Id.ToString(); var createResult = await CreateUserType(userViewModel, user, (UserTypes)userType); if (!createResult.Any()) { user.UserTypeId = Guid.Parse(userViewModel.UserType_Id); await _userManager.UpdateAsync(user); var roleName = role.ToString(); if (!await _roleManager.RoleExistsAsync(roleName)) { await _roleManager.CreateAsync(new ImanageRole() { Name = roleName }); } await _userManager.AddToRoleAsync(user, roleName); await AssignDefaultPermission(user, roleName); userViewModel.RoleName = roleName; } else { await _userManager.DeleteAsync(user); } return(createResult); }