aboutsummaryrefslogtreecommitdiff
path: root/BackEnd/Timeline/Services
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2021-04-23 19:06:11 +0800
committercrupest <crupest@outlook.com>2021-04-23 19:06:11 +0800
commit93bf679e0f882a20c560ca0cc7211185d6cdb31a (patch)
tree5b580c3f18ccbe56d923e4001b53bbd932ce924c /BackEnd/Timeline/Services
parentb0b95bd1c7cf97bfa9fc2886f10a871a7c252b6a (diff)
downloadtimeline-93bf679e0f882a20c560ca0cc7211185d6cdb31a.tar.gz
timeline-93bf679e0f882a20c560ca0cc7211185d6cdb31a.tar.bz2
timeline-93bf679e0f882a20c560ca0cc7211185d6cdb31a.zip
feat: Fix #51.
Diffstat (limited to 'BackEnd/Timeline/Services')
-rw-r--r--BackEnd/Timeline/Services/UserTokenException.cs43
-rw-r--r--BackEnd/Timeline/Services/UserTokenHandler.cs (renamed from BackEnd/Timeline/Services/UserTokenService.cs)6
-rw-r--r--BackEnd/Timeline/Services/UserTokenManager.cs28
3 files changed, 50 insertions, 27 deletions
diff --git a/BackEnd/Timeline/Services/UserTokenException.cs b/BackEnd/Timeline/Services/UserTokenException.cs
index d25fabb3..398da41f 100644
--- a/BackEnd/Timeline/Services/UserTokenException.cs
+++ b/BackEnd/Timeline/Services/UserTokenException.cs
@@ -20,14 +20,14 @@ namespace Timeline.Services
[Serializable]
- public class UserTokenTimeExpireException : UserTokenException
+ public class UserTokenTimeExpiredException : UserTokenException
{
- public UserTokenTimeExpireException() : base(Resources.Services.Exception.UserTokenTimeExpireException) { }
- public UserTokenTimeExpireException(string message) : base(message) { }
- public UserTokenTimeExpireException(string message, Exception inner) : base(message, inner) { }
- public UserTokenTimeExpireException(string token, DateTime expireTime, DateTime verifyTime) : base(token, Resources.Services.Exception.UserTokenTimeExpireException) { ExpireTime = expireTime; VerifyTime = verifyTime; }
- public UserTokenTimeExpireException(string token, DateTime expireTime, DateTime verifyTime, Exception inner) : base(token, Resources.Services.Exception.UserTokenTimeExpireException, inner) { ExpireTime = expireTime; VerifyTime = verifyTime; }
- protected UserTokenTimeExpireException(
+ public UserTokenTimeExpiredException() : base(Resources.Services.Exception.UserTokenTimeExpireException) { }
+ public UserTokenTimeExpiredException(string message) : base(message) { }
+ public UserTokenTimeExpiredException(string message, Exception inner) : base(message, inner) { }
+ public UserTokenTimeExpiredException(string token, DateTime expireTime, DateTime verifyTime) : base(token, Resources.Services.Exception.UserTokenTimeExpireException) { ExpireTime = expireTime; VerifyTime = verifyTime; }
+ public UserTokenTimeExpiredException(string token, DateTime expireTime, DateTime verifyTime, Exception inner) : base(token, Resources.Services.Exception.UserTokenTimeExpireException, inner) { ExpireTime = expireTime; VerifyTime = verifyTime; }
+ protected UserTokenTimeExpiredException(
System.Runtime.Serialization.SerializationInfo info,
System.Runtime.Serialization.StreamingContext context) : base(info, context) { }
@@ -37,14 +37,14 @@ namespace Timeline.Services
}
[Serializable]
- public class UserTokenBadVersionException : UserTokenException
+ public class UserTokenVersionExpiredException : UserTokenException
{
- public UserTokenBadVersionException() : base(Resources.Services.Exception.UserTokenBadVersionException) { }
- public UserTokenBadVersionException(string message) : base(message) { }
- public UserTokenBadVersionException(string message, Exception inner) : base(message, inner) { }
- public UserTokenBadVersionException(string token, long tokenVersion, long requiredVersion) : base(token, Resources.Services.Exception.UserTokenBadVersionException) { TokenVersion = tokenVersion; RequiredVersion = requiredVersion; }
- public UserTokenBadVersionException(string token, long tokenVersion, long requiredVersion, Exception inner) : base(token, Resources.Services.Exception.UserTokenBadVersionException, inner) { TokenVersion = tokenVersion; RequiredVersion = requiredVersion; }
- protected UserTokenBadVersionException(
+ public UserTokenVersionExpiredException() : base(Resources.Services.Exception.UserTokenBadVersionException) { }
+ public UserTokenVersionExpiredException(string message) : base(message) { }
+ public UserTokenVersionExpiredException(string message, Exception inner) : base(message, inner) { }
+ public UserTokenVersionExpiredException(string token, long tokenVersion, long requiredVersion) : base(token, Resources.Services.Exception.UserTokenBadVersionException) { TokenVersion = tokenVersion; RequiredVersion = requiredVersion; }
+ public UserTokenVersionExpiredException(string token, long tokenVersion, long requiredVersion, Exception inner) : base(token, Resources.Services.Exception.UserTokenBadVersionException, inner) { TokenVersion = tokenVersion; RequiredVersion = requiredVersion; }
+ protected UserTokenVersionExpiredException(
System.Runtime.Serialization.SerializationInfo info,
System.Runtime.Serialization.StreamingContext context) : base(info, context) { }
@@ -53,6 +53,21 @@ namespace Timeline.Services
public long RequiredVersion { get; set; }
}
+
+ [Serializable]
+ public class UserTokenUserNotExistException : UserTokenException
+ {
+ const string message = "The owner of the token does not exist.";
+
+ public UserTokenUserNotExistException() : base(message) { }
+ public UserTokenUserNotExistException(string token) : base(token, message) { }
+ public UserTokenUserNotExistException(string token, Exception inner) : base(token, message, inner) { }
+
+ protected UserTokenUserNotExistException(
+ System.Runtime.Serialization.SerializationInfo info,
+ System.Runtime.Serialization.StreamingContext context) : base(info, context) { }
+ }
+
[Serializable]
public class UserTokenBadFormatException : UserTokenException
{
diff --git a/BackEnd/Timeline/Services/UserTokenService.cs b/BackEnd/Timeline/Services/UserTokenHandler.cs
index 86f3a0f7..c24a8d47 100644
--- a/BackEnd/Timeline/Services/UserTokenService.cs
+++ b/BackEnd/Timeline/Services/UserTokenHandler.cs
@@ -17,7 +17,7 @@ namespace Timeline.Services
public DateTime? ExpireAt { get; set; }
}
- public interface IUserTokenService
+ public interface IUserTokenHandler
{
/// <summary>
/// Create a token for a given token info.
@@ -40,7 +40,7 @@ namespace Timeline.Services
UserTokenInfo VerifyToken(string token);
}
- public class JwtUserTokenService : IUserTokenService
+ public class JwtUserTokenHandler : IUserTokenHandler
{
private const string VersionClaimType = "timeline_version";
@@ -50,7 +50,7 @@ namespace Timeline.Services
private readonly JwtSecurityTokenHandler _tokenHandler = new JwtSecurityTokenHandler();
private SymmetricSecurityKey _tokenSecurityKey;
- public JwtUserTokenService(IOptionsMonitor<JwtConfiguration> jwtConfig, IClock clock, DatabaseContext database)
+ public JwtUserTokenHandler(IOptionsMonitor<JwtConfiguration> jwtConfig, IClock clock, DatabaseContext database)
{
_jwtConfig = jwtConfig;
_clock = clock;
diff --git a/BackEnd/Timeline/Services/UserTokenManager.cs b/BackEnd/Timeline/Services/UserTokenManager.cs
index 78aa0b1f..898e4d6d 100644
--- a/BackEnd/Timeline/Services/UserTokenManager.cs
+++ b/BackEnd/Timeline/Services/UserTokenManager.cs
@@ -34,10 +34,10 @@ namespace Timeline.Services
/// <param name="token">The token.</param>
/// <returns>The user stored in token.</returns>
/// <exception cref="ArgumentNullException">Thrown when <paramref name="token"/> is null.</exception>
- /// <exception cref="UserTokenTimeExpireException">Thrown when the token is expired.</exception>
- /// <exception cref="UserTokenBadVersionException">Thrown when the token is of bad version.</exception>
+ /// <exception cref="UserTokenTimeExpiredException">Thrown when the token is expired.</exception>
+ /// <exception cref="UserTokenVersionExpiredException">Thrown when the token is of bad version.</exception>
/// <exception cref="UserTokenBadFormatException">Thrown when the token is of bad format.</exception>
- /// <exception cref="UserNotExistException">Thrown when the user specified by the token does not exist. Usually the user had been deleted after the token was issued.</exception>
+ /// <exception cref="UserTokenUserNotExistException">Thrown when the user specified by the token does not exist. Usually the user had been deleted after the token was issued.</exception>
public Task<UserEntity> VerifyToken(string token);
}
@@ -46,10 +46,10 @@ namespace Timeline.Services
private readonly ILogger<UserTokenManager> _logger;
private readonly IUserService _userService;
private readonly IUserCredentialService _userCredentialService;
- private readonly IUserTokenService _userTokenService;
+ private readonly IUserTokenHandler _userTokenService;
private readonly IClock _clock;
- public UserTokenManager(ILogger<UserTokenManager> logger, IUserService userService, IUserCredentialService userCredentialService, IUserTokenService userTokenService, IClock clock)
+ public UserTokenManager(ILogger<UserTokenManager> logger, IUserService userService, IUserCredentialService userCredentialService, IUserTokenHandler userTokenService, IClock clock)
{
_logger = logger;
_userService = userService;
@@ -86,15 +86,23 @@ namespace Timeline.Services
{
var currentTime = _clock.GetCurrentTime();
if (tokenInfo.ExpireAt < currentTime)
- throw new UserTokenTimeExpireException(token, tokenInfo.ExpireAt.Value, currentTime);
+ throw new UserTokenTimeExpiredException(token, tokenInfo.ExpireAt.Value, currentTime);
}
- var user = await _userService.GetUser(tokenInfo.Id);
+ try
+ {
+ var user = await _userService.GetUser(tokenInfo.Id);
+
+ if (tokenInfo.Version < user.Version)
+ throw new UserTokenVersionExpiredException(token, tokenInfo.Version, user.Version);
- if (tokenInfo.Version < user.Version)
- throw new UserTokenBadVersionException(token, tokenInfo.Version, user.Version);
+ return user;
- return user;
+ }
+ catch (UserNotExistException e)
+ {
+ throw new UserTokenUserNotExistException(token, e);
+ }
}
}
}