Пример #1
0
        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);
        }
Пример #2
0
        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);
        }