From e20c56e4f1a19a4eeeea00aa835f8166538578c0 Mon Sep 17 00:00:00 2001 From: Chomp Date: Fri, 18 Jul 2025 17:12:11 +0100 Subject: [PATCH] Improved transition from string to mongoId inside httpListener --- .../Servers/Http/IHttpListener.cs | 5 ++-- .../Servers/Http/SptHttpListener.cs | 24 ++++++++++--------- .../Servers/HttpServer.cs | 8 +++++-- .../SPTarkov.Server.Core/Status/StatusPage.cs | 5 ++-- 4 files changed, 25 insertions(+), 17 deletions(-) diff --git a/Libraries/SPTarkov.Server.Core/Servers/Http/IHttpListener.cs b/Libraries/SPTarkov.Server.Core/Servers/Http/IHttpListener.cs index 8fdb0425..3c1eb783 100644 --- a/Libraries/SPTarkov.Server.Core/Servers/Http/IHttpListener.cs +++ b/Libraries/SPTarkov.Server.Core/Servers/Http/IHttpListener.cs @@ -1,9 +1,10 @@ using Microsoft.AspNetCore.Http; +using SPTarkov.Server.Core.Models.Common; namespace SPTarkov.Server.Core.Servers.Http; public interface IHttpListener { - bool CanHandle(string sessionId, HttpRequest req); - Task Handle(string sessionId, HttpRequest req, HttpResponse resp); + bool CanHandle(MongoId sessionId, HttpRequest req); + Task Handle(MongoId sessionId, HttpRequest req, HttpResponse resp); } diff --git a/Libraries/SPTarkov.Server.Core/Servers/Http/SptHttpListener.cs b/Libraries/SPTarkov.Server.Core/Servers/Http/SptHttpListener.cs index 7547c929..a75faa5b 100644 --- a/Libraries/SPTarkov.Server.Core/Servers/Http/SptHttpListener.cs +++ b/Libraries/SPTarkov.Server.Core/Servers/Http/SptHttpListener.cs @@ -4,6 +4,7 @@ using System.Text; using Microsoft.AspNetCore.Http; using SPTarkov.DI.Annotations; using SPTarkov.Server.Core.DI; +using SPTarkov.Server.Core.Models.Common; using SPTarkov.Server.Core.Models.Enums; using SPTarkov.Server.Core.Models.Utils; using SPTarkov.Server.Core.Routers; @@ -32,12 +33,12 @@ public class SptHttpListener( protected readonly HttpRouter _router = _httpRouter; protected readonly IEnumerable _serializers = _serializers; - public bool CanHandle(string _, HttpRequest req) + public bool CanHandle(MongoId _, HttpRequest req) { return SupportedMethods.Contains(req.Method); } - public async Task Handle(string sessionId, HttpRequest req, HttpResponse resp) + public async Task Handle(MongoId sessionId, HttpRequest req, HttpResponse resp) { switch (req.Method) { @@ -126,7 +127,7 @@ public class SptHttpListener( /// Buffer /// Server generated response data public async Task SendResponse( - string sessionID, + MongoId sessionID, HttpRequest req, HttpResponse resp, object? body, @@ -157,7 +158,7 @@ public class SptHttpListener( await serialiser.Serialize(sessionID, req, resp, bodyInfo); } else - // No serializer can handle the request (majority of requests dont), zlib the output and send response back + // No serializer can handle the request (majority of requests don't), zlib the output and send response back { await SendZlibJson(resp, output, sessionID); } @@ -189,9 +190,10 @@ public class SptHttpListener( } } - public async ValueTask GetResponse(string sessionID, HttpRequest req, string? body) + public async ValueTask GetResponse(MongoId sessionId, HttpRequest req, string? body) { - var output = await _router.GetResponse(req, sessionID, body); + var output = await _router.GetResponse(req, sessionId, body); + /* route doesn't exist or response is not properly set up */ if (string.IsNullOrEmpty(output)) { @@ -208,28 +210,28 @@ public class SptHttpListener( if (ProgramStatics.ENTRY_TYPE() != EntryType.RELEASE) { // Parse quest info into object - var log = new Request(req.Method, new RequestData(req.Path, req.Headers)); + var log = new Request(req.Method, new RequestData(req.Path.ToString(), req.Headers)); _requestsLogger.Info($"REQUEST={_jsonUtil.Serialize(log)}"); } return output; } - public async Task SendJson(HttpResponse resp, string? output, string sessionID) + public async Task SendJson(HttpResponse resp, string? output, MongoId sessionID) { resp.StatusCode = 200; resp.ContentType = "application/json"; - resp.Headers.Append("Set-Cookie", $"PHPSESSID={sessionID}"); + resp.Headers.Append("Set-Cookie", $"PHPSESSID={sessionID.ToString()}"); if (!string.IsNullOrEmpty(output)) { - await resp.Body.WriteAsync(Encoding.UTF8.GetBytes(output)); + await resp.WriteAsync(output); } await resp.StartAsync(); await resp.CompleteAsync(); } - public async Task SendZlibJson(HttpResponse resp, string? output, string sessionID) + public async Task SendZlibJson(HttpResponse resp, string? output, MongoId sessionID) { using (var ms = new MemoryStream()) { diff --git a/Libraries/SPTarkov.Server.Core/Servers/HttpServer.cs b/Libraries/SPTarkov.Server.Core/Servers/HttpServer.cs index 8a808168..77ee5510 100644 --- a/Libraries/SPTarkov.Server.Core/Servers/HttpServer.cs +++ b/Libraries/SPTarkov.Server.Core/Servers/HttpServer.cs @@ -2,6 +2,7 @@ using Microsoft.Extensions.Primitives; using SPTarkov.Common.Extensions; using SPTarkov.DI.Annotations; +using SPTarkov.Server.Core.Models.Common; using SPTarkov.Server.Core.Models.Spt.Config; using SPTarkov.Server.Core.Models.Utils; using SPTarkov.Server.Core.Servers.Http; @@ -29,8 +30,11 @@ public class HttpServer( return; } - context.Request.Cookies.TryGetValue("PHPSESSID", out var sessionId); - if (sessionId != null) + // Use default empty mongoId if not found in cookie + var sessionId = context.Request.Cookies.TryGetValue("PHPSESSID", out var sessionIdString) + ? new MongoId(sessionIdString) + : MongoId.Empty(); + if (!string.IsNullOrEmpty(sessionIdString)) { _profileActivityService.SetActivityTimestamp(sessionId); } diff --git a/Libraries/SPTarkov.Server.Core/Status/StatusPage.cs b/Libraries/SPTarkov.Server.Core/Status/StatusPage.cs index 659aa9ed..6130b520 100644 --- a/Libraries/SPTarkov.Server.Core/Status/StatusPage.cs +++ b/Libraries/SPTarkov.Server.Core/Status/StatusPage.cs @@ -1,6 +1,7 @@ using System.Text; using Microsoft.AspNetCore.Http; using SPTarkov.DI.Annotations; +using SPTarkov.Server.Core.Models.Common; using SPTarkov.Server.Core.Models.Spt.Config; using SPTarkov.Server.Core.Servers; using SPTarkov.Server.Core.Servers.Http; @@ -18,12 +19,12 @@ namespace SPTarkov.Server.Core.Status { protected readonly CoreConfig _coreConfig = configServer.GetConfig(); - public bool CanHandle(string sessionId, HttpRequest req) + public bool CanHandle(MongoId sessionId, HttpRequest req) { return req.Method == "GET" && req.Path.Value.Contains("/status"); } - public async Task Handle(string sessionId, HttpRequest req, HttpResponse resp) + public async Task Handle(MongoId sessionId, HttpRequest req, HttpResponse resp) { var sptVersion = $"SPT version: {ProgramStatics.SPT_VERSION()}"; var debugEnabled = $"Debug enabled: {ProgramStatics.DEBUG()}";