From c42547370b38b549241eb6f19b8779d0d08dd0c0 Mon Sep 17 00:00:00 2001 From: Jaex Date: Wed, 2 Feb 2022 04:34:56 +0300 Subject: [PATCH] Handle syntax usage for body data --- .../Extensions/StringExtensions.cs | 7 +++-- .../CustomUploader/CustomUploaderItem.cs | 30 +++++++++++++++---- .../CustomUploaderSyntaxParser.cs | 18 +---------- 3 files changed, 30 insertions(+), 25 deletions(-) diff --git a/ShareX.HelpersLib/Extensions/StringExtensions.cs b/ShareX.HelpersLib/Extensions/StringExtensions.cs index a3d5709a7..ec7f8c2be 100644 --- a/ShareX.HelpersLib/Extensions/StringExtensions.cs +++ b/ShareX.HelpersLib/Extensions/StringExtensions.cs @@ -168,7 +168,7 @@ public static string ReplaceAll(this string text, string search, Func re return text; } - public static string BatchReplace(this string text, Dictionary replace) + public static string BatchReplace(this string text, Dictionary replace, StringComparison comparisonType = StringComparison.CurrentCulture) { StringBuilder sb = new StringBuilder(); @@ -180,15 +180,16 @@ public static string BatchReplace(this string text, Dictionary r foreach (KeyValuePair entry in replace) { - if (current.StartsWith(entry.Key)) + if (current.StartsWith(entry.Key, comparisonType)) { if (!string.IsNullOrEmpty(entry.Value)) { sb.Append(entry.Value); } + i += entry.Key.Length - 1; replaced = true; - continue; + break; } } diff --git a/ShareX.UploadersLib/CustomUploader/CustomUploaderItem.cs b/ShareX.UploadersLib/CustomUploader/CustomUploaderItem.cs index 270cd6f3f..4de2ac802 100644 --- a/ShareX.UploadersLib/CustomUploader/CustomUploaderItem.cs +++ b/ShareX.UploadersLib/CustomUploader/CustomUploaderItem.cs @@ -193,12 +193,32 @@ public string GetContentType() public string GetData(CustomUploaderInput input) { - CustomUploaderSyntaxParser parser = new CustomUploaderSyntaxParser(input); - parser.UseNameParser = true; - parser.JSONEncode = Body == CustomUploaderBody.JSON; - parser.XMLEncode = Body == CustomUploaderBody.XML; + NameParser nameParser = new NameParser(NameParserType.Text); + string result = nameParser.Parse(Data); - return parser.Parse(Data); + Dictionary replace = new Dictionary(); + replace.Add("{input}", EncodeBodyData(input.Input)); + replace.Add("{filename}", EncodeBodyData(input.FileName)); + result = result.BatchReplace(replace, StringComparison.OrdinalIgnoreCase); + + return result; + } + + private string EncodeBodyData(string input) + { + if (!string.IsNullOrEmpty(input)) + { + if (Body == CustomUploaderBody.JSON) + { + return URLHelpers.JSONEncode(input); + } + else if (Body == CustomUploaderBody.XML) + { + return URLHelpers.XMLEncode(input); + } + } + + return input; } public string GetFileFormName() diff --git a/ShareX.UploadersLib/CustomUploader/CustomUploaderSyntaxParser.cs b/ShareX.UploadersLib/CustomUploader/CustomUploaderSyntaxParser.cs index cb2494933..eb5828ab1 100644 --- a/ShareX.UploadersLib/CustomUploader/CustomUploaderSyntaxParser.cs +++ b/ShareX.UploadersLib/CustomUploader/CustomUploaderSyntaxParser.cs @@ -37,8 +37,6 @@ public class CustomUploaderSyntaxParser : ShareXSyntaxParser public string Input { get; set; } public ResponseInfo ResponseInfo { get; set; } public bool URLEncode { get; set; } // Only URL encodes file name and input - public bool JSONEncode { get; set; } - public bool XMLEncode { get; set; } public bool UseNameParser { get; set; } public NameParserType NameParserType { get; set; } = NameParserType.Text; @@ -71,21 +69,7 @@ protected override string CallFunction(string functionName, string[] parameters) { if (function.Name.Equals(functionName, StringComparison.OrdinalIgnoreCase)) { - string result = function.Call(this, parameters); - - if (!string.IsNullOrEmpty(result)) - { - if (JSONEncode) - { - result = URLHelpers.JSONEncode(result); - } - else if (XMLEncode) - { - result = URLHelpers.XMLEncode(result); - } - } - - return result; + return function.Call(this, parameters); } }