diff options
author | crupest <crupest@outlook.com> | 2021-04-23 19:06:11 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2021-04-23 19:06:11 +0800 |
commit | 4b6460e7d564eebff7a79df475a702dbd3f009b9 (patch) | |
tree | 0c4cbc09b95713edcbae9858d709d71a2043e60e /BackEnd/Timeline/Services | |
parent | 15eb51e4b5014e1969677819ced1892c9e41944a (diff) | |
download | timeline-4b6460e7d564eebff7a79df475a702dbd3f009b9.tar.gz timeline-4b6460e7d564eebff7a79df475a702dbd3f009b9.tar.bz2 timeline-4b6460e7d564eebff7a79df475a702dbd3f009b9.zip |
feat: Fix #51.
Diffstat (limited to 'BackEnd/Timeline/Services')
-rw-r--r-- | BackEnd/Timeline/Services/UserTokenException.cs | 43 | ||||
-rw-r--r-- | BackEnd/Timeline/Services/UserTokenHandler.cs (renamed from BackEnd/Timeline/Services/UserTokenService.cs) | 6 | ||||
-rw-r--r-- | BackEnd/Timeline/Services/UserTokenManager.cs | 28 |
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);
+ }
}
}
}
|