forked from ddrilling/AsbCloudServer
AuthController replace BadRequest
This commit is contained in:
parent
8d1920c6e5
commit
1f9dc2b061
@ -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>
|
||||||
|
@ -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!;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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,9 +101,6 @@ namespace AsbCloudInfrastructure.Services
|
|||||||
};
|
};
|
||||||
|
|
||||||
db.Users.Add(newUser);
|
db.Users.Add(newUser);
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
db.SaveChanges();
|
db.SaveChanges();
|
||||||
db.RelationUserUserRoles.Add(new RelationUserUserRole
|
db.RelationUserUserRoles.Add(new RelationUserUserRole
|
||||||
{
|
{
|
||||||
@ -126,38 +109,27 @@ namespace AsbCloudInfrastructure.Services
|
|||||||
});
|
});
|
||||||
db.SaveChanges();
|
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)
|
||||||
|
@ -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(),
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user