- Self-hosted PhotonSocketServer support - Split photon and hile event patch - Deprecated amplitude redirect patch
91 lines
3.5 KiB
C#
91 lines
3.5 KiB
C#
using System;
|
|
using System.Reflection;
|
|
using HarmonyLib;
|
|
|
|
namespace undead_universal_patch_il2cpp.Patches
|
|
{
|
|
[HarmonyPatch]
|
|
public class BestHTTP_Unob
|
|
{
|
|
static string TargetTypeName = "BestHTTP.HTTPManager";
|
|
static string TargetMethodName = "SendRequest";
|
|
static string Description = "Unobfuscated BestHTTP request URL rewrite patch";
|
|
static readonly Type targetType = AccessTools.TypeByName(TargetTypeName);
|
|
static readonly Type requestType = AccessTools.TypeByName("BestHTTP.HTTPRequest");
|
|
static readonly MethodInfo targetMethod = AccessTools.Method(targetType, TargetMethodName, [requestType]);
|
|
|
|
static bool Prepare()
|
|
{
|
|
if (targetType == null)
|
|
{
|
|
Plugin.Log.LogWarning($"'{Description}' disabled. The type for this patch was not found.");
|
|
return false;
|
|
}
|
|
if (targetMethod == null)
|
|
{
|
|
Plugin.Log.LogWarning($"'{Description}' disabled. The method for this patch was not found.");
|
|
return false;
|
|
}
|
|
|
|
Plugin.Log.LogInfo($"'{Description}' succeeded validation.");
|
|
return true;
|
|
}
|
|
|
|
static MethodBase TargetMethod() => targetMethod;
|
|
|
|
[HarmonyPrefix]
|
|
static void Prefix(ref object request)
|
|
{
|
|
PropertyInfo uriProperty = AccessTools.Property(requestType, "Uri");
|
|
if (uriProperty == null)
|
|
{
|
|
Plugin.Log.LogFatal("BestHTTP_Unob failed: uriProperty was null.");
|
|
return;
|
|
}
|
|
|
|
var uriInstance = (Il2CppSystem.Uri)uriProperty.GetValue(request, null);
|
|
if (uriInstance == null)
|
|
{
|
|
Plugin.Log.LogFatal("BestHTTP_Unob failed: uriInstance was null.");
|
|
return;
|
|
}
|
|
|
|
if (GenericConfig.LogAllRequests.Value) Plugin.Log.LogInfo($"BestHTTP_Unob request b-URL: {uriInstance.ToString()}");
|
|
if (!NameserverConfig.Rewrite.Value) return;
|
|
|
|
Il2CppSystem.Uri newUri = new(uriInstance.ToString());
|
|
|
|
// Request changes below
|
|
|
|
if (newUri.ToString().Contains("ns.rec.net")) newUri = new Il2CppSystem.Uri(NameserverConfig.NewUrl.Value);
|
|
|
|
if (GalvanicConfig.Enabled.Value)
|
|
{
|
|
string[] applyHeader = [
|
|
"/cachedlogin/forplatformid",
|
|
"/account/create",
|
|
"/connect/token"
|
|
];
|
|
foreach (string header in applyHeader)
|
|
{
|
|
if (newUri.PathAndQuery.Contains(header))
|
|
{
|
|
// refresh the token if it expired
|
|
// this is somewhat inefficient, but we don't hook into many requests (see above) so it should be fine
|
|
Galvanic.GalvanicWebAuth.TokenExpiry();
|
|
|
|
Type httpRequestType = request.GetType();
|
|
MethodInfo addHeaderMethod = httpRequestType.GetMethod("AddHeader");
|
|
addHeaderMethod.Invoke(request, ["GalvanicAuth", Galvanic.GalvanicWebAuth.Token]);
|
|
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (GenericConfig.LogAllRequests.Value) Plugin.Log.LogInfo($"BestHTTP_Unob request a-URL: {newUri.ToString()}");
|
|
uriProperty.SetValue(request, NameserverConfig.Rewrite.Value ? newUri : uriInstance, null);
|
|
}
|
|
}
|
|
}
|