public async Task <RegisterResponce> RegisterAsync(RegisterRequest request) { List <string> roles = new List <string> { Roles.UserRoleName }; if (request.IsAdmin) { if (!m_authService.IsAuthUser()) { throw new AuthenticationException(); } if (!m_authService.AuthUserInRole(Roles.AdminRoleName)) { throw new UserNotAdminException(); } roles.Add(Roles.AdminRoleName); } var nowTime = DateTime.UtcNow; UserDbModel newUser = new UserDbModel { Login = request.Login, PasswordHash = m_passwordService.SaltHash(request.Password), Roles = m_roleService.GetRoleKeys(roles), IsActive = true, Profile = new UserProfileDbModel { Name = request.Name, Created = nowTime, Updated = nowTime, LastLoginDate = nowTime } }; await m_db.Users.AddAsync(newUser); await m_db.SaveChangesAsync(); var tokenInfo = m_tokenService.GetToken(newUser.Id, newUser.Login, m_roleService.GetRoleNames(newUser.Roles)); var tokenInfoResponce = m_mapper.Map <TokenInfoResponce>(tokenInfo); var userInfoResponce = m_mapper.Map <UserFullInfoResponce>(newUser); var registerResponce = new RegisterResponce { TokenInfo = tokenInfoResponce, UserInfo = userInfoResponce }; return(registerResponce); }
public async Task <IActionResult> Register(RegisterRequest request, [FromServices] IAuthService authService, [FromServices] IRoleService roleService) { string roles = "u"; if (request.IsAdmin) { if (HttpContext.User.IsInRole(Roles.AdminRoleName)) { roles += roleService.GetRoleKey(Roles.AdminRoleName); } else { return(Forbid()); } } UserDbModel newUser = new UserDbModel { Name = request.Name, Login = request.Login, PasswordHash = passwordService.SaltHash(request.Password), Created = DateTime.UtcNow, Updated = DateTime.UtcNow, LastLoginDate = DateTime.UtcNow, Roles = roles, IsActive = true }; await db.Users.AddAsync(newUser); await db.SaveChangesAsync(); var tokenInfo = authService.GetToken(newUser); var tokenInfoResponce = mapper.Map <TokenInfoResponce>(tokenInfo); var userInfoResponce = mapper.Map <UserFullInfoResponce>(newUser); var registerResponce = new RegisterResponce { TokenInfo = tokenInfoResponce, UserInfo = userInfoResponce }; return(Ok(registerResponce)); }
//Register new user public RegisterResponce Post(RegisterUser user) { RegisterResponce result = new RegisterResponce(); result.ErrorMessage = new List <string>(); result.ResultCode = 201; if (user.Login.Trim().Length == 0) { result.ResultCode = 400; result.ErrorMessage.Add($"Login is required"); } else if (user.Login.Length < 5 || user.Login.Length > 15) { result.ResultCode = 400; result.ErrorMessage.Add($"Login length need to be between 5 and 15"); } else if (db.Users.Where(x => x.Login == user.Login).FirstOrDefault() != null) { result.ResultCode = 400; result.ErrorMessage.Add($"User with login '{user.Login}' already exists"); } if (user.Email.Trim().Length == 0) { result.ResultCode = 400; result.ErrorMessage.Add($"Email is required"); } else if (!Email.Validate(user.Email)) { result.ResultCode = 400; result.ErrorMessage.Add($"Email format is wrong"); } else if (db.Users.Where(x => x.Email == user.Email).FirstOrDefault() != null) { result.ResultCode = 400; result.ErrorMessage.Add($"User with email '{user.Email}' already exists"); } if (user.Password.Trim().Length == 0) { result.ResultCode = 400; result.ErrorMessage.Add($"Password is required"); } else if (user.Password != user.RepeatPassword) { result.ResultCode = 400; result.ErrorMessage.Add($"Passwords do not match"); } if (user.Name.Trim().Length == 0) { result.ResultCode = 400; result.ErrorMessage.Add($"Name is required"); } else if (user.Name.Length < 1 || user.Name.Length > 30) { result.ResultCode = 400; result.ErrorMessage.Add($"Name length need to be between 1 and 30"); } if (user.SecondName.Trim().Length == 0) { result.ResultCode = 400; result.ErrorMessage.Add($"Second name is required"); } else if (user.SecondName.Length < 1 || user.SecondName.Length > 30) { result.ResultCode = 400; result.ErrorMessage.Add($"Second name length need to be between 1 and 30"); } if (result.ResultCode == 201) { Random random = new Random(); const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz"; string url = new string(Enumerable.Repeat(chars, 20).Select(s => s[random.Next(s.Length)]).ToArray()); User u = new User() { Login = user.Login, Password = Hash.ComputeSha256Hash(user.Password), Name = user.Name, SecondName = user.SecondName, Email = user.Email, IsActivated = false, ActivateUrl = url, RoleId = 1, }; db.Users.Add(u); db.SaveChanges(); string msg = "<h1>Activate your account</h1>"; string domain = HttpContext.Current.Request.Url.Scheme + System.Uri.SchemeDelimiter + HttpContext.Current.Request.Url.Host + (HttpContext.Current.Request.Url.IsDefaultPort ? "" : ":" + HttpContext.Current.Request.Url.Port); msg += $"<p>Click <a href='{domain}/Home/ActivateAccount?u={url}'>here</a> to activate your account</p>"; Email.Send(user.Email, "Activate account", msg); result.ErrorMessage.Add(user.Email); } return(result); }