diff options
author | crupest <crupest@outlook.com> | 2022-04-20 22:10:48 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2022-04-20 22:10:48 +0800 |
commit | de2dc69400efb217513700b587d1571d31e53c7b (patch) | |
tree | 6424b78f5f4e7e7f381b9c6f16a6ee1e053fe1f1 /BackEnd/Timeline/Controllers | |
parent | 7187553a32af6a0011e5246080ee2edc2be8215e (diff) | |
download | timeline-de2dc69400efb217513700b587d1571d31e53c7b.tar.gz timeline-de2dc69400efb217513700b587d1571d31e53c7b.tar.bz2 timeline-de2dc69400efb217513700b587d1571d31e53c7b.zip |
...
Diffstat (limited to 'BackEnd/Timeline/Controllers')
-rw-r--r-- | BackEnd/Timeline/Controllers/V2/RegisterCodeController.cs | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/BackEnd/Timeline/Controllers/V2/RegisterCodeController.cs b/BackEnd/Timeline/Controllers/V2/RegisterCodeController.cs new file mode 100644 index 00000000..f3e51ab7 --- /dev/null +++ b/BackEnd/Timeline/Controllers/V2/RegisterCodeController.cs @@ -0,0 +1,80 @@ +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Timeline.Models.Http; +using Timeline.Models.Validation; +using Timeline.Services.User; +using Timeline.Services.User.RegisterCode; + +namespace Timeline.Controllers.V2 +{ + [ApiController] + public class RegisterCodeController : V2ControllerBase + { + private readonly IUserService _userService; + private readonly IRegisterCodeService _registerCodeService; + + public RegisterCodeController(IUserService userService, IRegisterCodeService registerCodeService) + { + _userService = userService; + _registerCodeService = registerCodeService; + } + + [HttpPost("v2/register")] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status422UnprocessableEntity)] + public async Task<ActionResult<HttpUser>> RegisterAsync([FromBody] HttpRegisterCodeRegisterRequest body) + { + try + { + var user = await _registerCodeService.RegisterUserWithCode(new CreateUserParams(body.Username, body.Password) { Nickname = body.Nickname }, body.RegisterCode); + return await MapAsync<HttpUser>(user); + } + catch (InvalidRegisterCodeException) + { + return UnprocessableEntity(new ErrorResponse(ErrorResponse.InvalidRequest, "Invalid register code.")); + } + } + + [HttpGet("v2/users/{username}/registercode")] + [Authorize] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status401Unauthorized)] + [ProducesResponseType(StatusCodes.Status403Forbidden)] + [ProducesResponseType(StatusCodes.Status422UnprocessableEntity)] + public async Task<ActionResult<HttpRegisterCode>> GetRegisterCodeAsync([FromRoute][Username] string username) + { + var userId = await _userService.GetUserIdByUsernameAsync(username); + if (!UserHasPermission(UserPermission.UserManagement) && userId != GetAuthUserId()) + { + return Forbid(); + } + var registerCode = await _registerCodeService.GetCurrentCodeAsync(userId); + return new HttpRegisterCode + { + RegisterCode = registerCode + }; + } + + [HttpPost("v2/users/{username}/renewregistercode")] + [Authorize] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status401Unauthorized)] + [ProducesResponseType(StatusCodes.Status403Forbidden)] + [ProducesResponseType(StatusCodes.Status422UnprocessableEntity)] + public async Task<ActionResult<HttpRegisterCode>> RenewRegisterCodeAsync([FromRoute][Username] string username) + { + var userId = await _userService.GetUserIdByUsernameAsync(username); + if (!UserHasPermission(UserPermission.UserManagement) && userId != GetAuthUserId()) + { + return Forbid(); + } + var registerCode = await _registerCodeService.CreateNewCodeAsync(userId); + return new HttpRegisterCode + { + RegisterCode = registerCode + }; + } + } +} |