32 lines
1.1 KiB
C#
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());
|
|
}
|
|
}
|