From 7c37a5885437aaf97b9986b7cc2941b5e4316003 Mon Sep 17 00:00:00 2001 From: crupest Date: Sat, 24 Apr 2021 22:01:27 +0800 Subject: refactor: Move token services. --- BackEnd/Timeline/Services/UserTokenManager.cs | 108 -------------------------- 1 file changed, 108 deletions(-) delete mode 100644 BackEnd/Timeline/Services/UserTokenManager.cs (limited to 'BackEnd/Timeline/Services/UserTokenManager.cs') diff --git a/BackEnd/Timeline/Services/UserTokenManager.cs b/BackEnd/Timeline/Services/UserTokenManager.cs deleted file mode 100644 index 898e4d6d..00000000 --- a/BackEnd/Timeline/Services/UserTokenManager.cs +++ /dev/null @@ -1,108 +0,0 @@ -using Microsoft.Extensions.Logging; -using System; -using System.Threading.Tasks; -using Timeline.Entities; -using Timeline.Helpers; -using Timeline.Services.Exceptions; - -namespace Timeline.Services -{ - public class UserTokenCreateResult - { - public string Token { get; set; } = default!; - public UserEntity User { get; set; } = default!; - } - - public interface IUserTokenManager - { - /// - /// Try to create a token for given username and password. - /// - /// The username. - /// The password. - /// The expire time of the token. - /// The created token and the user info. - /// Thrown when or is null. - /// Thrown when is of bad format. - /// Thrown when the user with does not exist. - /// Thrown when is wrong. - public Task CreateToken(string username, string password, DateTime? expireAt = null); - - /// - /// Verify a token and get the saved user info. This also check the database for existence of the user. - /// - /// The token. - /// The user stored in token. - /// Thrown when is null. - /// Thrown when the token is expired. - /// Thrown when the token is of bad version. - /// Thrown when the token is of bad format. - /// Thrown when the user specified by the token does not exist. Usually the user had been deleted after the token was issued. - public Task VerifyToken(string token); - } - - public class UserTokenManager : IUserTokenManager - { - private readonly ILogger _logger; - private readonly IUserService _userService; - private readonly IUserCredentialService _userCredentialService; - private readonly IUserTokenHandler _userTokenService; - private readonly IClock _clock; - - public UserTokenManager(ILogger logger, IUserService userService, IUserCredentialService userCredentialService, IUserTokenHandler userTokenService, IClock clock) - { - _logger = logger; - _userService = userService; - _userCredentialService = userCredentialService; - _userTokenService = userTokenService; - _clock = clock; - } - - public async Task CreateToken(string username, string password, DateTime? expireAt = null) - { - expireAt = expireAt?.MyToUtc(); - - if (username == null) - throw new ArgumentNullException(nameof(username)); - if (password == null) - throw new ArgumentNullException(nameof(password)); - - var userId = await _userCredentialService.VerifyCredential(username, password); - var user = await _userService.GetUser(userId); - var token = _userTokenService.GenerateToken(new UserTokenInfo { Id = user.Id, Version = user.Version, ExpireAt = expireAt }); - - return new UserTokenCreateResult { Token = token, User = user }; - } - - - public async Task VerifyToken(string token) - { - if (token == null) - throw new ArgumentNullException(nameof(token)); - - var tokenInfo = _userTokenService.VerifyToken(token); - - if (tokenInfo.ExpireAt.HasValue) - { - var currentTime = _clock.GetCurrentTime(); - if (tokenInfo.ExpireAt < currentTime) - throw new UserTokenTimeExpiredException(token, tokenInfo.ExpireAt.Value, currentTime); - } - - try - { - var user = await _userService.GetUser(tokenInfo.Id); - - if (tokenInfo.Version < user.Version) - throw new UserTokenVersionExpiredException(token, tokenInfo.Version, user.Version); - - return user; - - } - catch (UserNotExistException e) - { - throw new UserTokenUserNotExistException(token, e); - } - } - } -} -- cgit v1.2.3