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();
}
}
}