summary refs log tree commit diff
path: root/ReferenceClientProxyImplementation/Patches/Implementations/HTMLPatches
diff options
context:
space:
mode:
Diffstat (limited to 'ReferenceClientProxyImplementation/Patches/Implementations/HTMLPatches')
-rw-r--r--ReferenceClientProxyImplementation/Patches/Implementations/HTMLPatches/GlobalEnvPatch.cs22
-rw-r--r--ReferenceClientProxyImplementation/Patches/Implementations/HTMLPatches/StripNoncesPatch.cs36
2 files changed, 58 insertions, 0 deletions
diff --git a/ReferenceClientProxyImplementation/Patches/Implementations/HTMLPatches/GlobalEnvPatch.cs b/ReferenceClientProxyImplementation/Patches/Implementations/HTMLPatches/GlobalEnvPatch.cs
new file mode 100644

index 0000000..dc54850 --- /dev/null +++ b/ReferenceClientProxyImplementation/Patches/Implementations/HTMLPatches/GlobalEnvPatch.cs
@@ -0,0 +1,22 @@ +using System.Text; +using System.Text.RegularExpressions; +using ReferenceClientProxyImplementation.Configuration; + +namespace ReferenceClientProxyImplementation.Patches.Implementations.HTMLPatches; + +public class GlobalEnvPatch(ProxyConfiguration config) : IPatch { + public int GetOrder() => 1; + + public string GetName() => "Patch GLOBAL_ENV"; + public bool Applies(string relativeName, byte[] content) => relativeName is "app.html" or "developers.html" or "popout.html"; + + public async Task<byte[]> Execute(string _, byte[] content) { + var stringContent = Encoding.UTF8.GetString(content); + + foreach(var (key, value) in config.TestClient.GlobalEnv) { + stringContent = new Regex($"{key}: \".*?\"").Replace(stringContent, $"{key}: \"{value}\""); + } + + return Encoding.UTF8.GetBytes(stringContent); + } +} \ No newline at end of file diff --git a/ReferenceClientProxyImplementation/Patches/Implementations/HTMLPatches/StripNoncesPatch.cs b/ReferenceClientProxyImplementation/Patches/Implementations/HTMLPatches/StripNoncesPatch.cs new file mode 100644
index 0000000..6c5f312 --- /dev/null +++ b/ReferenceClientProxyImplementation/Patches/Implementations/HTMLPatches/StripNoncesPatch.cs
@@ -0,0 +1,36 @@ +using System.Text; +using System.Text.RegularExpressions; +using ReferenceClientProxyImplementation.Configuration; + +namespace ReferenceClientProxyImplementation.Patches.Implementations.HTMLPatches; + +public partial class StripNoncesPatch(ProxyConfiguration config) : IPatch { + public int GetOrder() => 0; + + public string GetName() => "Strip nonces/integrity from html"; + public bool Applies(string relativeName, byte[] content) => relativeName is "app.html" or "developers.html" or "popout.html"; + + public async Task<byte[]> Execute(string _, byte[] content) { + var stringContent = Encoding.UTF8.GetString(content); + stringContent = HtmlScriptIntegrityRegex().Replace( + HtmlScriptNonceRegex().Replace( + JsElementNonceRegex().Replace( + stringContent, + "" + ), + "" + ), + "" + ); + return Encoding.UTF8.GetBytes(stringContent); + } + + [GeneratedRegex("\\snonce=\"[a-zA-Z0-9+/=]+\"")] + private static partial Regex HtmlScriptNonceRegex(); + + [GeneratedRegex("\\w.nonce='[a-zA-Z0-9+/=]+';")] + private static partial Regex JsElementNonceRegex(); + + [GeneratedRegex(@"\sintegrity=""[a-zA-Z0-9+/=\-\s]+""")] + private static partial Regex HtmlScriptIntegrityRegex(); +} \ No newline at end of file