Testing more garbage encryption
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
using SVSim.EmulatedEntrypoint.Constants;
|
||||
using SVSim.EmulatedEntrypoint.Security;
|
||||
using SVSim.EmulatedEntrypoint.Services;
|
||||
|
||||
namespace SVSim.EmulatedEntrypoint.Middlewares;
|
||||
|
||||
/// <summary>
|
||||
/// Maps an incoming request's session id to a udid if both are present.
|
||||
/// </summary>
|
||||
public class SessionidMappingMiddleware : IMiddleware
|
||||
{
|
||||
private readonly ShadowverseSessionService _shadowverseSessionService;
|
||||
|
||||
public SessionidMappingMiddleware(ShadowverseSessionService shadowverseSessionService)
|
||||
{
|
||||
_shadowverseSessionService = shadowverseSessionService;
|
||||
}
|
||||
|
||||
public async Task InvokeAsync(HttpContext context, RequestDelegate next)
|
||||
{
|
||||
bool hasSessionId = context.Request.Headers.TryGetValue(NetworkConstants.UdidHeaderName, out var udid);
|
||||
bool hasUdid = context.Request.Headers.TryGetValue(NetworkConstants.SessionIdHeaderName, out var sid);
|
||||
if (hasSessionId && hasUdid)
|
||||
{
|
||||
_shadowverseSessionService.StoreUdidForSessionId(sid.FirstOrDefault(), Guid.Parse(Encryption.Decode(udid.FirstOrDefault())));
|
||||
}
|
||||
|
||||
await next.Invoke(context);
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,9 @@ using Microsoft.AspNetCore.Mvc.Controllers;
|
||||
using Microsoft.AspNetCore.Mvc.Infrastructure;
|
||||
using Microsoft.Extensions.Primitives;
|
||||
using Newtonsoft.Json;
|
||||
using SVSim.EmulatedEntrypoint.Constants;
|
||||
using SVSim.EmulatedEntrypoint.Security;
|
||||
using SVSim.EmulatedEntrypoint.Services;
|
||||
|
||||
namespace SVSim.EmulatedEntrypoint.Middlewares;
|
||||
|
||||
@@ -14,10 +16,12 @@ namespace SVSim.EmulatedEntrypoint.Middlewares;
|
||||
public class ShadowverseTranslationMiddleware : IMiddleware
|
||||
{
|
||||
private readonly IActionDescriptorCollectionProvider _actionDescriptorCollectionProvider;
|
||||
private readonly ShadowverseSessionService _sessionService;
|
||||
|
||||
public ShadowverseTranslationMiddleware(IActionDescriptorCollectionProvider actionDescriptorCollectionProvider)
|
||||
public ShadowverseTranslationMiddleware(IActionDescriptorCollectionProvider actionDescriptorCollectionProvider, ShadowverseSessionService sessionService)
|
||||
{
|
||||
_actionDescriptorCollectionProvider = actionDescriptorCollectionProvider;
|
||||
_sessionService = sessionService;
|
||||
}
|
||||
|
||||
public async Task InvokeAsync(HttpContext context, RequestDelegate next)
|
||||
@@ -32,21 +36,33 @@ public class ShadowverseTranslationMiddleware : IMiddleware
|
||||
await next.Invoke(context);
|
||||
return;
|
||||
}
|
||||
using var requestBytesStream = new MemoryStream();
|
||||
|
||||
// Replace response body stream to re-access it.
|
||||
using var tempResponseBody = new MemoryStream();
|
||||
var originalResponsebody = context.Response.Body;
|
||||
context.Response.Body = tempResponseBody;
|
||||
|
||||
// Pull out the request bytes into a stream
|
||||
using var requestBytesStream = new MemoryStream();
|
||||
await context.Request.Body.CopyToAsync(requestBytesStream);
|
||||
byte[] requestBytes = requestBytesStream.ToArray();
|
||||
// Decrypt incoming data. Placeholder.
|
||||
requestBytes = Encryption.Decrypt(requestBytes, Encryption.Decode(context.Request.Headers["UDID"]));
|
||||
|
||||
// Get encryption values for this request
|
||||
string sid = context.Request.Headers[NetworkConstants.SessionIdHeaderName];
|
||||
string udid = _sessionService.GetUdidFromSessionId(sid).GetValueOrDefault().ToString();
|
||||
|
||||
// Decrypt incoming data.
|
||||
requestBytes = Encryption.Decrypt(requestBytes, udid);
|
||||
object? data = MessagePackSerializer.Deserialize(endpointDescriptor.Parameters.FirstOrDefault().ParameterType,
|
||||
requestBytes);
|
||||
var json = JsonConvert.SerializeObject(data);
|
||||
var newStream = new StringContent(json, Encoding.UTF8, "application/json");
|
||||
context.Request.Body = newStream.ReadAsStream();
|
||||
context.Request.Headers.ContentType = new StringValues("application/json");
|
||||
|
||||
await next.Invoke(context);
|
||||
|
||||
// Convert the response into a messagepack, encrypt it
|
||||
var responseType = ((ControllerActionDescriptor)endpointDescriptor).MethodInfo.ReturnType;
|
||||
if (responseType.IsGenericType && responseType.GetGenericTypeDefinition() == typeof(Task<>))
|
||||
{
|
||||
@@ -58,7 +74,7 @@ public class ShadowverseTranslationMiddleware : IMiddleware
|
||||
var responseBytes = responseBytesStream.ToArray();
|
||||
var responseData = JsonConvert.DeserializeObject(Encoding.UTF8.GetString(responseBytes), responseType);
|
||||
var packedData = MessagePackSerializer.Serialize(responseType, responseData);
|
||||
packedData = Encryption.Encrypt(packedData, Encryption.Decode(context.Request.Headers["UDID"]));
|
||||
packedData = Encryption.Encrypt(packedData, udid);
|
||||
await originalResponsebody.WriteAsync(Encoding.UTF8.GetBytes(Convert.ToBase64String(packedData)));
|
||||
context.Response.Body = originalResponsebody;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user