Improved transition from string to mongoId inside httpListener
This commit is contained in:
@@ -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()}";
|
||||
|
||||
Reference in New Issue
Block a user