diff --git a/AsbCloudWebApi/AsbCloudWebApi.csproj b/AsbCloudWebApi/AsbCloudWebApi.csproj index c5a832bc..fe1f5ddf 100644 --- a/AsbCloudWebApi/AsbCloudWebApi.csproj +++ b/AsbCloudWebApi/AsbCloudWebApi.csproj @@ -36,5 +36,9 @@ + + + + diff --git a/AsbCloudWebApi/Controllers/AuthController.cs b/AsbCloudWebApi/Controllers/AuthController.cs index f082dc8e..d3b7a912 100644 --- a/AsbCloudWebApi/Controllers/AuthController.cs +++ b/AsbCloudWebApi/Controllers/AuthController.cs @@ -52,5 +52,50 @@ namespace AsbCloudWebApi.Controllers var newToken = authService.Refresh(User); return Ok(newToken); } + + /// + /// Регистрация пользователя. Доступна администратору + /// + /// Ок + [Authorize] + [HttpPost] + public IActionResult Register(UserDto user) + { + const string roleName = "Администратор"; + if (!User.IsInRole(roleName)) + return Forbid($"You mast be an {roleName}."); + + var code = authService.Register(user); + return code switch + { + 0 => Ok(), + -1 => BadRequest("Логин должен быть длиннее 3х знаков."), + -2 => BadRequest("Пароль должен быть длиннее 3х знаков."), + _ => BadRequest(), + }; + } + + /// + /// Смена пароля пользователя. Доступна пользователю и администратору + /// + /// Ок + [Authorize] + [HttpPut("{idUser}/ChangePassword")] + public IActionResult ChangePassword([FromRoute]int idUser, [FromBody]string newPassword) + { + const string roleName = "Администратор"; + var allow = (User.GetUserId() == idUser) || User.IsInRole(roleName); + + if (!allow) + return Forbid($"You mast be an {roleName} or user with id:{idUser}."); + + var code = authService.ChangePassword(idUser, newPassword); + return code switch + { + 0 => Ok(), + -1 => BadRequest("Нет такого пользователя"), + _ => BadRequest(), + }; + } } }