diff options
author | 杨宇千 <crupest@outlook.com> | 2019-04-13 15:47:40 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-04-13 15:47:40 +0800 |
commit | 56c51bdf844ce1e3642dcdc4099187e7e57008c7 (patch) | |
tree | 1aa37565aad734b604eb94ed3a62db2308f4b30d /Timeline/Controllers/UserController.cs | |
parent | 19cae15eba2bcede41b818e1b8ab7fd5ac92eb05 (diff) | |
parent | 108ea333534445a8c76d4db632ebf21abf426c71 (diff) | |
download | timeline-56c51bdf844ce1e3642dcdc4099187e7e57008c7.tar.gz timeline-56c51bdf844ce1e3642dcdc4099187e7e57008c7.tar.bz2 timeline-56c51bdf844ce1e3642dcdc4099187e7e57008c7.zip |
Merge pull request #20 from crupest/separate
Separate front end and back end.
Diffstat (limited to 'Timeline/Controllers/UserController.cs')
-rw-r--r-- | Timeline/Controllers/UserController.cs | 54 |
1 files changed, 42 insertions, 12 deletions
diff --git a/Timeline/Controllers/UserController.cs b/Timeline/Controllers/UserController.cs index eb1b8513..3b4e7b4f 100644 --- a/Timeline/Controllers/UserController.cs +++ b/Timeline/Controllers/UserController.cs @@ -1,12 +1,14 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; +using System; +using System.Threading.Tasks; using Timeline.Entities; using Timeline.Services; namespace Timeline.Controllers { - [Route("api/[controller]")] + [Route("[controller]")] public class UserController : Controller { private static class LoggingEventIds @@ -16,23 +18,22 @@ namespace Timeline.Controllers } private readonly IUserService _userService; - private readonly IJwtService _jwtService; private readonly ILogger<UserController> _logger; - public UserController(IUserService userService, IJwtService jwtService, ILogger<UserController> logger) + public UserController(IUserService userService, ILogger<UserController> logger) { _userService = userService; - _jwtService = jwtService; _logger = logger; } [HttpPost("[action]")] [AllowAnonymous] - public ActionResult<CreateTokenResponse> CreateToken([FromBody] CreateTokenRequest request) + public async Task<ActionResult<CreateTokenResponse>> CreateToken([FromBody] CreateTokenRequest request) { - var user = _userService.Authenticate(request.Username, request.Password); + var result = await _userService.CreateToken(request.Username, request.Password); - if (user == null) { + if (result == null) + { _logger.LogInformation(LoggingEventIds.LogInFailed, "Attemp to login with username: {} and password: {} failed.", request.Username, request.Password); return Ok(new CreateTokenResponse { @@ -45,17 +46,46 @@ namespace Timeline.Controllers return Ok(new CreateTokenResponse { Success = true, - Token = _jwtService.GenerateJwtToken(user), - UserInfo = user.GetUserInfo() + Token = result.Token, + UserInfo = result.UserInfo }); } [HttpPost("[action]")] [AllowAnonymous] - public ActionResult<TokenValidationResponse> ValidateToken([FromBody] TokenValidationRequest request) + public async Task<ActionResult<TokenValidationResponse>> ValidateToken([FromBody] TokenValidationRequest request) { - var result = _jwtService.ValidateJwtToken(request.Token); - return Ok(result); + var result = await _userService.VerifyToken(request.Token); + + if (result == null) + { + return Ok(new TokenValidationResponse + { + IsValid = false, + }); + } + + return Ok(new TokenValidationResponse + { + IsValid = true, + UserInfo = result + }); + } + + [HttpPost("[action]")] + [Authorize(Roles = "admin")] + public async Task<ActionResult<CreateUserResponse>> CreateUser([FromBody] CreateUserRequest request) + { + var result = await _userService.CreateUser(request.Username, request.Password, request.Roles); + switch (result) + { + case CreateUserResult.Success: + return Ok(new CreateUserResponse { ReturnCode = CreateUserResponse.SuccessCode }); + case CreateUserResult.AlreadyExists: + return Ok(new CreateUserResponse { ReturnCode = CreateUserResponse.AlreadyExistsCode }); + default: + throw new Exception("Unreachable code."); + } } } } |