From de2dc69400efb217513700b587d1571d31e53c7b Mon Sep 17 00:00:00 2001 From: crupest Date: Wed, 20 Apr 2022 22:10:48 +0800 Subject: ... --- .../Controllers/V2/RegisterCodeController.cs | 80 ++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 BackEnd/Timeline/Controllers/V2/RegisterCodeController.cs (limited to 'BackEnd/Timeline/Controllers/V2/RegisterCodeController.cs') 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> RegisterAsync([FromBody] HttpRegisterCodeRegisterRequest body) + { + try + { + var user = await _registerCodeService.RegisterUserWithCode(new CreateUserParams(body.Username, body.Password) { Nickname = body.Nickname }, body.RegisterCode); + return await MapAsync(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> 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> 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 + }; + } + } +} -- cgit v1.2.3