All file uploaders using FileUploaderService now

This commit is contained in:
Jaex 2016-03-22 19:24:41 +02:00
parent 72627c0ba6
commit b4b7d3160c
30 changed files with 557 additions and 271 deletions

View file

@ -39,6 +39,23 @@ You should have received a copy of the GNU General Public License
namespace ShareX.UploadersLib.FileUploaders
{
public class AmazonS3FileUploaderService : FileUploaderService
{
public override FileDestination EnumValue { get; } = FileDestination.AmazonS3;
public override bool CheckConfig(UploadersConfig uploadersConfig)
{
return uploadersConfig.AmazonS3Settings != null && !string.IsNullOrEmpty(uploadersConfig.AmazonS3Settings.AccessKeyID) &&
!string.IsNullOrEmpty(uploadersConfig.AmazonS3Settings.SecretAccessKey) && !string.IsNullOrEmpty(uploadersConfig.AmazonS3Settings.Bucket) &&
AmazonS3.GetCurrentRegion(uploadersConfig.AmazonS3Settings) != AmazonS3.UnknownEndpoint;
}
public override FileUploader CreateUploader(UploadersConfig uploadersConfig)
{
return new AmazonS3(uploadersConfig.AmazonS3Settings);
}
}
public sealed class AmazonS3 : FileUploader
{
public static readonly AmazonS3Region UnknownEndpoint = new AmazonS3Region("Unknown Endpoint");

View file

@ -31,6 +31,25 @@ You should have received a copy of the GNU General Public License
namespace ShareX.UploadersLib.FileUploaders
{
public class BoxFileUploaderService : FileUploaderService
{
public override FileDestination EnumValue { get; } = FileDestination.Box;
public override bool CheckConfig(UploadersConfig uploadersConfig)
{
return OAuth2Info.CheckOAuth(uploadersConfig.BoxOAuth2Info);
}
public override FileUploader CreateUploader(UploadersConfig uploadersConfig)
{
return new Box(uploadersConfig.BoxOAuth2Info)
{
FolderID = uploadersConfig.BoxSelectedFolder.id,
Share = uploadersConfig.BoxShare
};
}
}
public sealed class Box : FileUploader, IOAuth2
{
public static BoxFileEntry RootFolder = new BoxFileEntry

View file

@ -23,11 +23,35 @@ You should have received a copy of the GNU General Public License
#endregion License Information (GPL v3)
using ShareX.HelpersLib;
using System;
using System.IO;
namespace ShareX.UploadersLib.FileUploaders
{
public class CustomFileUploaderService : FileUploaderService
{
public override FileDestination EnumValue { get; } = FileDestination.CustomFileUploader;
public override bool CheckConfig(UploadersConfig uploadersConfig)
{
return uploadersConfig.CustomUploadersList != null && uploadersConfig.CustomUploadersList.IsValidIndex(uploadersConfig.CustomFileUploaderSelected);
}
public override FileUploader CreateUploader(UploadersConfig uploadersConfig)
{
// TODO: Check TaskSettings override index (WorkerTask.GetCustomUploader)
CustomUploaderItem customUploader = uploadersConfig.CustomUploadersList.ReturnIfValidIndex(uploadersConfig.CustomFileUploaderSelected);
if (customUploader != null)
{
return new CustomFileUploader(customUploader);
}
return null;
}
}
public sealed class CustomFileUploader : FileUploader
{
private CustomUploaderItem customUploader;

View file

@ -28,6 +28,18 @@ You should have received a copy of the GNU General Public License
namespace ShareX.UploadersLib.FileUploaders
{
public class DropfileFileUploaderService : FileUploaderService
{
public override FileDestination EnumValue { get; } = FileDestination.Dropfile;
public override bool CheckConfig(UploadersConfig uploadersConfig) => true;
public override FileUploader CreateUploader(UploadersConfig uploadersConfig)
{
return new Dropfile();
}
}
public sealed class Dropfile : FileUploader
{
public override UploadResult Upload(Stream stream, string fileName)

View file

@ -26,9 +26,50 @@ You should have received a copy of the GNU General Public License
using System.IO;
using System.Net;
using System.Net.Mail;
using System.Windows.Forms;
namespace ShareX.UploadersLib.FileUploaders
{
public class EmailFileUploaderService : FileUploaderService
{
public override FileDestination EnumValue { get; } = FileDestination.Email;
public override bool CheckConfig(UploadersConfig uploadersConfig)
{
return !string.IsNullOrEmpty(uploadersConfig.EmailSmtpServer) && uploadersConfig.EmailSmtpPort > 0 && !string.IsNullOrEmpty(uploadersConfig.EmailFrom) &&
!string.IsNullOrEmpty(uploadersConfig.EmailPassword);
}
public override FileUploader CreateUploader(UploadersConfig uploadersConfig)
{
// TODO: Test lack of StopRequested = true;
using (EmailForm emailForm = new EmailForm(uploadersConfig.EmailRememberLastTo ? uploadersConfig.EmailLastTo : string.Empty,
uploadersConfig.EmailDefaultSubject, uploadersConfig.EmailDefaultBody))
{
if (emailForm.ShowDialog() == DialogResult.OK)
{
if (uploadersConfig.EmailRememberLastTo)
{
uploadersConfig.EmailLastTo = emailForm.ToEmail;
}
return new Email
{
SmtpServer = uploadersConfig.EmailSmtpServer,
SmtpPort = uploadersConfig.EmailSmtpPort,
FromEmail = uploadersConfig.EmailFrom,
Password = uploadersConfig.EmailPassword,
ToEmail = emailForm.ToEmail,
Subject = emailForm.Subject,
Body = emailForm.Body
};
}
}
return null;
}
}
public class Email : FileUploader
{
public string SmtpServer { get; set; }

View file

@ -36,6 +36,38 @@ You should have received a copy of the GNU General Public License
namespace ShareX.UploadersLib.FileUploaders
{
public class FTPFileUploaderService : FileUploaderService
{
public override FileDestination EnumValue { get; } = FileDestination.FTP;
public override bool CheckConfig(UploadersConfig uploadersConfig)
{
return uploadersConfig.FTPAccountList != null && uploadersConfig.FTPAccountList.IsValidIndex(uploadersConfig.FTPSelectedFile);
}
public override FileUploader CreateUploader(UploadersConfig uploadersConfig)
{
// TODO: Check TaskSettings override index (WorkerTask.GetFTPAccount)
// TODO: Unable to reach Info.DataType
int index = uploadersConfig.GetFTPIndex(EDataType.File);
FTPAccount account = uploadersConfig.FTPAccountList.ReturnIfValidIndex(index);
if (account != null)
{
if (account.Protocol == FTPProtocol.FTP || account.Protocol == FTPProtocol.FTPS)
{
return new FTP(account);
}
else if (account.Protocol == FTPProtocol.SFTP)
{
return new SFTP(account);
}
}
return null;
}
}
public sealed class FTP : FileUploader, IDisposable
{
public FTPAccount Account { get; private set; }

View file

@ -29,6 +29,24 @@ You should have received a copy of the GNU General Public License
namespace ShareX.UploadersLib.FileUploaders
{
public class Ge_ttFileUploaderService : FileUploaderService
{
public override FileDestination EnumValue { get; } = FileDestination.Ge_tt;
public override bool CheckConfig(UploadersConfig uploadersConfig)
{
return uploadersConfig.Ge_ttLogin != null && !string.IsNullOrEmpty(uploadersConfig.Ge_ttLogin.AccessToken);
}
public override FileUploader CreateUploader(UploadersConfig uploadersConfig)
{
return new Ge_tt(APIKeys.Ge_ttKey)
{
AccessToken = uploadersConfig.Ge_ttLogin.AccessToken
};
}
}
public sealed class Ge_tt : FileUploader
{
public string APIKey { get; private set; }

View file

@ -34,6 +34,18 @@ You should have received a copy of the GNU General Public License
namespace ShareX.UploadersLib.FileUploaders
{
public class GfycatFileUploaderService : FileUploaderService
{
public override FileDestination EnumValue { get; } = FileDestination.Gfycat;
public override bool CheckConfig(UploadersConfig uploadersConfig) => true;
public override FileUploader CreateUploader(UploadersConfig uploadersConfig)
{
return new GfycatUploader();
}
}
public class GfycatUploader : FileUploader
{
public bool NoResize { get; set; }

View file

@ -31,6 +31,25 @@ You should have received a copy of the GNU General Public License
namespace ShareX.UploadersLib.FileUploaders
{
public class GoogleDriveFileUploaderService : FileUploaderService
{
public override FileDestination EnumValue { get; } = FileDestination.GoogleDrive;
public override bool CheckConfig(UploadersConfig uploadersConfig)
{
return OAuth2Info.CheckOAuth(uploadersConfig.GoogleDriveOAuth2Info);
}
public override FileUploader CreateUploader(UploadersConfig uploadersConfig)
{
return new GoogleDrive(uploadersConfig.GoogleDriveOAuth2Info)
{
IsPublic = uploadersConfig.GoogleDriveIsPublic,
FolderID = uploadersConfig.GoogleDriveUseFolder ? uploadersConfig.GoogleDriveFolderID : null
};
}
}
public sealed class GoogleDrive : FileUploader, IOAuth2
{
public OAuth2Info AuthInfo { get; set; }

View file

@ -29,6 +29,24 @@ You should have received a copy of the GNU General Public License
namespace ShareX.UploadersLib.FileUploaders
{
public class HostrFileUploaderService : FileUploaderService
{
public override FileDestination EnumValue { get; } = FileDestination.Localhostr;
public override bool CheckConfig(UploadersConfig uploadersConfig)
{
return !string.IsNullOrEmpty(uploadersConfig.LocalhostrEmail) && !string.IsNullOrEmpty(uploadersConfig.LocalhostrPassword);
}
public override FileUploader CreateUploader(UploadersConfig uploadersConfig)
{
return new Hostr(uploadersConfig.LocalhostrEmail, uploadersConfig.LocalhostrPassword)
{
DirectURL = uploadersConfig.LocalhostrDirectURL
};
}
}
public sealed class Hostr : FileUploader
{
public string Email { get; set; }

View file

@ -39,6 +39,21 @@ You should have received a copy of the GNU General Public License
namespace ShareX.UploadersLib.FileUploaders
{
public class JiraFileUploaderService : FileUploaderService
{
public override FileDestination EnumValue { get; } = FileDestination.Jira;
public override bool CheckConfig(UploadersConfig uploadersConfig)
{
return OAuthInfo.CheckOAuth(uploadersConfig.JiraOAuthInfo);
}
public override FileUploader CreateUploader(UploadersConfig uploadersConfig)
{
return new Jira(uploadersConfig.JiraHost, uploadersConfig.JiraOAuthInfo, uploadersConfig.JiraIssuePrefix);
}
}
public class Jira : FileUploader, IOAuth
{
private const string PathRequestToken = "/plugins/servlet/oauth/request-token";

View file

@ -31,6 +31,21 @@ You should have received a copy of the GNU General Public License
namespace ShareX.UploadersLib.FileUploaders
{
public class LambdaFileUploaderService : FileUploaderService
{
public override FileDestination EnumValue { get; } = FileDestination.Lambda;
public override bool CheckConfig(UploadersConfig uploadersConfig)
{
return uploadersConfig.LambdaSettings != null && !string.IsNullOrEmpty(uploadersConfig.LambdaSettings.UserAPIKey);
}
public override FileUploader CreateUploader(UploadersConfig uploadersConfig)
{
return new Lambda(uploadersConfig.LambdaSettings);
}
}
public sealed class Lambda : FileUploader
{
public LambdaSettings Config { get; private set; }

View file

@ -37,6 +37,25 @@ You should have received a copy of the GNU General Public License
namespace ShareX.UploadersLib.FileUploaders
{
public class MediaFireFileUploaderService : FileUploaderService
{
public override FileDestination EnumValue { get; } = FileDestination.MediaFire;
public override bool CheckConfig(UploadersConfig uploadersConfig)
{
return !string.IsNullOrEmpty(uploadersConfig.MediaFireUsername) && !string.IsNullOrEmpty(uploadersConfig.MediaFirePassword);
}
public override FileUploader CreateUploader(UploadersConfig uploadersConfig)
{
return new MediaFire(APIKeys.MediaFireAppId, APIKeys.MediaFireApiKey, uploadersConfig.MediaFireUsername, uploadersConfig.MediaFirePassword)
{
UploadPath = NameParser.Parse(NameParserType.URL, uploadersConfig.MediaFirePath),
UseLongLink = uploadersConfig.MediaFireUseLongLink
};
}
}
public sealed class MediaFire : FileUploader
{
private static readonly string _apiUrl = "https://www.mediafire.com/api/";

View file

@ -33,6 +33,22 @@ You should have received a copy of the GNU General Public License
namespace ShareX.UploadersLib.FileUploaders
{
public class MegaFileUploaderService : FileUploaderService
{
public override FileDestination EnumValue { get; } = FileDestination.Mega;
public override bool CheckConfig(UploadersConfig uploadersConfig)
{
return uploadersConfig.MegaAuthInfos != null && uploadersConfig.MegaAuthInfos.Email != null && uploadersConfig.MegaAuthInfos.Hash != null &&
uploadersConfig.MegaAuthInfos.PasswordAesKey != null;
}
public override FileUploader CreateUploader(UploadersConfig uploadersConfig)
{
return new Mega(uploadersConfig.MegaAuthInfos, uploadersConfig.MegaParentNodeId);
}
}
public sealed class Mega : FileUploader, IWebClient
{
private readonly MegaApiClient _megaClient;

View file

@ -32,6 +32,21 @@ You should have received a copy of the GNU General Public License
namespace ShareX.UploadersLib.FileUploaders
{
public class MinusFileUploaderService : FileUploaderService
{
public override FileDestination EnumValue { get; } = FileDestination.Minus;
public override bool CheckConfig(UploadersConfig uploadersConfig)
{
return uploadersConfig.MinusConfig != null && uploadersConfig.MinusConfig.MinusUser != null;
}
public override FileUploader CreateUploader(UploadersConfig uploadersConfig)
{
return new Minus(uploadersConfig.MinusConfig, uploadersConfig.MinusOAuth2Info);
}
}
public class Minus : FileUploader
{
private const string URL_HOST = "https://minus.com";

View file

@ -33,6 +33,25 @@ You should have received a copy of the GNU General Public License
namespace ShareX.UploadersLib.FileUploaders
{
public class OneDriveFileUploaderService : FileUploaderService
{
public override FileDestination EnumValue { get; } = FileDestination.OneDrive;
public override bool CheckConfig(UploadersConfig uploadersConfig)
{
return OAuth2Info.CheckOAuth(uploadersConfig.OneDriveOAuth2Info);
}
public override FileUploader CreateUploader(UploadersConfig uploadersConfig)
{
return new OneDrive(uploadersConfig.OneDriveOAuth2Info)
{
FolderID = uploadersConfig.OneDriveSelectedFolder.id,
AutoCreateShareableLink = uploadersConfig.OneDriveAutoCreateShareableLink
};
}
}
public sealed class OneDrive : FileUploader, IOAuth2
{
public OAuth2Info AuthInfo { get; set; }

View file

@ -31,6 +31,24 @@ You should have received a copy of the GNU General Public License
namespace ShareX.UploadersLib.FileUploaders
{
public class OpenloadFileUploaderService : FileUploaderService
{
public override FileDestination EnumValue { get; } = FileDestination.Openload;
public override bool CheckConfig(UploadersConfig uploadersConfig) => true;
public override FileUploader CreateUploader(UploadersConfig uploadersConfig)
{
return new OpenloadUploader()
{
APILogin = uploadersConfig.OpenloadAPILogin,
APIKey = uploadersConfig.OpenloadAPIKey,
UploadToFolder = uploadersConfig.OpenloadUploadToSelectedFolder,
FolderID = uploadersConfig.OpenloadSelectedFolderID
};
}
}
public sealed class OpenloadUploader : FileUploader
{
public string APILogin { get; set; }

View file

@ -34,6 +34,28 @@ You should have received a copy of the GNU General Public License
namespace ShareX.UploadersLib.FileUploaders
{
public class OwnCloudFileUploaderService : FileUploaderService
{
public override FileDestination EnumValue { get; } = FileDestination.OwnCloud;
public override bool CheckConfig(UploadersConfig uploadersConfig)
{
return !string.IsNullOrEmpty(uploadersConfig.OwnCloudHost) && !string.IsNullOrEmpty(uploadersConfig.OwnCloudUsername) && !string.IsNullOrEmpty(uploadersConfig.OwnCloudPassword);
}
public override FileUploader CreateUploader(UploadersConfig uploadersConfig)
{
return new OwnCloud(uploadersConfig.OwnCloudHost, uploadersConfig.OwnCloudUsername, uploadersConfig.OwnCloudPassword)
{
Path = uploadersConfig.OwnCloudPath,
CreateShare = uploadersConfig.OwnCloudCreateShare,
DirectLink = uploadersConfig.OwnCloudDirectLink,
IgnoreInvalidCert = uploadersConfig.OwnCloudIgnoreInvalidCert,
IsCompatibility81 = uploadersConfig.OwnCloud81Compatibility
};
}
}
public sealed class OwnCloud : FileUploader
{
public string Host { get; set; }

View file

@ -36,6 +36,21 @@ You should have received a copy of the GNU General Public License
namespace ShareX.UploadersLib.FileUploaders
{
public class PomfFileUploaderService : FileUploaderService
{
public override FileDestination EnumValue { get; } = FileDestination.Pomf;
public override bool CheckConfig(UploadersConfig uploadersConfig)
{
return uploadersConfig.PomfUploader != null && !string.IsNullOrEmpty(uploadersConfig.PomfUploader.UploadURL);
}
public override FileUploader CreateUploader(UploadersConfig uploadersConfig)
{
return new Pomf(uploadersConfig.PomfUploader);
}
}
public class Pomf : FileUploader
{
// Pomf clones: https://docs.google.com/spreadsheets/d/1kh1TZdtyX7UlRd55OBxf7DB-JGj2rsfWckI0FPQRYhE

View file

@ -24,7 +24,6 @@ You should have received a copy of the GNU General Public License
#endregion License Information (GPL v3)
// Credits: https://github.com/BallisticLingonberries
// API Information: https://docs.pushbullet.com/http/
using Newtonsoft.Json;
using ShareX.HelpersLib;
@ -36,6 +35,22 @@ You should have received a copy of the GNU General Public License
namespace ShareX.UploadersLib.FileUploaders
{
public class PushbulletFileUploaderService : FileUploaderService
{
public override FileDestination EnumValue { get; } = FileDestination.Pushbullet;
public override bool CheckConfig(UploadersConfig uploadersConfig)
{
return uploadersConfig.PushbulletSettings != null && !string.IsNullOrEmpty(uploadersConfig.PushbulletSettings.UserAPIKey) &&
uploadersConfig.PushbulletSettings.DeviceList != null && uploadersConfig.PushbulletSettings.DeviceList.IsValidIndex(uploadersConfig.PushbulletSettings.SelectedDevice);
}
public override FileUploader CreateUploader(UploadersConfig uploadersConfig)
{
return new Pushbullet(uploadersConfig.PushbulletSettings);
}
}
public sealed class Pushbullet : FileUploader
{
public PushbulletSettings Config { get; private set; }

View file

@ -35,6 +35,30 @@ You should have received a copy of the GNU General Public License
namespace ShareX.UploadersLib.FileUploaders
{
public class SeafileFileUploaderService : FileUploaderService
{
public override FileDestination EnumValue { get; } = FileDestination.Seafile;
public override bool CheckConfig(UploadersConfig uploadersConfig)
{
return !string.IsNullOrEmpty(uploadersConfig.SeafileAPIURL) && !string.IsNullOrEmpty(uploadersConfig.SeafileAuthToken) && !string.IsNullOrEmpty(uploadersConfig.SeafileRepoID);
}
public override FileUploader CreateUploader(UploadersConfig uploadersConfig)
{
return new Seafile(uploadersConfig.SeafileAPIURL, uploadersConfig.SeafileAuthToken, uploadersConfig.SeafileRepoID)
{
Path = uploadersConfig.SeafilePath,
IsLibraryEncrypted = uploadersConfig.SeafileIsLibraryEncrypted,
EncryptedLibraryPassword = uploadersConfig.SeafileEncryptedLibraryPassword,
ShareDaysToExpire = uploadersConfig.SeafileShareDaysToExpire,
SharePassword = uploadersConfig.SeafileSharePassword,
CreateShareableURL = uploadersConfig.SeafileCreateShareableURL,
IgnoreInvalidCert = uploadersConfig.SeafileIgnoreInvalidCert
};
}
}
public sealed class Seafile : FileUploader
{
public string APIURL { get; set; }

View file

@ -34,6 +34,27 @@ You should have received a copy of the GNU General Public License
namespace ShareX.UploadersLib.FileUploaders
{
public class SendSpaceFileUploaderService : FileUploaderService
{
public override FileDestination EnumValue { get; } = FileDestination.SendSpace;
public override bool CheckConfig(UploadersConfig uploadersConfig)
{
return uploadersConfig.SendSpaceAccountType == AccountType.Anonymous ||
(!string.IsNullOrEmpty(uploadersConfig.SendSpaceUsername) && !string.IsNullOrEmpty(uploadersConfig.SendSpacePassword));
}
public override FileUploader CreateUploader(UploadersConfig uploadersConfig)
{
return new SendSpace(APIKeys.SendSpaceKey)
{
AccountType = uploadersConfig.SendSpaceAccountType,
Username = uploadersConfig.SendSpaceUsername,
Password = uploadersConfig.SendSpacePassword
};
}
}
public sealed class SendSpace : FileUploader
{
private string APIKey;
@ -41,6 +62,10 @@ public sealed class SendSpace : FileUploader
private const string APIURL = "http://api.sendspace.com/rest/";
private const string APIVersion = "1.0";
public AccountType AccountType { get; set; }
public string Username { get; set; }
public string Password { get; set; }
/// <summary>
/// Upload speed limit in kilobytes, 0 for unlimited
/// </summary>
@ -53,6 +78,20 @@ public SendSpace(string apiKey)
APIKey = apiKey;
}
public override UploadResult Upload(Stream stream, string fileName)
{
if (AccountType == AccountType.User)
{
SendSpaceManager.PrepareUploadInfo(APIKey, Username, Password);
}
else
{
SendSpaceManager.PrepareUploadInfo(APIKey);
}
return Upload(stream, fileName, SendSpaceManager.UploadInfo);
}
#region Helpers
public class ResponsePacket
@ -482,11 +521,6 @@ public UploadResult Upload(Stream stream, string fileName, UploadInfo uploadInfo
return result;
}
public override UploadResult Upload(Stream stream, string fileName)
{
return Upload(stream, fileName, SendSpaceManager.UploadInfo);
}
public class CheckProgress : IDisposable
{
private SendSpace sendSpace;

View file

@ -28,6 +28,32 @@ You should have received a copy of the GNU General Public License
namespace ShareX.UploadersLib.FileUploaders
{
public class SharedFolderFileUploaderService : FileUploaderService
{
public override FileDestination EnumValue { get; } = FileDestination.SharedFolder;
public override bool CheckConfig(UploadersConfig uploadersConfig)
{
return uploadersConfig.LocalhostAccountList != null && uploadersConfig.LocalhostAccountList.IsValidIndex(uploadersConfig.LocalhostSelectedFiles);
}
public override FileUploader CreateUploader(UploadersConfig uploadersConfig)
{
// TODO: Check TaskSettings override index (WorkerTask.GetFTPAccount)
// TODO: Unable to reach Info.DataType
int index = uploadersConfig.GetLocalhostIndex(EDataType.File);
LocalhostAccount account = uploadersConfig.LocalhostAccountList.ReturnIfValidIndex(index);
if (account != null)
{
return new SharedFolderUploader(account);
}
return null;
}
}
public class SharedFolderUploader : FileUploader
{
private LocalhostAccount account;

View file

@ -32,6 +32,27 @@ You should have received a copy of the GNU General Public License
namespace ShareX.UploadersLib.FileUploaders
{
public class StreamableFileUploaderService : FileUploaderService
{
public override FileDestination EnumValue { get; } = FileDestination.Streamable;
public override bool CheckConfig(UploadersConfig uploadersConfig) => true;
public override FileUploader CreateUploader(UploadersConfig uploadersConfig)
{
string username = "";
string password = "";
if (!uploadersConfig.StreamableAnonymous)
{
username = uploadersConfig.StreamableUsername;
password = uploadersConfig.StreamablePassword;
}
return new Streamable(username, password);
}
}
public class Streamable : FileUploader
{
private const string Host = "https://api.streamable.com";

View file

@ -32,6 +32,21 @@ You should have received a copy of the GNU General Public License
namespace ShareX.UploadersLib.FileUploaders
{
public class SulFileUploaderService : FileUploaderService
{
public override FileDestination EnumValue { get; } = FileDestination.Sul;
public override bool CheckConfig(UploadersConfig uploadersConfig)
{
return !string.IsNullOrEmpty(uploadersConfig.SulAPIKey);
}
public override FileUploader CreateUploader(UploadersConfig uploadersConfig)
{
return new SulUploader(uploadersConfig.SulAPIKey);
}
}
public sealed class SulUploader : FileUploader
{
private string APIKey { get; set; }

View file

@ -28,6 +28,18 @@ You should have received a copy of the GNU General Public License
namespace ShareX.UploadersLib.FileUploaders
{
public class UguuFileUploaderService : FileUploaderService
{
public override FileDestination EnumValue { get; } = FileDestination.Uguu;
public override bool CheckConfig(UploadersConfig uploadersConfig) => true;
public override FileUploader CreateUploader(UploadersConfig uploadersConfig)
{
return new Uguu();
}
}
public class Uguu : FileUploader
{
public bool RandomName { get; set; }

View file

@ -37,18 +37,30 @@ You should have received a copy of the GNU General Public License
namespace ShareX.UploadersLib.FileUploaders
{
/*
* Up1 is an encrypted image uploader. The idea is that any URL (for example, https://up1.ca/#hsd2mdSuIkzTUR6saZpn1Q) contains
* what is called a "seed". In this case, the seed is "hsd2mdSuIkzTUR6saZpn1Q". With this, we use sha512(seed) (output 64 bytes)
* in order to derive an AES key (32 bytes), a CCM IV (16 bytes), and a server-side identifier (16 bytes). These are used to
* encrypt and store the data.
*
* Within the encrypted blob, There is a double-null-terminated UTF-16 JSON object that contains metadata like the filename and mimetype.
* This is prepended to the image data.
*/
public class Up1FileUploaderService : FileUploaderService
{
public override FileDestination EnumValue { get; } = FileDestination.Up1;
public override bool CheckConfig(UploadersConfig uploadersConfig) => true;
public override FileUploader CreateUploader(UploadersConfig uploadersConfig)
{
return new Up1(uploadersConfig.Up1Host, uploadersConfig.Up1Key);
}
}
public sealed class Up1 : FileUploader
{
/*
* Up1 is an encrypted image uploader. The idea is that any URL (for example, https://up1.ca/#hsd2mdSuIkzTUR6saZpn1Q) contains
* what is called a "seed". In this case, the seed is "hsd2mdSuIkzTUR6saZpn1Q". With this, we use sha512(seed) (output 64 bytes)
* in order to derive an AES key (32 bytes), a CCM IV (16 bytes), and a server-side identifier (16 bytes). These are used to
* encrypt and store the data.
*
* Within the encrypted blob, There is a double-null-terminated UTF-16 JSON object that contains metadata like the filename and mimetype.
* This is prepended to the image data.
*/
private const int MacSize = 64;
public string SystemUrl { get; set; }

View file

@ -30,6 +30,18 @@ You should have received a copy of the GNU General Public License
namespace ShareX.UploadersLib.FileUploaders
{
public class VideoBinFileUploaderService : FileUploaderService
{
public override FileDestination EnumValue { get; } = FileDestination.VideoBin;
public override bool CheckConfig(UploadersConfig uploadersConfig) => true;
public override FileUploader CreateUploader(UploadersConfig uploadersConfig)
{
return new VideoBin();
}
}
public sealed class VideoBin : FileUploader
{
private const string URLUpload = "https://videobin.org/add";

View file

@ -420,54 +420,6 @@ public bool IsValid(FileDestination destination)
return service.CheckConfig(this);
}
switch (destination)
{
case FileDestination.FTP:
return FTPAccountList != null && FTPAccountList.IsValidIndex(FTPSelectedFile);
case FileDestination.OneDrive:
return OAuth2Info.CheckOAuth(OneDriveOAuth2Info);
case FileDestination.GoogleDrive:
return OAuth2Info.CheckOAuth(GoogleDriveOAuth2Info);
case FileDestination.Box:
return OAuth2Info.CheckOAuth(BoxOAuth2Info);
case FileDestination.Mega:
return MegaAuthInfos != null && MegaAuthInfos.Email != null && MegaAuthInfos.Hash != null && MegaAuthInfos.PasswordAesKey != null;
case FileDestination.AmazonS3:
return AmazonS3Settings != null && !string.IsNullOrEmpty(AmazonS3Settings.AccessKeyID) && !string.IsNullOrEmpty(AmazonS3Settings.SecretAccessKey) &&
!string.IsNullOrEmpty(AmazonS3Settings.Bucket) && AmazonS3.GetCurrentRegion(AmazonS3Settings) != AmazonS3.UnknownEndpoint;
case FileDestination.OwnCloud:
return !string.IsNullOrEmpty(OwnCloudHost) && !string.IsNullOrEmpty(OwnCloudUsername) && !string.IsNullOrEmpty(OwnCloudPassword);
case FileDestination.MediaFire:
return !string.IsNullOrEmpty(MediaFireUsername) && !string.IsNullOrEmpty(MediaFirePassword);
case FileDestination.Pushbullet:
return PushbulletSettings != null && !string.IsNullOrEmpty(PushbulletSettings.UserAPIKey) && PushbulletSettings.DeviceList != null &&
PushbulletSettings.DeviceList.IsValidIndex(PushbulletSettings.SelectedDevice);
case FileDestination.SendSpace:
return SendSpaceAccountType == AccountType.Anonymous || (!string.IsNullOrEmpty(SendSpaceUsername) && !string.IsNullOrEmpty(SendSpacePassword));
case FileDestination.Minus:
return MinusConfig != null && MinusConfig.MinusUser != null;
case FileDestination.Ge_tt:
return Ge_ttLogin != null && !string.IsNullOrEmpty(Ge_ttLogin.AccessToken);
case FileDestination.Localhostr:
return !string.IsNullOrEmpty(LocalhostrEmail) && !string.IsNullOrEmpty(LocalhostrPassword);
case FileDestination.Jira:
return OAuthInfo.CheckOAuth(JiraOAuthInfo);
case FileDestination.Lambda:
return LambdaSettings != null && !string.IsNullOrEmpty(LambdaSettings.UserAPIKey);
case FileDestination.Pomf:
return PomfUploader != null && !string.IsNullOrEmpty(PomfUploader.UploadURL);
case FileDestination.Sul:
return !string.IsNullOrEmpty(SulAPIKey);
case FileDestination.Seafile:
return !string.IsNullOrEmpty(SeafileAPIURL) && !string.IsNullOrEmpty(SeafileAuthToken) && !string.IsNullOrEmpty(SeafileRepoID);
case FileDestination.SharedFolder:
return LocalhostAccountList != null && LocalhostAccountList.IsValidIndex(LocalhostSelectedFiles);
case FileDestination.Email:
return !string.IsNullOrEmpty(EmailSmtpServer) && EmailSmtpPort > 0 && !string.IsNullOrEmpty(EmailFrom) && !string.IsNullOrEmpty(EmailPassword);
case FileDestination.CustomFileUploader:
return CustomUploadersList != null && CustomUploadersList.IsValidIndex(CustomFileUploaderSelected);
}
return true;
}

View file

@ -846,8 +846,6 @@ public UploadResult UploadText(Stream stream, string fileName)
public UploadResult UploadFile(Stream stream, string fileName)
{
FileUploader fileUploader = null;
FileDestination fileDestination;
switch (Info.DataType)
@ -868,217 +866,16 @@ public UploadResult UploadFile(Stream stream, string fileName)
if (service != null)
{
fileUploader = service.CreateUploader(Program.UploadersConfig);
}
else
{
switch (fileDestination)
FileUploader fileUploader = service.CreateUploader(Program.UploadersConfig);
if (fileUploader != null)
{
case FileDestination.OneDrive:
fileUploader = new OneDrive(Program.UploadersConfig.OneDriveOAuth2Info)
{
FolderID = Program.UploadersConfig.OneDriveSelectedFolder.id,
AutoCreateShareableLink = Program.UploadersConfig.OneDriveAutoCreateShareableLink
};
break;
case FileDestination.GoogleDrive:
fileUploader = new GoogleDrive(Program.UploadersConfig.GoogleDriveOAuth2Info)
{
IsPublic = Program.UploadersConfig.GoogleDriveIsPublic,
FolderID = Program.UploadersConfig.GoogleDriveUseFolder ? Program.UploadersConfig.GoogleDriveFolderID : null
};
break;
/*case FileDestination.Hubic:
fileUploader = new Hubic(Program.UploadersConfig.HubicOAuth2Info, Program.UploadersConfig.HubicOpenstackAuthInfo)
{
SelectedFolder = Program.UploadersConfig.HubicSelectedFolder,
Publish = Program.UploadersConfig.HubicPublish
};
break;*/
case FileDestination.SendSpace:
fileUploader = new SendSpace(APIKeys.SendSpaceKey);
switch (Program.UploadersConfig.SendSpaceAccountType)
{
case AccountType.Anonymous:
SendSpaceManager.PrepareUploadInfo(APIKeys.SendSpaceKey);
break;
case AccountType.User:
SendSpaceManager.PrepareUploadInfo(APIKeys.SendSpaceKey, Program.UploadersConfig.SendSpaceUsername, Program.UploadersConfig.SendSpacePassword);
break;
}
break;
case FileDestination.Minus:
fileUploader = new Minus(Program.UploadersConfig.MinusConfig, Program.UploadersConfig.MinusOAuth2Info);
break;
case FileDestination.Box:
fileUploader = new Box(Program.UploadersConfig.BoxOAuth2Info)
{
FolderID = Program.UploadersConfig.BoxSelectedFolder.id,
Share = Program.UploadersConfig.BoxShare
};
break;
case FileDestination.Gfycat:
fileUploader = new GfycatUploader();
break;
case FileDestination.Ge_tt:
fileUploader = new Ge_tt(APIKeys.Ge_ttKey)
{
AccessToken = Program.UploadersConfig.Ge_ttLogin.AccessToken
};
break;
case FileDestination.Localhostr:
fileUploader = new Hostr(Program.UploadersConfig.LocalhostrEmail, Program.UploadersConfig.LocalhostrPassword)
{
DirectURL = Program.UploadersConfig.LocalhostrDirectURL
};
break;
case FileDestination.CustomFileUploader:
CustomUploaderItem customUploader = GetCustomUploader(Program.UploadersConfig.CustomFileUploaderSelected);
if (customUploader != null)
{
fileUploader = new CustomFileUploader(customUploader);
}
break;
case FileDestination.FTP:
FTPAccount ftpAccount = GetFTPAccount(Program.UploadersConfig.GetFTPIndex(Info.DataType));
if (ftpAccount != null)
{
if (ftpAccount.Protocol == FTPProtocol.FTP || ftpAccount.Protocol == FTPProtocol.FTPS)
{
fileUploader = new FTP(ftpAccount);
}
else if (ftpAccount.Protocol == FTPProtocol.SFTP)
{
fileUploader = new SFTP(ftpAccount);
}
}
break;
case FileDestination.SharedFolder:
int idLocalhost = Program.UploadersConfig.GetLocalhostIndex(Info.DataType);
if (Program.UploadersConfig.LocalhostAccountList.IsValidIndex(idLocalhost))
{
fileUploader = new SharedFolderUploader(Program.UploadersConfig.LocalhostAccountList[idLocalhost]);
}
break;
case FileDestination.Email:
using (EmailForm emailForm = new EmailForm(Program.UploadersConfig.EmailRememberLastTo ? Program.UploadersConfig.EmailLastTo : string.Empty,
Program.UploadersConfig.EmailDefaultSubject, Program.UploadersConfig.EmailDefaultBody))
{
if (emailForm.ShowDialog() == DialogResult.OK)
{
if (Program.UploadersConfig.EmailRememberLastTo)
{
Program.UploadersConfig.EmailLastTo = emailForm.ToEmail;
}
PrepareUploader(fileUploader);
fileUploader = new Email
{
SmtpServer = Program.UploadersConfig.EmailSmtpServer,
SmtpPort = Program.UploadersConfig.EmailSmtpPort,
FromEmail = Program.UploadersConfig.EmailFrom,
Password = Program.UploadersConfig.EmailPassword,
ToEmail = emailForm.ToEmail,
Subject = emailForm.Subject,
Body = emailForm.Body
};
}
else
{
StopRequested = true;
}
}
break;
case FileDestination.Jira:
fileUploader = new Jira(Program.UploadersConfig.JiraHost, Program.UploadersConfig.JiraOAuthInfo, Program.UploadersConfig.JiraIssuePrefix);
break;
case FileDestination.Mega:
fileUploader = new Mega(Program.UploadersConfig.MegaAuthInfos, Program.UploadersConfig.MegaParentNodeId);
break;
case FileDestination.AmazonS3:
fileUploader = new AmazonS3(Program.UploadersConfig.AmazonS3Settings);
break;
case FileDestination.OwnCloud:
fileUploader = new OwnCloud(Program.UploadersConfig.OwnCloudHost, Program.UploadersConfig.OwnCloudUsername, Program.UploadersConfig.OwnCloudPassword)
{
Path = Program.UploadersConfig.OwnCloudPath,
CreateShare = Program.UploadersConfig.OwnCloudCreateShare,
DirectLink = Program.UploadersConfig.OwnCloudDirectLink,
IgnoreInvalidCert = Program.UploadersConfig.OwnCloudIgnoreInvalidCert,
IsCompatibility81 = Program.UploadersConfig.OwnCloud81Compatibility
};
break;
case FileDestination.Pushbullet:
fileUploader = new Pushbullet(Program.UploadersConfig.PushbulletSettings);
break;
case FileDestination.MediaFire:
fileUploader = new MediaFire(APIKeys.MediaFireAppId, APIKeys.MediaFireApiKey, Program.UploadersConfig.MediaFireUsername, Program.UploadersConfig.MediaFirePassword)
{
UploadPath = NameParser.Parse(NameParserType.URL, Program.UploadersConfig.MediaFirePath),
UseLongLink = Program.UploadersConfig.MediaFireUseLongLink
};
break;
case FileDestination.Lambda:
fileUploader = new Lambda(Program.UploadersConfig.LambdaSettings);
break;
case FileDestination.VideoBin:
fileUploader = new VideoBin();
break;
case FileDestination.Pomf:
fileUploader = new Pomf(Program.UploadersConfig.PomfUploader);
break;
case FileDestination.Uguu:
fileUploader = new Uguu();
break;
case FileDestination.Dropfile:
fileUploader = new Dropfile();
break;
case FileDestination.Up1:
fileUploader = new Up1(Program.UploadersConfig.Up1Host, Program.UploadersConfig.Up1Key);
break;
case FileDestination.Sul:
fileUploader = new SulUploader(Program.UploadersConfig.SulAPIKey);
break;
case FileDestination.Seafile:
fileUploader = new Seafile(Program.UploadersConfig.SeafileAPIURL, Program.UploadersConfig.SeafileAuthToken, Program.UploadersConfig.SeafileRepoID)
{
Path = Program.UploadersConfig.SeafilePath,
IsLibraryEncrypted = Program.UploadersConfig.SeafileIsLibraryEncrypted,
EncryptedLibraryPassword = Program.UploadersConfig.SeafileEncryptedLibraryPassword,
ShareDaysToExpire = Program.UploadersConfig.SeafileShareDaysToExpire,
SharePassword = Program.UploadersConfig.SeafileSharePassword,
CreateShareableURL = Program.UploadersConfig.SeafileCreateShareableURL,
IgnoreInvalidCert = Program.UploadersConfig.SeafileIgnoreInvalidCert
};
break;
case FileDestination.Streamable:
string user = "";
string password = "";
if (!Program.UploadersConfig.StreamableAnonymous)
{
user = Program.UploadersConfig.StreamableUsername;
password = Program.UploadersConfig.StreamablePassword;
}
fileUploader = new Streamable(user, password);
break;
case FileDestination.Openload:
fileUploader = new OpenloadUploader()
{
APILogin = Program.UploadersConfig.OpenloadAPILogin,
APIKey = Program.UploadersConfig.OpenloadAPIKey,
UploadToFolder = Program.UploadersConfig.OpenloadUploadToSelectedFolder,
FolderID = Program.UploadersConfig.OpenloadSelectedFolderID
};
break;
return fileUploader.Upload(stream, fileName);
}
}
if (fileUploader != null)
{
PrepareUploader(fileUploader);
return fileUploader.Upload(stream, fileName);
}
return null;
}