using System.Text.Json; using FrameworkDAL.DTO.SSO; using StackExchange.Redis; using FastEndpoints; namespace FrameworkSL.Endpoints.SSO { // H-18 fix: migrated off MVC ControllerBase (was SSOService.GetUserSession under // [Route("SSO/Authorize")]) onto native FastEndpoints. public class SSOGetUserSession : Endpoint { private readonly IDatabase _db; private const string SESSION_PREFIX = "sso_session_"; public SSOGetUserSession(IConnectionMultiplexer redis) { _db = redis.GetDatabase(); } public override void Configure() { Get("/SSO/Authorize/GetUserSession"); AllowAnonymous(); } public class Request { [QueryParam] public string Token { get; set; } = ""; } public override async Task HandleAsync(Request req, CancellationToken ct) { var raw = await _db.StringGetAsync(SESSION_PREFIX + req.Token); if (raw.IsNullOrEmpty) { await Send.StringAsync("Invalid or expired token", 400, cancellation: ct); return; } var session = JsonSerializer.Deserialize((string)raw!); await Send.OkAsync(new { clientId = session?.ClientId, realm = session?.Realm, GB5BaseUri = session?.GB5BaseUri, username = session?.UserName, userCode = session?.UserCode, email = session?.Email, issued_at = DateTimeOffset.UtcNow.ToUnixTimeSeconds() }, ct); } } }