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>
|
||||
[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>
|
||||
|
@ -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!;
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
@ -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)
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user