From 81f2f995b051fb881b076cc5d63789594458650e Mon Sep 17 00:00:00 2001 From: Polianin Nikita Date: Wed, 29 May 2024 05:51:32 +0300 Subject: [PATCH] feat: add generate auth token --- Security/Services/AuthService.cs | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/Security/Services/AuthService.cs b/Security/Services/AuthService.cs index c0be65c..471ba37 100644 --- a/Security/Services/AuthService.cs +++ b/Security/Services/AuthService.cs @@ -3,6 +3,10 @@ using Mirea.Api.Security.Common.Dto.Requests; using Mirea.Api.Security.Common.Dto.Responses; using Mirea.Api.Security.Common.Interfaces; using System; +using System.Security; +using System.Text.Json; +using System.Threading; +using System.Threading.Tasks; namespace Mirea.Api.Security.Services; @@ -23,4 +27,31 @@ public class AuthService(ICacheService cache, IAccessToken accessTokenService) JsonSerializer.SerializeToUtf8Bytes(data), slidingExpiration: Lifetime, cancellationToken: cancellation); + + public async Task GenerateAuthTokensAsync(TokenRequest request, string preAuthToken, CancellationToken cancellation = default) + { + string userId = await new PreAuthService(cache).MatchToken(request, preAuthToken, cancellation); + + var refreshToken = GenerateRefreshToken(); + var accessToken = GenerateAccessToken(userId); + + var authTokenStruct = new AuthToken + { + CreatedAt = DateTime.UtcNow, + Ip = request.Ip, + RefreshToken = refreshToken, + UserAgent = request.UserAgent, + UserId = userId, + AccessToken = accessToken.Token + }; + + await SetAuthTokenDataToCache(request.Fingerprint, authTokenStruct, cancellation); + + return new AuthTokenResponse + { + AccessToken = accessToken.Token, + ExpiresIn = accessToken.ExpireIn, + RefreshToken = authTokenStruct.RefreshToken + }; + } } \ No newline at end of file