#2299: Support $filename$ in request url and result urls

This commit is contained in:
Jaex 2018-11-24 23:23:18 +03:00
parent 25bf2c4297
commit 3fb40ef1ac
9 changed files with 72 additions and 60 deletions

View file

@ -27,29 +27,15 @@ You should have received a copy of the GNU General Public License
namespace ShareX.UploadersLib
{
public class CustomUploaderArgumentInput
public class CustomUploaderInput
{
public string Filename { get; set; }
public string Input { get; set; }
public CustomUploaderArgumentInput(string filename, string input)
public CustomUploaderInput(string filename, string input)
{
Filename = filename;
Input = input;
}
public string Parse(string arg, bool jsonEncode = false)
{
NameParser nameParser = new NameParser(NameParserType.Text);
EscapeHelper escapeHelper = new EscapeHelper();
escapeHelper.KeepEscapeCharacter = true;
arg = escapeHelper.Parse(arg, nameParser.Parse);
CustomUploaderParser customUploaderParser = new CustomUploaderParser(Filename, Input);
customUploaderParser.JSONEncode = jsonEncode;
arg = customUploaderParser.Parse(arg);
return arg;
}
}
}

View file

@ -115,14 +115,14 @@ public string GetFileName()
return ToString() + ".sxcu";
}
public string GetRequestURL()
public string GetRequestURL(CustomUploaderInput input)
{
if (string.IsNullOrEmpty(RequestURL))
{
throw new Exception(Resources.CustomUploaderItem_GetRequestURL_RequestURLMustBeConfigured);
}
CustomUploaderParser parser = new CustomUploaderParser();
CustomUploaderParser parser = new CustomUploaderParser(input);
parser.URLEncode = true;
string url = parser.Parse(RequestURL);
return URLHelpers.FixPrefix(url);
@ -154,9 +154,13 @@ public CustomUploaderRequestFormat GetRequestFormat(CustomUploaderDestinationTyp
return RequestFormat;
}
public string GetData(CustomUploaderArgumentInput input)
public string GetData(CustomUploaderInput input)
{
return input.Parse(Data, RequestFormat == CustomUploaderRequestFormat.JSON);
CustomUploaderParser parser = new CustomUploaderParser(input);
parser.UseNameParser = true;
parser.JSONEncode = RequestFormat == CustomUploaderRequestFormat.JSON;
return parser.Parse(Data);
}
public string GetFileFormName()
@ -169,30 +173,35 @@ public string GetFileFormName()
return FileFormName;
}
public Dictionary<string, string> GetArguments(CustomUploaderArgumentInput input)
public Dictionary<string, string> GetArguments(CustomUploaderInput input)
{
Dictionary<string, string> arguments = new Dictionary<string, string>();
if (Arguments != null)
{
CustomUploaderParser parser = new CustomUploaderParser(input);
parser.UseNameParser = true;
foreach (KeyValuePair<string, string> arg in Arguments)
{
arguments.Add(arg.Key, input.Parse(arg.Value));
arguments.Add(arg.Key, parser.Parse(arg.Value));
}
}
return arguments;
}
public NameValueCollection GetHeaders(CustomUploaderArgumentInput input)
public NameValueCollection GetHeaders(CustomUploaderInput input)
{
if (Headers != null && Headers.Count > 0)
{
NameValueCollection collection = new NameValueCollection();
CustomUploaderParser parser = new CustomUploaderParser(input);
parser.UseNameParser = true;
foreach (KeyValuePair<string, string> header in Headers)
{
collection.Add(header.Key, input.Parse(header.Value));
collection.Add(header.Key, parser.Parse(header.Value));
}
return collection;
@ -201,11 +210,15 @@ public NameValueCollection GetHeaders(CustomUploaderArgumentInput input)
return null;
}
public void ParseResponse(UploadResult result, bool isShortenedURL = false)
public void ParseResponse(UploadResult result, CustomUploaderInput input, bool isShortenedURL = false)
{
if (result != null && !string.IsNullOrEmpty(result.Response))
{
CustomUploaderParser parser = new CustomUploaderParser(result.Response, RegexList);
CustomUploaderParser parser = new CustomUploaderParser(result.Response, RegexList)
{
Filename = input.Filename,
URLEncode = true
};
string url;

View file

@ -44,12 +44,13 @@ public class CustomUploaderParser
public const char SyntaxEscapeChar = '\\';
public bool IsOutput { get; set; }
public string Filename { get; private set; }
public string Input { get; private set; }
public string Response { get; private set; }
public List<Match> RegexMatches { get; private set; }
public bool URLEncode { get; set; }
public string Filename { get; set; }
public string Input { get; set; }
public string Response { get; set; }
public List<Match> RegexMatches { get; set; }
public bool URLEncode { get; set; } // Only URL encodes filename and input
public bool JSONEncode { get; set; }
public bool UseNameParser { get; set; }
public bool SkipSyntaxParse { get; set; }
public List<CustomUploaderSyntaxInfo> SyntaxInfoList { get; private set; }
@ -85,18 +86,30 @@ public CustomUploaderParser(string response, List<string> regexList)
IsOutput = true;
}
public CustomUploaderParser(CustomUploaderInput input) : this(input.Filename, input.Input)
{
}
public string Parse(string text)
{
return Parse(text, IsOutput);
}
public string Parse(string text, bool isOutput)
private string Parse(string text, bool isOutput)
{
if (string.IsNullOrEmpty(text))
{
return "";
}
if (UseNameParser)
{
NameParser nameParser = new NameParser(NameParserType.Text);
EscapeHelper escapeHelper = new EscapeHelper();
escapeHelper.KeepEscapeCharacter = true;
text = escapeHelper.Parse(text, nameParser.Parse);
}
StringBuilder sbResult = new StringBuilder();
StringBuilder sbSyntax = new StringBuilder();
bool escapeNext = false;

View file

@ -81,18 +81,18 @@ public CustomFileUploader(CustomUploaderItem customUploaderItem)
public override UploadResult Upload(Stream stream, string fileName)
{
UploadResult result = new UploadResult();
CustomUploaderArgumentInput input = new CustomUploaderArgumentInput(fileName, "");
CustomUploaderInput input = new CustomUploaderInput(fileName, "");
CustomUploaderRequestFormat requestFormat = uploader.GetRequestFormat(CustomUploaderDestinationType.FileUploader);
if (requestFormat == CustomUploaderRequestFormat.MultipartFormData)
{
result = SendRequestFile(uploader.GetRequestURL(), stream, fileName, uploader.GetFileFormName(),
result = SendRequestFile(uploader.GetRequestURL(input), stream, fileName, uploader.GetFileFormName(),
uploader.GetArguments(input), uploader.GetHeaders(input), null, uploader.ResponseType, uploader.RequestType);
}
else if (requestFormat == CustomUploaderRequestFormat.Binary)
{
result.Response = SendRequest(uploader.RequestType, uploader.GetRequestURL(), stream, UploadHelpers.GetMimeType(fileName),
result.Response = SendRequest(uploader.RequestType, uploader.GetRequestURL(input), stream, UploadHelpers.GetMimeType(fileName),
uploader.GetArguments(input), uploader.GetHeaders(input), null, uploader.ResponseType);
}
else
@ -102,7 +102,7 @@ public override UploadResult Upload(Stream stream, string fileName)
try
{
uploader.ParseResponse(result);
uploader.ParseResponse(result, input);
}
catch (Exception e)
{

View file

@ -78,18 +78,18 @@ public CustomImageUploader(CustomUploaderItem customUploaderItem)
public override UploadResult Upload(Stream stream, string fileName)
{
UploadResult result = new UploadResult();
CustomUploaderArgumentInput input = new CustomUploaderArgumentInput(fileName, "");
CustomUploaderInput input = new CustomUploaderInput(fileName, "");
CustomUploaderRequestFormat requestFormat = uploader.GetRequestFormat(CustomUploaderDestinationType.ImageUploader);
if (requestFormat == CustomUploaderRequestFormat.MultipartFormData)
{
result = SendRequestFile(uploader.GetRequestURL(), stream, fileName, uploader.GetFileFormName(),
result = SendRequestFile(uploader.GetRequestURL(input), stream, fileName, uploader.GetFileFormName(),
uploader.GetArguments(input), uploader.GetHeaders(input), null, uploader.ResponseType, uploader.RequestType);
}
else if (requestFormat == CustomUploaderRequestFormat.Binary)
{
result.Response = SendRequest(uploader.RequestType, uploader.GetRequestURL(), stream, UploadHelpers.GetMimeType(fileName),
result.Response = SendRequest(uploader.RequestType, uploader.GetRequestURL(input), stream, UploadHelpers.GetMimeType(fileName),
uploader.GetArguments(input), uploader.GetHeaders(input), null, uploader.ResponseType);
}
else
@ -99,7 +99,7 @@ public override UploadResult Upload(Stream stream, string fileName)
try
{
uploader.ParseResponse(result);
uploader.ParseResponse(result, input);
}
catch (Exception e)
{

View file

@ -234,7 +234,7 @@
</Compile>
<Compile Include="FileUploaders\Pushbullet.cs" />
<Compile Include="FileUploaders\GfycatUploader.cs" />
<Compile Include="CustomUploader\CustomUploaderArgumentInput.cs" />
<Compile Include="CustomUploader\CustomUploaderInput.cs" />
<Compile Include="CustomUploader\CustomUploaderParser.cs" />
<Compile Include="CustomUploader\CustomUploaderSyntaxInfo.cs" />
<Compile Include="Helpers\EscapeHelper.cs" />

View file

@ -76,28 +76,28 @@ public CustomURLSharer(CustomUploaderItem customUploaderItem)
public override UploadResult ShareURL(string url)
{
UploadResult result = new UploadResult { URL = url, IsURLExpected = false };
CustomUploaderArgumentInput input = new CustomUploaderArgumentInput("", url);
CustomUploaderInput input = new CustomUploaderInput("", url);
CustomUploaderRequestFormat requestFormat = uploader.GetRequestFormat(CustomUploaderDestinationType.URLSharingService);
if (requestFormat == CustomUploaderRequestFormat.MultipartFormData)
{
result.Response = SendRequestMultiPart(uploader.GetRequestURL(), uploader.GetArguments(input), uploader.GetHeaders(input), null,
result.Response = SendRequestMultiPart(uploader.GetRequestURL(input), uploader.GetArguments(input), uploader.GetHeaders(input), null,
uploader.ResponseType, uploader.RequestType);
}
else if (requestFormat == CustomUploaderRequestFormat.URLQueryString)
{
result.Response = SendRequest(uploader.RequestType, uploader.GetRequestURL(), uploader.GetArguments(input),
result.Response = SendRequest(uploader.RequestType, uploader.GetRequestURL(input), uploader.GetArguments(input),
uploader.GetHeaders(input), null, uploader.ResponseType);
}
else if (requestFormat == CustomUploaderRequestFormat.JSON)
{
result.Response = SendRequest(uploader.RequestType, uploader.GetRequestURL(), uploader.GetData(input), UploadHelpers.ContentTypeJSON,
result.Response = SendRequest(uploader.RequestType, uploader.GetRequestURL(input), uploader.GetData(input), UploadHelpers.ContentTypeJSON,
uploader.GetArguments(input), uploader.GetHeaders(input), null, uploader.ResponseType);
}
else if (requestFormat == CustomUploaderRequestFormat.FormURLEncoded)
{
result.Response = SendRequestURLEncoded(uploader.RequestType, uploader.GetRequestURL(), uploader.GetArguments(input),
result.Response = SendRequestURLEncoded(uploader.RequestType, uploader.GetRequestURL(input), uploader.GetArguments(input),
uploader.GetHeaders(input), null, uploader.ResponseType);
}
else

View file

@ -81,7 +81,7 @@ public CustomTextUploader(CustomUploaderItem customUploaderItem)
public override UploadResult UploadText(string text, string fileName)
{
UploadResult result = new UploadResult();
CustomUploaderArgumentInput input = new CustomUploaderArgumentInput(fileName, text);
CustomUploaderInput input = new CustomUploaderInput(fileName, text);
CustomUploaderRequestFormat requestFormat = uploader.GetRequestFormat(CustomUploaderDestinationType.TextUploader);
@ -89,7 +89,7 @@ public override UploadResult UploadText(string text, string fileName)
{
if (string.IsNullOrEmpty(uploader.FileFormName))
{
result.Response = SendRequestMultiPart(uploader.GetRequestURL(), uploader.GetArguments(input),
result.Response = SendRequestMultiPart(uploader.GetRequestURL(input), uploader.GetArguments(input),
uploader.GetHeaders(input), null, uploader.ResponseType, uploader.RequestType);
}
else
@ -97,19 +97,19 @@ public override UploadResult UploadText(string text, string fileName)
byte[] bytes = Encoding.UTF8.GetBytes(text);
using (MemoryStream stream = new MemoryStream(bytes))
{
result = SendRequestFile(uploader.GetRequestURL(), stream, fileName, uploader.GetFileFormName(),
result = SendRequestFile(uploader.GetRequestURL(input), stream, fileName, uploader.GetFileFormName(),
uploader.GetArguments(input), uploader.GetHeaders(input), null, uploader.ResponseType, uploader.RequestType);
}
}
}
else if (requestFormat == CustomUploaderRequestFormat.URLQueryString)
{
result.Response = SendRequest(uploader.RequestType, uploader.GetRequestURL(), uploader.GetArguments(input),
result.Response = SendRequest(uploader.RequestType, uploader.GetRequestURL(input), uploader.GetArguments(input),
uploader.GetHeaders(input), null, uploader.ResponseType);
}
else if (requestFormat == CustomUploaderRequestFormat.JSON)
{
result.Response = SendRequest(uploader.RequestType, uploader.GetRequestURL(), uploader.GetData(input), UploadHelpers.ContentTypeJSON,
result.Response = SendRequest(uploader.RequestType, uploader.GetRequestURL(input), uploader.GetData(input), UploadHelpers.ContentTypeJSON,
uploader.GetArguments(input), uploader.GetHeaders(input), null, uploader.ResponseType);
}
else if (requestFormat == CustomUploaderRequestFormat.Binary)
@ -117,13 +117,13 @@ public override UploadResult UploadText(string text, string fileName)
byte[] bytes = Encoding.UTF8.GetBytes(text);
using (MemoryStream stream = new MemoryStream(bytes))
{
result.Response = SendRequest(uploader.RequestType, uploader.GetRequestURL(), stream, UploadHelpers.GetMimeType(fileName),
result.Response = SendRequest(uploader.RequestType, uploader.GetRequestURL(input), stream, UploadHelpers.GetMimeType(fileName),
uploader.GetArguments(input), uploader.GetHeaders(input), null, uploader.ResponseType);
}
}
else if (requestFormat == CustomUploaderRequestFormat.FormURLEncoded)
{
result.Response = SendRequestURLEncoded(uploader.RequestType, uploader.GetRequestURL(), uploader.GetArguments(input),
result.Response = SendRequestURLEncoded(uploader.RequestType, uploader.GetRequestURL(input), uploader.GetArguments(input),
uploader.GetHeaders(input), null, uploader.ResponseType);
}
else
@ -133,7 +133,7 @@ public override UploadResult UploadText(string text, string fileName)
try
{
uploader.ParseResponse(result);
uploader.ParseResponse(result, input);
}
catch (Exception e)
{

View file

@ -76,28 +76,28 @@ public CustomURLShortener(CustomUploaderItem customUploaderItem)
public override UploadResult ShortenURL(string url)
{
UploadResult result = new UploadResult { URL = url };
CustomUploaderArgumentInput input = new CustomUploaderArgumentInput("", url);
CustomUploaderInput input = new CustomUploaderInput("", url);
CustomUploaderRequestFormat requestFormat = uploader.GetRequestFormat(CustomUploaderDestinationType.URLShortener);
if (requestFormat == CustomUploaderRequestFormat.MultipartFormData)
{
result.Response = SendRequestMultiPart(uploader.GetRequestURL(), uploader.GetArguments(input), uploader.GetHeaders(input), null,
result.Response = SendRequestMultiPart(uploader.GetRequestURL(input), uploader.GetArguments(input), uploader.GetHeaders(input), null,
uploader.ResponseType, uploader.RequestType);
}
else if (requestFormat == CustomUploaderRequestFormat.URLQueryString)
{
result.Response = SendRequest(uploader.RequestType, uploader.GetRequestURL(), uploader.GetArguments(input),
result.Response = SendRequest(uploader.RequestType, uploader.GetRequestURL(input), uploader.GetArguments(input),
uploader.GetHeaders(input), null, uploader.ResponseType);
}
else if (requestFormat == CustomUploaderRequestFormat.JSON)
{
result.Response = SendRequest(uploader.RequestType, uploader.GetRequestURL(), uploader.GetData(input), UploadHelpers.ContentTypeJSON,
result.Response = SendRequest(uploader.RequestType, uploader.GetRequestURL(input), uploader.GetData(input), UploadHelpers.ContentTypeJSON,
uploader.GetArguments(input), uploader.GetHeaders(input), null, uploader.ResponseType);
}
else if (requestFormat == CustomUploaderRequestFormat.FormURLEncoded)
{
result.Response = SendRequestURLEncoded(uploader.RequestType, uploader.GetRequestURL(), uploader.GetArguments(input),
result.Response = SendRequestURLEncoded(uploader.RequestType, uploader.GetRequestURL(input), uploader.GetArguments(input),
uploader.GetHeaders(input), null, uploader.ResponseType);
}
else
@ -107,7 +107,7 @@ public override UploadResult ShortenURL(string url)
try
{
uploader.ParseResponse(result, true);
uploader.ParseResponse(result, input, true);
}
catch (Exception e)
{