summary refs log tree commit diff
path: root/ReferenceClientProxyImplementation/Patches/Implementations/JSPatches/IsStaffPatch.cs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--ReferenceClientProxyImplementation/Patches/Implementations/JSPatches/IsStaffPatch.cs33
1 files changed, 33 insertions, 0 deletions
diff --git a/ReferenceClientProxyImplementation/Patches/Implementations/JSPatches/IsStaffPatch.cs b/ReferenceClientProxyImplementation/Patches/Implementations/JSPatches/IsStaffPatch.cs
new file mode 100644

index 0000000..b741f56 --- /dev/null +++ b/ReferenceClientProxyImplementation/Patches/Implementations/JSPatches/IsStaffPatch.cs
@@ -0,0 +1,33 @@ +using System.Text; +using System.Text.RegularExpressions; + +namespace ReferenceClientProxyImplementation.Patches.Implementations.JSPatches; + +public partial class IsStaffPatch : IPatch { + public int GetOrder() => 2; + + public string GetName() => "Patch isStaff/isStaffPersonal in JS"; + public bool Applies(string relativeName, byte[] content) => relativeName.EndsWith(".js"); + + public async Task<byte[]> Execute(string relativePath, byte[] content) { + var stringContent = Encoding.UTF8.GetString(content); + + stringContent = IsNullableStaffRegex().Replace( + stringContent, + m => $"{m.Groups[1].Value}!!{m.Groups[2].Value}" + ); + + stringContent = IsStaffRegex().Replace( + stringContent, + m => $"{m.Groups[1].Value}true" + ); + + return Encoding.UTF8.GetBytes(stringContent); + } + + [GeneratedRegex(@"(\W)(\w|this|\w\.user)\.isStaff(Personal)?\(\)", RegexOptions.Compiled)] + private static partial Regex IsStaffRegex(); + + [GeneratedRegex(@"(\W)(\w|this|\w\.user)\?\.isStaff(Personal)?\(\)", RegexOptions.Compiled)] + private static partial Regex IsNullableStaffRegex(); +} \ No newline at end of file