mirror of
https://github.com/ShareX/ShareX.git
synced 2024-09-30 01:07:21 +13:00
#2299: Support $filename$ in request url and result urls
This commit is contained in:
parent
25bf2c4297
commit
3fb40ef1ac
9 changed files with 72 additions and 60 deletions
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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" />
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue