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

View File

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

View File

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

View File

@ -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
}
/// <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);
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();
}
/// <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);
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;
}
/// <inheritdoc/>
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<UserTokenDto?> MakeUserTokenDto(User user, CancellationToken token)

View File

@ -70,20 +70,11 @@ namespace AsbCloudWebApi.Controllers
/// <param name="user">Информация о новом пользователе</param>
/// <returns code="200">Ок</returns>
[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();
}
/// <summary>
@ -92,6 +83,7 @@ namespace AsbCloudWebApi.Controllers
/// <returns code="200">Ок</returns>
[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();
}
}
}