Handle syntax usage for body data

This commit is contained in:
Jaex 2022-02-02 04:34:56 +03:00
parent 9ccd7be623
commit c42547370b
3 changed files with 30 additions and 25 deletions

View file

@ -168,7 +168,7 @@ public static string ReplaceAll(this string text, string search, Func<string> re
return text;
}
public static string BatchReplace(this string text, Dictionary<string, string> replace)
public static string BatchReplace(this string text, Dictionary<string, string> replace, StringComparison comparisonType = StringComparison.CurrentCulture)
{
StringBuilder sb = new StringBuilder();
@ -180,15 +180,16 @@ public static string BatchReplace(this string text, Dictionary<string, string> r
foreach (KeyValuePair<string, string> 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;
}
}

View file

@ -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<string, string> replace = new Dictionary<string, string>();
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()

View file

@ -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);
}
}