From 3d6c9fd916e18c99b3a5497b8313672680571b5e Mon Sep 17 00:00:00 2001 From: crupest Date: Wed, 9 Mar 2022 21:21:15 +0800 Subject: Add user token entity in preparation for refactor of tokens. --- BackEnd/Timeline/Services/Token/DatabaseUserTokenHandler.cs | 0 BackEnd/Timeline/Services/Token/IUserTokenHandler.cs | 5 +++-- BackEnd/Timeline/Services/Token/UserTokenHandler.cs | 11 ++++++----- BackEnd/Timeline/Services/Token/UserTokenManager.cs | 4 ++-- 4 files changed, 11 insertions(+), 9 deletions(-) create mode 100644 BackEnd/Timeline/Services/Token/DatabaseUserTokenHandler.cs (limited to 'BackEnd/Timeline/Services/Token') diff --git a/BackEnd/Timeline/Services/Token/DatabaseUserTokenHandler.cs b/BackEnd/Timeline/Services/Token/DatabaseUserTokenHandler.cs new file mode 100644 index 00000000..e69de29b diff --git a/BackEnd/Timeline/Services/Token/IUserTokenHandler.cs b/BackEnd/Timeline/Services/Token/IUserTokenHandler.cs index d9788909..62e01de5 100644 --- a/BackEnd/Timeline/Services/Token/IUserTokenHandler.cs +++ b/BackEnd/Timeline/Services/Token/IUserTokenHandler.cs @@ -1,4 +1,5 @@ using System; +using System.Threading.Tasks; namespace Timeline.Services.Token { @@ -10,7 +11,7 @@ namespace Timeline.Services.Token /// The info to generate token. /// Return the generated token. /// Thrown when is null. - string GenerateToken(UserTokenInfo tokenInfo); + Task GenerateTokenAsync(UserTokenInfo tokenInfo); /// /// Verify a token and get the saved info. Do not validate lifetime!!! @@ -23,6 +24,6 @@ namespace Timeline.Services.Token /// If this method throw , it usually means the token is not created by this service. /// Do not check expire time in this method, only check whether it is present. /// - UserTokenInfo VerifyToken(string token); + Task ValidateTokenAsync(string token); } } diff --git a/BackEnd/Timeline/Services/Token/UserTokenHandler.cs b/BackEnd/Timeline/Services/Token/UserTokenHandler.cs index c1633f4a..03b07b53 100644 --- a/BackEnd/Timeline/Services/Token/UserTokenHandler.cs +++ b/BackEnd/Timeline/Services/Token/UserTokenHandler.cs @@ -5,6 +5,7 @@ using System.Globalization; using System.IdentityModel.Tokens.Jwt; using System.Linq; using System.Security.Claims; +using System.Threading.Tasks; using Timeline.Configs; using Timeline.Entities; @@ -35,7 +36,7 @@ namespace Timeline.Services.Token _tokenSecurityKey = new SymmetricSecurityKey(key); } - public string GenerateToken(UserTokenInfo tokenInfo) + public Task GenerateTokenAsync(UserTokenInfo tokenInfo) { if (tokenInfo == null) throw new ArgumentNullException(nameof(tokenInfo)); @@ -60,11 +61,11 @@ namespace Timeline.Services.Token var token = _tokenHandler.CreateToken(tokenDescriptor); var tokenString = _tokenHandler.WriteToken(token); - return tokenString; + return Task.FromResult(tokenString); } - public UserTokenInfo VerifyToken(string token) + public Task ValidateTokenAsync(string token) { if (token == null) throw new ArgumentNullException(nameof(token)); @@ -100,12 +101,12 @@ namespace Timeline.Services.Token if (exp is null) throw new JwtUserTokenBadFormatException(token, JwtUserTokenBadFormatException.ErrorKind.NoExp); - return new UserTokenInfo + return Task.FromResult(new UserTokenInfo { Id = id, Version = version, ExpireAt = EpochTime.DateTime(exp.Value) - }; + }); } catch (Exception e) when (e is SecurityTokenException || e is ArgumentException) { diff --git a/BackEnd/Timeline/Services/Token/UserTokenManager.cs b/BackEnd/Timeline/Services/Token/UserTokenManager.cs index 7ccdfe0a..bdb229f0 100644 --- a/BackEnd/Timeline/Services/Token/UserTokenManager.cs +++ b/BackEnd/Timeline/Services/Token/UserTokenManager.cs @@ -38,7 +38,7 @@ namespace Timeline.Services.Token var userId = await _userService.VerifyCredential(username, password); var user = await _userService.GetUserAsync(userId); - var token = _userTokenService.GenerateToken(new UserTokenInfo + var token = await _userTokenService.GenerateTokenAsync(new UserTokenInfo { Id = user.Id, Version = user.Version, @@ -60,7 +60,7 @@ namespace Timeline.Services.Token try { - tokenInfo = _userTokenService.VerifyToken(token); + tokenInfo = await _userTokenService.ValidateTokenAsync(token); } catch (UserTokenBadFormatException e) { -- cgit v1.2.3