/// <summary> /// Request reset password token /// </summary> /// <param name="email"></param> /// <returns></returns> public async Task <ApiOkResult> ResetPasswordRequest(string email) { var user = await _appUserManager.FindByEmailAsync(email); if (user == null) { throw new EntityNotFoundException(email, typeof(AppUser)); } var token = UserInviteCodeGenerator.Generate(); var entity = new UserResetPassword { Code = token, UserId = user.Id }; entity = await _userResetPasswordRepository.Insert(entity); var model = new ResetPasswordModel { Email = user.Email, FirstName = user.FirstName, LastName = user.LastName, Token = token, Url = _urlRedirectSettings.ResetPasswordWithToken(user.Email, token) }; var mailBody = await _templateParser.Render(EmailTemplateCollection.USER_RESET_PASSWORD, model); var to = user.Email; await _emailSendTaskRepository.InsertEmail(to, "Reset password", mailBody, Infrastructure.Entities.Tasks.EmailTaskBot.MadRatBot); return(new ApiOkResult(true)); }
public async Task <ProviderWorkerDisplayModel> CreateBySlug(string slug, ProviderWorkerCreateModel model) { if (!await _providerRepository.IsWorkerInRoleBySlug(slug, _userId, ProviderWorkerRole.USER_MANAGER)) { throw new AccessDeniedException(slug, typeof(ProviderWorker)); } model.Email = model.Email.ToLower(); ProviderWorker worker = null; var existsUser = await _appUserRepository.FindByEmailAsync(model.Email, new System.Threading.CancellationToken()); if (existsUser == null) { existsUser = new AppUser { CreateTime = DateTime.UtcNow, State = MREntityState.Active, Status = UserStatus.Invited, Tels = new List <MRUserTel>(), UserName = model.Email, Email = model.Email, FirstName = model.FirstName, LastName = model.LastName, UpdateTime = DateTime.UtcNow, }; existsUser = await _appUserRepository.Insert(existsUser); await _appUserManager.AddToRolesAsync(existsUser, new List <string>() { AppUserRoleList.MANAGER, AppUserRoleList.USER }); var providerShort = await _providerRepository.GetShortBySlug(slug); var invite = await _userInviteRepository.Insert(new UserInvite { Code = UserInviteCodeGenerator.Generate(), IsByIdentity = false, ProviderId = providerShort.Id, ProviderName = providerShort.Name, State = MREntityState.Active, UserId = existsUser.Id }); _logger.LogInformation("Created new user {0} from provider {1}", existsUser.Email, providerShort.Slug); // TODO add invite user email } else { if (await _providerRepository.IsWorkerExistsBySlug(slug, existsUser.Id)) { throw new EntityExistsException("Id", existsUser.Id, typeof(AppUser)); } if (!await _appUserManager.IsInRoleAsync(existsUser, AppUserRoleList.MANAGER)) { await _appUserManager.AddToRoleAsync(existsUser, AppUserRoleList.MANAGER); } // TODO add welcome to provider user email } worker = new ProviderWorker { Roles = model.Roles, UserEmail = model.Email, UserId = existsUser.Id }; await _providerRepository.InsertWorkersBySlug(slug, worker); _logger.LogInformation("Added new worker {0} to provider {1} by user {2}", worker.UserEmail, slug, _userEmail); return(_mapper.Map <ProviderWorkerDisplayModel>(worker).ApplyUser(existsUser)); }