diff --git a/SVSim.EmulatedEntrypoint/Extensions/HttpContextExtensions.cs b/SVSim.EmulatedEntrypoint/Extensions/HttpContextExtensions.cs index 8e5f4f7..0228bb0 100644 --- a/SVSim.EmulatedEntrypoint/Extensions/HttpContextExtensions.cs +++ b/SVSim.EmulatedEntrypoint/Extensions/HttpContextExtensions.cs @@ -1,11 +1,13 @@ using SVSim.Database.Models; +using SVSim.EmulatedEntrypoint.Constants; +using SVSim.EmulatedEntrypoint.Services; namespace SVSim.EmulatedEntrypoint.Extensions; public static class HttpContextExtensions { private const string ViewerItemName = "SVSimViewer"; - + public static Viewer? GetViewer(this HttpContext context) { if (context.Items.TryGetValue(ViewerItemName, out object? viewer)) @@ -21,4 +23,18 @@ public static class HttpContextExtensions context.Items[ViewerItemName] = viewer; return viewer; } -} \ No newline at end of file + + /// + /// Resolves the client's UDID for this request by looking up the SID header in the + /// in-memory SID→UDID dict that + /// populates from the UDID header. Returns null when the SID isn't mapped (e.g. the + /// request didn't carry a UDID header at all, or carried an undecodable one). + /// + public static Guid? GetUdid(this HttpContext context) + { + string? sid = context.Request.Headers[NetworkConstants.SessionIdHeaderName]; + if (sid is null) return null; + var sessionService = context.RequestServices.GetService(); + return sessionService?.GetUdidFromSessionId(sid); + } +}