Improved transition from string to mongoId inside httpListener

This commit is contained in:
Chomp
2025-07-18 17:12:11 +01:00
parent d1fc299ab0
commit e20c56e4f1
4 changed files with 25 additions and 17 deletions
@@ -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);
}
@@ -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<ISerializer> _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(
/// <param name="body"> Buffer </param>
/// <param name="output"> Server generated response data</param>
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<string> GetResponse(string sessionID, HttpRequest req, string? body)
public async ValueTask<string> 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())
{
@@ -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);
}
@@ -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<CoreConfig>();
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()}";