aboutsummaryrefslogtreecommitdiff
path: root/Timeline/Controllers
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2020-01-23 20:51:02 +0800
committercrupest <crupest@outlook.com>2020-01-23 20:51:02 +0800
commit42215e7d28d6144e5a19f77ddc060c42b7afdad5 (patch)
tree1e722a0618cdb0fe3f784a0c4100727a5b2b3ece /Timeline/Controllers
parent747bf829351c30069647a44f98ac19f1a214370f (diff)
downloadtimeline-42215e7d28d6144e5a19f77ddc060c42b7afdad5.tar.gz
timeline-42215e7d28d6144e5a19f77ddc060c42b7afdad5.tar.bz2
timeline-42215e7d28d6144e5a19f77ddc060c42b7afdad5.zip
...
Diffstat (limited to 'Timeline/Controllers')
-rw-r--r--Timeline/Controllers/TokenController.cs60
-rw-r--r--Timeline/Controllers/UserController.cs11
2 files changed, 38 insertions, 33 deletions
diff --git a/Timeline/Controllers/TokenController.cs b/Timeline/Controllers/TokenController.cs
index 851c7606..a96b6fa9 100644
--- a/Timeline/Controllers/TokenController.cs
+++ b/Timeline/Controllers/TokenController.cs
@@ -1,11 +1,11 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
-using Microsoft.IdentityModel.Tokens;
using System;
using System.Globalization;
using System.Threading.Tasks;
using Timeline.Helpers;
+using Timeline.Models;
using Timeline.Models.Http;
using Timeline.Services;
using static Timeline.Resources.Controllers.TokenController;
@@ -16,13 +16,22 @@ namespace Timeline.Controllers
[ApiController]
public class TokenController : Controller
{
- private readonly IUserService _userService;
+ private readonly IUserTokenManager _userTokenManager;
private readonly ILogger<TokenController> _logger;
private readonly IClock _clock;
- public TokenController(IUserService userService, ILogger<TokenController> logger, IClock clock)
+ private static User CreateUserFromUserInfo(UserInfo userInfo)
{
- _userService = userService;
+ return new User
+ {
+ Username = userInfo.Username,
+ Administrator = userInfo.Administrator
+ };
+ }
+
+ public TokenController(IUserTokenManager userTokenManager, ILogger<TokenController> logger, IClock clock)
+ {
+ _userTokenManager = userTokenManager;
_logger = logger;
_clock = clock;
}
@@ -47,7 +56,7 @@ namespace Timeline.Controllers
if (request.Expire != null)
expireTime = _clock.GetCurrentTime().AddDays(request.Expire.Value);
- var result = await _userService.CreateToken(request.Username, request.Password, expireTime);
+ var result = await _userTokenManager.CreateToken(request.Username, request.Password, expireTime);
_logger.LogInformation(Log.Format(LogCreateSuccess,
("Username", request.Username),
@@ -56,7 +65,7 @@ namespace Timeline.Controllers
return Ok(new CreateTokenResponse
{
Token = result.Token,
- User = result.User
+ User = CreateUserFromUserInfo(result.User)
});
}
catch (UserNotExistException e)
@@ -86,36 +95,29 @@ namespace Timeline.Controllers
try
{
- var result = await _userService.VerifyToken(request.Token);
+ var result = await _userTokenManager.VerifyToken(request.Token);
_logger.LogInformation(Log.Format(LogVerifySuccess,
("Username", result.Username), ("Token", request.Token)));
return Ok(new VerifyTokenResponse
{
- User = result
+ User = CreateUserFromUserInfo(result)
});
}
- catch (JwtUserTokenBadFormatException e)
+ catch (UserTokenTimeExpireException e)
{
- if (e.ErrorCode == JwtUserTokenBadFormatException.ErrorCodes.Expired)
- {
- var innerException = e.InnerException as SecurityTokenExpiredException;
- LogFailure(LogVerifyExpire, e, ("Expires", innerException?.Expires),
- ("Current Time", _clock.GetCurrentTime()));
- return BadRequest(ErrorResponse.TokenController.Verify_TimeExpired());
- }
- else if (e.ErrorCode == JwtUserTokenBadFormatException.ErrorCodes.OldVersion)
- {
- var innerException = e.InnerException as JwtBadVersionException;
- LogFailure(LogVerifyOldVersion, e,
- ("Token Version", innerException?.TokenVersion),
- ("Required Version", innerException?.RequiredVersion));
- return BadRequest(ErrorResponse.TokenController.Verify_OldVersion());
- }
- else
- {
- LogFailure(LogVerifyBadFormat, e);
- return BadRequest(ErrorResponse.TokenController.Verify_BadFormat());
- }
+ LogFailure(LogVerifyExpire, e, ("Expire Time", e.ExpireTime), ("Verify Time", e.VerifyTime));
+ return BadRequest(ErrorResponse.TokenController.Verify_TimeExpired());
+ }
+ catch (UserTokenBadVersionException e)
+ {
+ LogFailure(LogVerifyOldVersion, e, ("Token Version", e.TokenVersion), ("Required Version", e.RequiredVersion));
+ return BadRequest(ErrorResponse.TokenController.Verify_OldVersion());
+
+ }
+ catch (UserTokenBadFormatException e)
+ {
+ LogFailure(LogVerifyBadFormat, e);
+ return BadRequest(ErrorResponse.TokenController.Verify_BadFormat());
}
catch (UserNotExistException e)
{
diff --git a/Timeline/Controllers/UserController.cs b/Timeline/Controllers/UserController.cs
index 65ee3a0f..5f1b7bd7 100644
--- a/Timeline/Controllers/UserController.cs
+++ b/Timeline/Controllers/UserController.cs
@@ -35,13 +35,16 @@ namespace Timeline.Controllers
[HttpGet("users/{username}"), AdminAuthorize]
public async Task<ActionResult<User>> Get([FromRoute][Username] string username)
{
- var user = await _userService.GetUserByUsername(username);
- if (user == null)
+ try
+ {
+ var user = await _userService.GetUserByUsername(username);
+ return Ok(user);
+ }
+ catch (UserNotExistException e)
{
- _logger.LogInformation(Log.Format(LogGetUserNotExist, ("Username", username)));
+ _logger.LogInformation(e, Log.Format(LogGetUserNotExist, ("Username", username)));
return NotFound(ErrorResponse.UserCommon.NotExist());
}
- return Ok(user);
}
[HttpPut("users/{username}"), AdminAuthorize]