using System.Text.Json; using StackExchange.Redis; namespace VRCAuthProxy.Services; public class RedisService { private readonly IConnectionMultiplexer _redis; private readonly IDatabase _db; private const string AUTH_TOKEN_KEY = "vrcauthproxy:tokens"; public RedisService(string connectionString) { _redis = ConnectionMultiplexer.Connect(connectionString); _db = _redis.GetDatabase(); } public async Task SaveAuthToken(string username, Dictionary cookies) { var serializedCookies = JsonSerializer.Serialize(cookies); await _db.HashSetAsync(AUTH_TOKEN_KEY, username, serializedCookies); } public async Task?> GetAuthToken(string username) { var value = await _db.HashGetAsync(AUTH_TOKEN_KEY, username); if (!value.HasValue) return null; return JsonSerializer.Deserialize>(value!); } public async Task>> GetAllAuthTokens() { var entries = await _db.HashGetAllAsync(AUTH_TOKEN_KEY); var result = new Dictionary>(); foreach (var entry in entries) { var cookies = JsonSerializer.Deserialize>(entry.Value!); if (cookies != null) { result[entry.Name!] = cookies; } } return result; } public async Task RemoveAuthToken(string username) { await _db.HashDeleteAsync(AUTH_TOKEN_KEY, username); } }