Files
oed/api/OED.Api/Infrastructure/Auth/TokenStore.cs

32 lines
1.1 KiB
C#

using OED.Api.Core.Interfaces.Services;
using StackExchange.Redis;
namespace OED.Api.Infrastructure.Auth;
public class TokenStore(IConnectionMultiplexer redis, ITokenEncryptor encryptor) : ITokenStore
{
private readonly IDatabase _db = redis.GetDatabase();
public async Task SetAccessTokenAsync(long characterId, string token, TimeSpan expiry)
=> await _db.StringSetAsync($"accesstoken:{characterId}", token, expiry);
public async Task<string?> GetAccessTokenAsync(long characterId)
{
var val = await _db.StringGetAsync($"accesstoken:{characterId}");
return val.IsNullOrEmpty ? null : val.ToString();
}
public async Task SetRefreshTokenAsync(long characterId, string token)
{
var encrypted = encryptor.Encrypt(token);
await _db.StringSetAsync($"refreshtoken:{characterId}", encrypted);
}
public async Task<string?> GetRefreshTokenAsync(long characterId)
{
var val = await _db.StringGetAsync($"refreshtoken:{characterId}");
if (val.IsNullOrEmpty) return null;
return encryptor.Decrypt(val.ToString());
}
}