AuthController replace BadRequest

This commit is contained in:
ngfrolov 2023-09-28 17:09:44 +05:00
parent 8d1920c6e5
commit 1f9dc2b061
Signed by untrusted user who does not match committer: ng.frolov
GPG Key ID: E99907A0357B29A7
5 changed files with 27 additions and 68 deletions

View File

@ -14,7 +14,7 @@ namespace AsbCloudApp.Data.User
/// логин /// логин
/// </summary> /// </summary>
[Required(ErrorMessage = "Логин не должен быть пустым")] [Required(ErrorMessage = "Логин не должен быть пустым")]
[StringLength(50, MinimumLength = 1, ErrorMessage = "Допустимая длина логина от 1 до 50 символов")] [StringLength(50, MinimumLength = 3, ErrorMessage = "Допустимая длина логина от 3 до 50 символов")]
public string Login { get; set; } = null!; public string Login { get; set; } = null!;
/// <summary> /// <summary>
@ -39,7 +39,7 @@ namespace AsbCloudApp.Data.User
/// Email /// Email
/// </summary> /// </summary>
[Required] [Required]
[StringLength(260, MinimumLength = 1, ErrorMessage = "Допустимая длина email от 1 до 260 символов")] [StringLength(260, MinimumLength = 3, ErrorMessage = "Допустимая длина email от 3 до 260 символов")]
public string Email { get; set; } = null!; public string Email { get; set; } = null!;
/// <summary> /// <summary>

View File

@ -9,7 +9,7 @@ namespace AsbCloudApp.Data.User
/// пароль, используется только при регистрации. /// пароль, используется только при регистрации.
/// </summary> /// </summary>
[Required(ErrorMessage = "Пароль не должен быть пустым")] [Required(ErrorMessage = "Пароль не должен быть пустым")]
[StringLength(50, MinimumLength = 1, ErrorMessage = "Допустимая длина пароля от 1 до 50 символов")] [StringLength(50, MinimumLength = 3, ErrorMessage = "Допустимая длина пароля от 3 до 50 символов")]
public string Password { get; set; } = null!; public string Password { get; set; } = null!;
} }
} }

View File

@ -16,7 +16,7 @@ namespace AsbCloudApp.Services
/// <param name="idUser"></param> /// <param name="idUser"></param>
/// <param name="newPassword"></param> /// <param name="newPassword"></param>
/// <returns></returns> /// <returns></returns>
int ChangePassword(int idUser, string newPassword); void ChangePassword(int idUser, string newPassword);
/// <summary> /// <summary>
/// Смена пароля пользователю /// Смена пароля пользователю
@ -24,7 +24,7 @@ namespace AsbCloudApp.Services
/// <param name="userLogin"></param> /// <param name="userLogin"></param>
/// <param name="newPassword"></param> /// <param name="newPassword"></param>
/// <returns></returns> /// <returns></returns>
int ChangePassword(string userLogin, string newPassword); void ChangePassword(string userLogin, string newPassword);
/// <summary> /// <summary>
/// Авторизация /// Авторизация
@ -50,6 +50,6 @@ namespace AsbCloudApp.Services
/// </summary> /// </summary>
/// <param name="userDto"></param> /// <param name="userDto"></param>
/// <returns></returns> /// <returns></returns>
int Register(UserRegistrationDto userDto); void Register(UserRegistrationDto userDto);
} }
} }

View File

@ -1,4 +1,5 @@
using AsbCloudApp.Data.User; using AsbCloudApp.Data.User;
using AsbCloudApp.Exceptions;
using AsbCloudApp.Repositories; using AsbCloudApp.Repositories;
using AsbCloudApp.Services; using AsbCloudApp.Services;
using AsbCloudDb.Model; using AsbCloudDb.Model;
@ -76,27 +77,12 @@ namespace AsbCloudInfrastructure.Services
} }
/// <inheritdoc/> /// <inheritdoc/>
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); var user = db.Users.FirstOrDefault(u => u.Login == userDto.Login);
if (user is not null) if (user is not null)
return -6; throw new ArgumentInvalidException("Логин уже занят", nameof(userDto.Login));
var salt = GenerateSalt(); var salt = GenerateSalt();
@ -115,49 +101,35 @@ namespace AsbCloudInfrastructure.Services
}; };
db.Users.Add(newUser); db.Users.Add(newUser);
db.SaveChanges();
try db.RelationUserUserRoles.Add(new RelationUserUserRole
{ {
db.SaveChanges(); IdUser = newUser.Id,
db.RelationUserUserRoles.Add(new RelationUserUserRole IdUserRole = 2
{ });
IdUser = newUser.Id, db.SaveChanges();
IdUserRole = 2
});
db.SaveChanges();
}
catch
{
return -7;
}
return 0;
} }
/// <inheritdoc/> /// <inheritdoc/>
public int ChangePassword(string userLogin, string newPassword) public void ChangePassword(string userLogin, string newPassword)
{ {
var user = db.Users.AsNoTracking().FirstOrDefault(u => u.Login == userLogin); var user = db.Users.FirstOrDefault(u => u.Login == userLogin)
if (user == null) ?? throw new ArgumentInvalidException("Логин не зарегистрирован", nameof(userLogin));
return -1;
var salt = GenerateSalt(); var salt = GenerateSalt();
user.PasswordHash = salt + ComputeHash(salt, newPassword); user.PasswordHash = salt + ComputeHash(salt, newPassword);
db.SaveChanges(); db.SaveChanges();
return 0;
} }
/// <inheritdoc/> /// <inheritdoc/>
public int ChangePassword(int idUser, string newPassword) public void ChangePassword(int idUser, string newPassword)
{ {
var user = db.Users.FirstOrDefault(u => u.Id == idUser); var user = db.Users.FirstOrDefault(u => u.Id == idUser)
if (user == null) ?? throw new ArgumentInvalidException($"Пользователь с idUser:{idUser} не зарегистрирован", nameof(idUser));
return -1;
var salt = GenerateSalt(); var salt = GenerateSalt();
user.PasswordHash = salt + ComputeHash(salt, newPassword); user.PasswordHash = salt + ComputeHash(salt, newPassword);
db.SaveChanges(); db.SaveChanges();
return 0;
} }
private async Task<UserTokenDto?> MakeUserTokenDto(User user, CancellationToken token) private async Task<UserTokenDto?> MakeUserTokenDto(User user, CancellationToken token)

View File

@ -70,20 +70,11 @@ namespace AsbCloudWebApi.Controllers
/// <param name="user">Информация о новом пользователе</param> /// <param name="user">Информация о новом пользователе</param>
/// <returns code="200">Ок</returns> /// <returns code="200">Ок</returns>
[HttpPost] [HttpPost]
[ProducesResponseType(typeof(ValidationProblemDetails), (int)System.Net.HttpStatusCode.BadRequest)]
public IActionResult Register(UserRegistrationDto user) public IActionResult Register(UserRegistrationDto user)
{ {
var code = authService.Register(user); authService.Register(user);
return code switch return Ok();
{
0 => Ok(),
-1 => BadRequest("Логин должен быть длиннее 3х знаков."),
-2 => BadRequest("Пароль должен быть длиннее 3х знаков."),
-3 => BadRequest("Email не должен быть длиннее 255 знаков."),
-4 => BadRequest("Телефон не должен быть длиннее 50 знаков."),
-5 => BadRequest("Название должности не должно быть длиннее 255 символов."),
-6 => BadRequest("Пользователь с таким логином уже зарегистрирован."),
_ => BadRequest(),
};
} }
/// <summary> /// <summary>
@ -92,6 +83,7 @@ namespace AsbCloudWebApi.Controllers
/// <returns code="200">Ок</returns> /// <returns code="200">Ок</returns>
[Authorize] [Authorize]
[HttpPut("{idUser}/ChangePassword")] [HttpPut("{idUser}/ChangePassword")]
[ProducesResponseType(typeof(ValidationProblemDetails), (int)System.Net.HttpStatusCode.BadRequest)]
public IActionResult ChangePassword([FromRoute] int idUser, [FromBody] string newPassword) public IActionResult ChangePassword([FromRoute] int idUser, [FromBody] string newPassword)
{ {
var editorUserId = User.GetUserId(); var editorUserId = User.GetUserId();
@ -102,13 +94,8 @@ namespace AsbCloudWebApi.Controllers
if (!((editorUserId == idUser) || userRepository.HasPermission((int)editorUserId, "Auth.edit"))) if (!((editorUserId == idUser) || userRepository.HasPermission((int)editorUserId, "Auth.edit")))
return Forbid(); return Forbid();
var code = authService.ChangePassword(idUser, newPassword); authService.ChangePassword(idUser, newPassword);
return code switch return Ok();
{
0 => Ok(),
-1 => BadRequest("Нет такого пользователя"),
_ => BadRequest(),
};
} }
} }
} }