diff --git a/AsbCloudApp/Data/User/UserDto.cs b/AsbCloudApp/Data/User/UserDto.cs index 184c7ec6..5ff08203 100644 --- a/AsbCloudApp/Data/User/UserDto.cs +++ b/AsbCloudApp/Data/User/UserDto.cs @@ -14,7 +14,7 @@ namespace AsbCloudApp.Data.User /// логин /// [Required(ErrorMessage = "Логин не должен быть пустым")] - [StringLength(50, MinimumLength = 1, ErrorMessage = "Допустимая длина логина от 1 до 50 символов")] + [StringLength(50, MinimumLength = 3, ErrorMessage = "Допустимая длина логина от 3 до 50 символов")] public string Login { get; set; } = null!; /// @@ -39,7 +39,7 @@ namespace AsbCloudApp.Data.User /// Email /// [Required] - [StringLength(260, MinimumLength = 1, ErrorMessage = "Допустимая длина email от 1 до 260 символов")] + [StringLength(260, MinimumLength = 3, ErrorMessage = "Допустимая длина email от 3 до 260 символов")] public string Email { get; set; } = null!; /// diff --git a/AsbCloudApp/Data/User/UserRegistrationDto.cs b/AsbCloudApp/Data/User/UserRegistrationDto.cs index 8e6ce164..dc6b289a 100644 --- a/AsbCloudApp/Data/User/UserRegistrationDto.cs +++ b/AsbCloudApp/Data/User/UserRegistrationDto.cs @@ -9,7 +9,7 @@ namespace AsbCloudApp.Data.User /// пароль, используется только при регистрации. /// [Required(ErrorMessage = "Пароль не должен быть пустым")] - [StringLength(50, MinimumLength = 1, ErrorMessage = "Допустимая длина пароля от 1 до 50 символов")] + [StringLength(50, MinimumLength = 3, ErrorMessage = "Допустимая длина пароля от 3 до 50 символов")] public string Password { get; set; } = null!; } } diff --git a/AsbCloudApp/Services/IAuthService.cs b/AsbCloudApp/Services/IAuthService.cs index 17a22fd1..00bbae86 100644 --- a/AsbCloudApp/Services/IAuthService.cs +++ b/AsbCloudApp/Services/IAuthService.cs @@ -16,7 +16,7 @@ namespace AsbCloudApp.Services /// /// /// - int ChangePassword(int idUser, string newPassword); + void ChangePassword(int idUser, string newPassword); /// /// Смена пароля пользователю @@ -24,7 +24,7 @@ namespace AsbCloudApp.Services /// /// /// - int ChangePassword(string userLogin, string newPassword); + void ChangePassword(string userLogin, string newPassword); /// /// Авторизация @@ -50,6 +50,6 @@ namespace AsbCloudApp.Services /// /// /// - int Register(UserRegistrationDto userDto); + void Register(UserRegistrationDto userDto); } } \ No newline at end of file diff --git a/AsbCloudInfrastructure/Services/AuthService.cs b/AsbCloudInfrastructure/Services/AuthService.cs index d1af9d71..e5677420 100644 --- a/AsbCloudInfrastructure/Services/AuthService.cs +++ b/AsbCloudInfrastructure/Services/AuthService.cs @@ -1,4 +1,5 @@ using AsbCloudApp.Data.User; +using AsbCloudApp.Exceptions; using AsbCloudApp.Repositories; using AsbCloudApp.Services; using AsbCloudDb.Model; @@ -76,27 +77,12 @@ namespace AsbCloudInfrastructure.Services } /// - public int Register(UserRegistrationDto userDto) + public void Register(UserRegistrationDto userDto) { - if (userDto.Login is null || userDto.Login.Length is < 3 or > 50) - return -1; - - if (userDto.Password is null || userDto.Password.Length is < 3 or > 50) - return -2; - - if (userDto.Email.Length > 255) - return -3; - - if (userDto.Phone?.Length > 50) - return -4; - - if (userDto.Position?.Length > 255) - return -5; - var user = db.Users.FirstOrDefault(u => u.Login == userDto.Login); if (user is not null) - return -6; + throw new ArgumentInvalidException("Логин уже занят", nameof(userDto.Login)); var salt = GenerateSalt(); @@ -115,49 +101,35 @@ namespace AsbCloudInfrastructure.Services }; db.Users.Add(newUser); - - try + db.SaveChanges(); + db.RelationUserUserRoles.Add(new RelationUserUserRole { - db.SaveChanges(); - db.RelationUserUserRoles.Add(new RelationUserUserRole - { - IdUser = newUser.Id, - IdUserRole = 2 - }); - db.SaveChanges(); - } - catch - { - return -7; - } - - return 0; + IdUser = newUser.Id, + IdUserRole = 2 + }); + db.SaveChanges(); } /// - public int ChangePassword(string userLogin, string newPassword) + public void ChangePassword(string userLogin, string newPassword) { - var user = db.Users.AsNoTracking().FirstOrDefault(u => u.Login == userLogin); - if (user == null) - return -1; + var user = db.Users.FirstOrDefault(u => u.Login == userLogin) + ?? throw new ArgumentInvalidException("Логин не зарегистрирован", nameof(userLogin)); var salt = GenerateSalt(); user.PasswordHash = salt + ComputeHash(salt, newPassword); db.SaveChanges(); - return 0; } /// - public int ChangePassword(int idUser, string newPassword) + public void ChangePassword(int idUser, string newPassword) { - var user = db.Users.FirstOrDefault(u => u.Id == idUser); - if (user == null) - return -1; + var user = db.Users.FirstOrDefault(u => u.Id == idUser) + ?? throw new ArgumentInvalidException($"Пользователь с idUser:{idUser} не зарегистрирован", nameof(idUser)); var salt = GenerateSalt(); user.PasswordHash = salt + ComputeHash(salt, newPassword); db.SaveChanges(); - return 0; } private async Task MakeUserTokenDto(User user, CancellationToken token) diff --git a/AsbCloudWebApi/Controllers/AuthController.cs b/AsbCloudWebApi/Controllers/AuthController.cs index a041b2a5..6239edc7 100644 --- a/AsbCloudWebApi/Controllers/AuthController.cs +++ b/AsbCloudWebApi/Controllers/AuthController.cs @@ -70,20 +70,11 @@ namespace AsbCloudWebApi.Controllers /// Информация о новом пользователе /// Ок [HttpPost] + [ProducesResponseType(typeof(ValidationProblemDetails), (int)System.Net.HttpStatusCode.BadRequest)] public IActionResult Register(UserRegistrationDto user) { - var code = authService.Register(user); - return code switch - { - 0 => Ok(), - -1 => BadRequest("Логин должен быть длиннее 3х знаков."), - -2 => BadRequest("Пароль должен быть длиннее 3х знаков."), - -3 => BadRequest("Email не должен быть длиннее 255 знаков."), - -4 => BadRequest("Телефон не должен быть длиннее 50 знаков."), - -5 => BadRequest("Название должности не должно быть длиннее 255 символов."), - -6 => BadRequest("Пользователь с таким логином уже зарегистрирован."), - _ => BadRequest(), - }; + authService.Register(user); + return Ok(); } /// @@ -92,6 +83,7 @@ namespace AsbCloudWebApi.Controllers /// Ок [Authorize] [HttpPut("{idUser}/ChangePassword")] + [ProducesResponseType(typeof(ValidationProblemDetails), (int)System.Net.HttpStatusCode.BadRequest)] public IActionResult ChangePassword([FromRoute] int idUser, [FromBody] string newPassword) { var editorUserId = User.GetUserId(); @@ -102,13 +94,8 @@ namespace AsbCloudWebApi.Controllers if (!((editorUserId == idUser) || userRepository.HasPermission((int)editorUserId, "Auth.edit"))) return Forbid(); - var code = authService.ChangePassword(idUser, newPassword); - return code switch - { - 0 => Ok(), - -1 => BadRequest("Нет такого пользователя"), - _ => BadRequest(), - }; + authService.ChangePassword(idUser, newPassword); + return Ok(); } } }