diff --git a/ShareX.UploadersLib/BaseUploaders/Uploader.cs b/ShareX.UploadersLib/BaseUploaders/Uploader.cs index 5eee696e5..9c47f8d64 100644 --- a/ShareX.UploadersLib/BaseUploaders/Uploader.cs +++ b/ShareX.UploadersLib/BaseUploaders/Uploader.cs @@ -345,6 +345,12 @@ private HttpWebRequest PrepareWebRequest(HttpMethod method, string url, NameValu headers.Remove("Accept"); } + if (headers["Content-Length"] != null) + { + request.ContentLength = Convert.ToInt32(headers["Content-Length"]); + headers.Remove("Content-Length"); + } + request.Headers.Add(headers); } diff --git a/ShareX.UploadersLib/Enums.cs b/ShareX.UploadersLib/Enums.cs index 1f5b8148c..7e92b810a 100644 --- a/ShareX.UploadersLib/Enums.cs +++ b/ShareX.UploadersLib/Enums.cs @@ -105,6 +105,8 @@ public enum FileDestination Mega, [Description("Amazon S3")] AmazonS3, + [Description("Azure Storage")] + AzureStorage, [Description("ownCloud")] OwnCloud, [Description("MediaFire")] diff --git a/ShareX.UploadersLib/Favicons/AzureStorage.png b/ShareX.UploadersLib/Favicons/AzureStorage.png new file mode 100644 index 000000000..ace84333e Binary files /dev/null and b/ShareX.UploadersLib/Favicons/AzureStorage.png differ diff --git a/ShareX.UploadersLib/FileUploaders/AzureStorage.cs b/ShareX.UploadersLib/FileUploaders/AzureStorage.cs new file mode 100644 index 000000000..920292a5c --- /dev/null +++ b/ShareX.UploadersLib/FileUploaders/AzureStorage.cs @@ -0,0 +1,186 @@ +using ShareX.UploadersLib.Properties; +using System; +using System.Collections.Generic; +using System.Collections.Specialized; +using System.Drawing; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Net; +using System.Security.Cryptography; +using System.Text; +using System.Windows.Forms; + +namespace ShareX.UploadersLib.FileUploaders +{ + public sealed class AzureStorage : FileUploader + { + private string azureStorageAccountName; + private string azureStorageAccountAccessKey; + private string azureStorageContainer; + private const string apiVersion = "2016-05-31"; + + public AzureStorage(string asAccountName, string asAccessKey, string asContainer) + { + azureStorageAccountName = asAccountName; + azureStorageAccountAccessKey = asAccessKey; + azureStorageContainer = asContainer; + } + + public override UploadResult Upload(Stream stream, string fileName) + { + if (string.IsNullOrEmpty(azureStorageAccountName)) { Errors.Add("'Account Name' must not be empty"); } + if (string.IsNullOrEmpty(azureStorageAccountAccessKey)) { Errors.Add("'Access key' must not be empty"); } + if (string.IsNullOrEmpty(azureStorageContainer)) { Errors.Add("'Container' must not be empty"); } + + if (IsError) + { + return null; + } + + CreateContainerIfNotExists(); + + var date = DateTime.UtcNow.ToString("R", CultureInfo.InvariantCulture); + var uri = string.Format("https://{0}.blob.core.windows.net/{1}/{2}", azureStorageAccountName, azureStorageContainer, fileName); + + NameValueCollection requestHeaders = new NameValueCollection(); + requestHeaders["x-ms-date"] = date; + requestHeaders["x-ms-version"] = apiVersion; + requestHeaders["x-ms-blob-type"] = "BlockBlob"; + + var canonicalizedHeaders = string.Format("x-ms-blob-type:BlockBlob\nx-ms-date:{0}\nx-ms-version:{1}\n", date, apiVersion); + var canonicalizedResource = string.Format("/{0}/{1}/{2}", azureStorageAccountName, azureStorageContainer, fileName); + + var StringToSign = GenerateStringToSign(canonicalizedHeaders, canonicalizedResource, stream.Length.ToString()); + + requestHeaders["Authorization"] = string.Format("SharedKey {0}:{1}", azureStorageAccountName, HashRequest(StringToSign)); + + NameValueCollection responseHeaders = SendRequestGetHeaders(HttpMethod.PUT, uri, stream, null, null, requestHeaders, null); + + if (responseHeaders != null) + { + return new UploadResult { IsSuccess = true, URL = uri }; + } + else + { + Errors.Add("Upload failed."); + return null; + } + } + + private void CreateContainerIfNotExists() + { + var date = DateTime.UtcNow.ToString("R", CultureInfo.InvariantCulture); + var uri = string.Format("https://{0}.blob.core.windows.net/{1}?restype=container", azureStorageAccountName, azureStorageContainer); + + NameValueCollection requestHeaders = new NameValueCollection(); + requestHeaders["Content-Length"] = "0"; + requestHeaders["x-ms-date"] = date; + requestHeaders["x-ms-version"] = apiVersion; + + var canonicalizedHeaders = string.Format("x-ms-date:{0}\nx-ms-version:{1}\n", date, apiVersion); + var canonicalizedResource = string.Format("/{0}/{1}\nrestype:container", azureStorageAccountName, azureStorageContainer); + + var StringToSign = GenerateStringToSign(canonicalizedHeaders, canonicalizedResource); + + requestHeaders["Authorization"] = string.Format("SharedKey {0}:{1}", azureStorageAccountName, HashRequest(StringToSign)); + + NameValueCollection responseHeaders = SendRequestGetHeaders(HttpMethod.PUT, uri, null, null, null, requestHeaders, null); + + if (responseHeaders != null) + { + SetContainerACL(); + } + else + { + if (Errors.Count != 0) + { + if (Errors[0].Contains("409")) + SetContainerACL(); + else + { + Errors.Add("Upload to Azure storage failed."); + } + } + } + } + + private void SetContainerACL() + { + var date = DateTime.UtcNow.ToString("R", CultureInfo.InvariantCulture); + var uri = string.Format("https://{0}.blob.core.windows.net/{1}?restype=container&comp=acl", azureStorageAccountName, azureStorageContainer); + + NameValueCollection requestHeaders = new NameValueCollection(); + requestHeaders["Content-Length"] = "0"; + requestHeaders["x-ms-date"] = date; + requestHeaders["x-ms-version"] = apiVersion; + requestHeaders["x-ms-blob-public-access"] = "container"; + + var canonicalizedHeaders = string.Format("x-ms-blob-public-access:container\nx-ms-date:{0}\nx-ms-version:{1}\n", date, apiVersion); + var canonicalizedResource = string.Format("/{0}/{1}\ncomp:acl\nrestype:container", azureStorageAccountName, azureStorageContainer); + + var StringToSign = GenerateStringToSign(canonicalizedHeaders, canonicalizedResource); + + requestHeaders["Authorization"] = string.Format("SharedKey {0}:{1}", azureStorageAccountName, HashRequest(StringToSign)); + + NameValueCollection responseHeaders = SendRequestGetHeaders(HttpMethod.PUT, uri, null, null, null, requestHeaders, null); + + if (responseHeaders == null) + Errors.Add("There was an issue with setting ACL on the container."); + } + + private string HashRequest(string stringToSign) + { + string hashedString; + + using (HashAlgorithm hashAlgorithm = new HMACSHA256(Convert.FromBase64String(azureStorageAccountAccessKey))) + { + byte[] messageBuffer = Encoding.UTF8.GetBytes(stringToSign); + hashedString = Convert.ToBase64String(hashAlgorithm.ComputeHash(messageBuffer)); + } + + return hashedString; + } + + private string GenerateStringToSign(string canonicalizedHeaders, string canonicalizedResource, string contentLength = "") + { + var stringToSign = "PUT" + "\n" + + "\n" + + "\n" + + (string.IsNullOrEmpty(contentLength) ? string.Empty : contentLength) + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + canonicalizedHeaders + + canonicalizedResource; + + return stringToSign; + } + } + + public class AzureStorageUploaderService : FileUploaderService + { + public override FileDestination EnumValue { get; } = FileDestination.AzureStorage; + + public override Image ServiceImage => Resources.AzureStorage; + + public override bool CheckConfig(UploadersConfig config) + { + return !string.IsNullOrEmpty(config.AzureStorageAccountName) && + !string.IsNullOrEmpty(config.AzureStorageAccountAccessKey) && + !string.IsNullOrEmpty(config.AzureStorageContainer); + } + + public override GenericUploader CreateUploader(UploadersConfig config, TaskReferenceHelper taskInfo) + { + return new AzureStorage(config.AzureStorageAccountName, config.AzureStorageAccountAccessKey, config.AzureStorageContainer); + } + + public override TabPage GetUploadersConfigTabPage(UploadersConfigForm form) => form.tpAzureStorage; + } +} \ No newline at end of file diff --git a/ShareX.UploadersLib/FileUploaders/AzureStorageSettings.cs b/ShareX.UploadersLib/FileUploaders/AzureStorageSettings.cs new file mode 100644 index 000000000..d4cd846a6 --- /dev/null +++ b/ShareX.UploadersLib/FileUploaders/AzureStorageSettings.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace ShareX.UploadersLib.FileUploaders +{ + public class AzureStorageSettings + { + public string AccountName { get; set; } + public string AccessKey { get; set; } + public string Container { get; set; } + } +} \ No newline at end of file diff --git a/ShareX.UploadersLib/Forms/UploadersConfigForm.Designer.cs b/ShareX.UploadersLib/Forms/UploadersConfigForm.Designer.cs index 89b047916..bed39996b 100644 --- a/ShareX.UploadersLib/Forms/UploadersConfigForm.Designer.cs +++ b/ShareX.UploadersLib/Forms/UploadersConfigForm.Designer.cs @@ -34,6 +34,8 @@ private void InitializeComponent() this.ttHelpTip = new System.Windows.Forms.ToolTip(this.components); this.cbAmazonS3UseRRS = new System.Windows.Forms.CheckBox(); this.cbAmazonS3CustomCNAME = new System.Windows.Forms.CheckBox(); + this.mbCustomUploaderDestinationType = new ShareX.HelpersLib.MenuButton(); + this.cmsCustomUploaderDestinationType = new System.Windows.Forms.ContextMenuStrip(this.components); this.tpOtherUploaders = new System.Windows.Forms.TabPage(); this.tcOtherUploaders = new System.Windows.Forms.TabControl(); this.tpTwitter = new System.Windows.Forms.TabPage(); @@ -42,6 +44,7 @@ private void InitializeComponent() this.lblTwitterDefaultMessage = new System.Windows.Forms.Label(); this.txtTwitterDefaultMessage = new System.Windows.Forms.TextBox(); this.cbTwitterSkipMessageBox = new System.Windows.Forms.CheckBox(); + this.oauthTwitter = new ShareX.UploadersLib.OAuthControl(); this.txtTwitterDescription = new System.Windows.Forms.TextBox(); this.lblTwitterDescription = new System.Windows.Forms.Label(); this.btnTwitterRemove = new System.Windows.Forms.Button(); @@ -103,8 +106,6 @@ private void InitializeComponent() this.lblCustomUploaderResponseType = new System.Windows.Forms.Label(); this.cbCustomUploaderURLShortener = new System.Windows.Forms.ComboBox(); this.gbCustomUploaders = new System.Windows.Forms.GroupBox(); - this.mbCustomUploaderDestinationType = new ShareX.HelpersLib.MenuButton(); - this.cmsCustomUploaderDestinationType = new System.Windows.Forms.ContextMenuStrip(this.components); this.btnCustomUploadersExportAll = new System.Windows.Forms.Button(); this.btnCustomUploaderClearUploaders = new System.Windows.Forms.Button(); this.eiCustomUploaders = new ShareX.HelpersLib.ExportImportControl(); @@ -136,7 +137,10 @@ private void InitializeComponent() this.tpBitly = new System.Windows.Forms.TabPage(); this.txtBitlyDomain = new System.Windows.Forms.TextBox(); this.lblBitlyDomain = new System.Windows.Forms.Label(); + this.oauth2Bitly = new ShareX.UploadersLib.OAuthControl(); this.tpGoogleURLShortener = new System.Windows.Forms.TabPage(); + this.oauth2GoogleURLShortener = new ShareX.UploadersLib.OAuthControl(); + this.atcGoogleURLShortenerAccountType = new ShareX.UploadersLib.AccountTypeControl(); this.tpYourls = new System.Windows.Forms.TabPage(); this.txtYourlsPassword = new System.Windows.Forms.TextBox(); this.txtYourlsUsername = new System.Windows.Forms.TextBox(); @@ -174,7 +178,9 @@ private void InitializeComponent() this.cboFtpImages = new System.Windows.Forms.ComboBox(); this.cboFtpFiles = new System.Windows.Forms.ComboBox(); this.cboFtpText = new System.Windows.Forms.ComboBox(); + this.ucFTPAccounts = new ShareX.UploadersLib.AccountsControl(); this.tpDropbox = new System.Windows.Forms.TabPage(); + this.oauth2Dropbox = new ShareX.UploadersLib.OAuthControl(); this.cbDropboxURLType = new System.Windows.Forms.ComboBox(); this.cbDropboxAutoCreateShareableLink = new System.Windows.Forms.CheckBox(); this.pbDropboxLogo = new System.Windows.Forms.PictureBox(); @@ -186,6 +192,7 @@ private void InitializeComponent() this.tvOneDrive = new System.Windows.Forms.TreeView(); this.lblOneDriveFolderID = new System.Windows.Forms.Label(); this.cbOneDriveCreateShareableLink = new System.Windows.Forms.CheckBox(); + this.oAuth2OneDrive = new ShareX.UploadersLib.OAuthControl(); this.tpGoogleDrive = new System.Windows.Forms.TabPage(); this.cbGoogleDriveDirectLink = new System.Windows.Forms.CheckBox(); this.cbGoogleDriveUseFolder = new System.Windows.Forms.CheckBox(); @@ -196,6 +203,7 @@ private void InitializeComponent() this.chGoogleDriveDescription = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.btnGoogleDriveRefreshFolders = new System.Windows.Forms.Button(); this.cbGoogleDriveIsPublic = new System.Windows.Forms.CheckBox(); + this.oauth2GoogleDrive = new ShareX.UploadersLib.OAuthControl(); this.tpPuush = new System.Windows.Forms.TabPage(); this.pbPuush = new System.Windows.Forms.PictureBox(); this.lblPuushAPIKey = new System.Windows.Forms.Label(); @@ -214,6 +222,7 @@ private void InitializeComponent() this.chBoxFoldersName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.lblBoxFolderID = new System.Windows.Forms.Label(); this.btnBoxRefreshFolders = new System.Windows.Forms.Button(); + this.oauth2Box = new ShareX.UploadersLib.OAuthControl(); this.tpAmazonS3 = new System.Windows.Forms.TabPage(); this.txtAmazonS3CustomDomain = new System.Windows.Forms.TextBox(); this.lblAmazonS3PathPreviewLabel = new System.Windows.Forms.Label(); @@ -230,6 +239,14 @@ private void InitializeComponent() this.lblAmazonS3SecretKey = new System.Windows.Forms.Label(); this.lblAmazonS3AccessKey = new System.Windows.Forms.Label(); this.txtAmazonS3AccessKey = new System.Windows.Forms.TextBox(); + this.tpAzureStorage = new System.Windows.Forms.TabPage(); + this.btnAzureStoragePortal = new System.Windows.Forms.Button(); + this.txtAzureStorageContainer = new System.Windows.Forms.TextBox(); + this.lblAzureStorageContainer = new System.Windows.Forms.Label(); + this.txtAzureStorageAccessKey = new System.Windows.Forms.TextBox(); + this.lblAzureStorageAccessKey = new System.Windows.Forms.Label(); + this.txtAzureStorageAccountName = new System.Windows.Forms.TextBox(); + this.lblAzureStorageAccountName = new System.Windows.Forms.Label(); this.tpMega = new System.Windows.Forms.TabPage(); this.btnMegaRefreshFolders = new System.Windows.Forms.Button(); this.lblMegaStatus = new System.Windows.Forms.Label(); @@ -275,6 +292,7 @@ private void InitializeComponent() this.lblSendSpaceUsername = new System.Windows.Forms.Label(); this.txtSendSpacePassword = new System.Windows.Forms.TextBox(); this.txtSendSpaceUserName = new System.Windows.Forms.TextBox(); + this.atcSendSpaceAccountType = new ShareX.UploadersLib.AccountTypeControl(); this.tpGe_tt = new System.Windows.Forms.TabPage(); this.lblGe_ttStatus = new System.Windows.Forms.Label(); this.lblGe_ttPassword = new System.Windows.Forms.Label(); @@ -312,6 +330,7 @@ private void InitializeComponent() this.txtJiraConfigHelp = new System.Windows.Forms.TextBox(); this.txtJiraHost = new System.Windows.Forms.TextBox(); this.lblJiraHost = new System.Windows.Forms.Label(); + this.oAuthJira = new ShareX.UploadersLib.OAuthControl(); this.tpLambda = new System.Windows.Forms.TabPage(); this.lblLambdaInfo = new System.Windows.Forms.Label(); this.lblLambdaApiKey = new System.Windows.Forms.Label(); @@ -400,6 +419,7 @@ private void InitializeComponent() this.lblSharedFolderImages = new System.Windows.Forms.Label(); this.cboSharedFolderText = new System.Windows.Forms.ComboBox(); this.cboSharedFolderImages = new System.Windows.Forms.ComboBox(); + this.ucLocalhostAccounts = new ShareX.UploadersLib.AccountsControl(); this.tpEmail = new System.Windows.Forms.TabPage(); this.txtEmailAutomaticSendTo = new System.Windows.Forms.TextBox(); this.cbEmailAutomaticSend = new System.Windows.Forms.CheckBox(); @@ -442,6 +462,8 @@ private void InitializeComponent() this.tpGist = new System.Windows.Forms.TabPage(); this.cbGistUseRawURL = new System.Windows.Forms.CheckBox(); this.cbGistPublishPublic = new System.Windows.Forms.CheckBox(); + this.oAuth2Gist = new ShareX.UploadersLib.OAuthControl(); + this.atcGistAccountType = new ShareX.UploadersLib.AccountTypeControl(); this.tpUpaste = new System.Windows.Forms.TabPage(); this.cbUpasteIsPublic = new System.Windows.Forms.CheckBox(); this.lblUpasteUserKey = new System.Windows.Forms.Label(); @@ -466,6 +488,8 @@ private void InitializeComponent() this.cbImgurUseGIFV = new System.Windows.Forms.CheckBox(); this.cbImgurUploadSelectedAlbum = new System.Windows.Forms.CheckBox(); this.cbImgurDirectLink = new System.Windows.Forms.CheckBox(); + this.atcImgurAccountType = new ShareX.UploadersLib.AccountTypeControl(); + this.oauth2Imgur = new ShareX.UploadersLib.OAuthControl(); this.lvImgurAlbumList = new System.Windows.Forms.ListView(); this.chImgurID = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.chImgurTitle = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); @@ -483,6 +507,7 @@ private void InitializeComponent() this.txtImageShackPassword = new System.Windows.Forms.TextBox(); this.lblImageShackPassword = new System.Windows.Forms.Label(); this.tpTinyPic = new System.Windows.Forms.TabPage(); + this.atcTinyPicAccountType = new ShareX.UploadersLib.AccountTypeControl(); this.btnTinyPicLogin = new System.Windows.Forms.Button(); this.txtTinyPicPassword = new System.Windows.Forms.TextBox(); this.lblTinyPicPassword = new System.Windows.Forms.Label(); @@ -523,6 +548,7 @@ private void InitializeComponent() this.chPicasaName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.chPicasaDescription = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.btnPicasaRefreshAlbumList = new System.Windows.Forms.Button(); + this.oauth2Picasa = new ShareX.UploadersLib.OAuthControl(); this.tpChevereto = new System.Windows.Forms.TabPage(); this.btnCheveretoTestAll = new System.Windows.Forms.Button(); this.lblCheveretoUploadURLExample = new System.Windows.Forms.Label(); @@ -545,24 +571,6 @@ private void InitializeComponent() this.tcUploaders = new System.Windows.Forms.TabControl(); this.lblWidthHint = new System.Windows.Forms.Label(); this.ttlvMain = new ShareX.HelpersLib.TabToListView(); - this.atcImgurAccountType = new ShareX.UploadersLib.AccountTypeControl(); - this.oauth2Imgur = new ShareX.UploadersLib.OAuthControl(); - this.atcTinyPicAccountType = new ShareX.UploadersLib.AccountTypeControl(); - this.oauth2Picasa = new ShareX.UploadersLib.OAuthControl(); - this.oAuth2Gist = new ShareX.UploadersLib.OAuthControl(); - this.atcGistAccountType = new ShareX.UploadersLib.AccountTypeControl(); - this.ucFTPAccounts = new ShareX.UploadersLib.AccountsControl(); - this.oauth2Dropbox = new ShareX.UploadersLib.OAuthControl(); - this.oAuth2OneDrive = new ShareX.UploadersLib.OAuthControl(); - this.oauth2GoogleDrive = new ShareX.UploadersLib.OAuthControl(); - this.oauth2Box = new ShareX.UploadersLib.OAuthControl(); - this.atcSendSpaceAccountType = new ShareX.UploadersLib.AccountTypeControl(); - this.oAuthJira = new ShareX.UploadersLib.OAuthControl(); - this.oauthTwitter = new ShareX.UploadersLib.OAuthControl(); - this.oauth2Bitly = new ShareX.UploadersLib.OAuthControl(); - this.oauth2GoogleURLShortener = new ShareX.UploadersLib.OAuthControl(); - this.atcGoogleURLShortenerAccountType = new ShareX.UploadersLib.AccountTypeControl(); - this.ucLocalhostAccounts = new ShareX.UploadersLib.AccountsControl(); this.actRapidShareAccountType = new ShareX.UploadersLib.AccountTypeControl(); this.tpOtherUploaders.SuspendLayout(); this.tcOtherUploaders.SuspendLayout(); @@ -595,6 +603,7 @@ private void InitializeComponent() ((System.ComponentModel.ISupportInitialize)(this.pbPuush)).BeginInit(); this.tpBox.SuspendLayout(); this.tpAmazonS3.SuspendLayout(); + this.tpAzureStorage.SuspendLayout(); this.tpMega.SuspendLayout(); this.tpOwnCloud.SuspendLayout(); this.tpMediaFire.SuspendLayout(); @@ -681,6 +690,20 @@ private void InitializeComponent() this.cbAmazonS3CustomCNAME.UseVisualStyleBackColor = true; this.cbAmazonS3CustomCNAME.CheckedChanged += new System.EventHandler(this.cbAmazonS3CustomCNAME_CheckedChanged); // + // mbCustomUploaderDestinationType + // + resources.ApplyResources(this.mbCustomUploaderDestinationType, "mbCustomUploaderDestinationType"); + this.mbCustomUploaderDestinationType.Menu = this.cmsCustomUploaderDestinationType; + this.mbCustomUploaderDestinationType.Name = "mbCustomUploaderDestinationType"; + this.ttHelpTip.SetToolTip(this.mbCustomUploaderDestinationType, resources.GetString("mbCustomUploaderDestinationType.ToolTip")); + this.mbCustomUploaderDestinationType.UseVisualStyleBackColor = true; + // + // cmsCustomUploaderDestinationType + // + this.cmsCustomUploaderDestinationType.ImageScalingSize = new System.Drawing.Size(24, 24); + this.cmsCustomUploaderDestinationType.Name = "cmsCustomUploaderDestinationType"; + resources.ApplyResources(this.cmsCustomUploaderDestinationType, "cmsCustomUploaderDestinationType"); + // // tpOtherUploaders // this.tpOtherUploaders.Controls.Add(this.tcOtherUploaders); @@ -744,6 +767,15 @@ private void InitializeComponent() this.cbTwitterSkipMessageBox.UseVisualStyleBackColor = true; this.cbTwitterSkipMessageBox.CheckedChanged += new System.EventHandler(this.cbTwitterSkipMessageBox_CheckedChanged); // + // oauthTwitter + // + resources.ApplyResources(this.oauthTwitter, "oauthTwitter"); + this.oauthTwitter.IsRefreshable = false; + this.oauthTwitter.Name = "oauthTwitter"; + this.oauthTwitter.OpenButtonClicked += new ShareX.UploadersLib.OAuthControl.OpenButtonClickedEventHandler(this.oauthTwitter_OpenButtonClicked); + this.oauthTwitter.CompleteButtonClicked += new ShareX.UploadersLib.OAuthControl.CompleteButtonClickedEventHandler(this.oauthTwitter_CompleteButtonClicked); + this.oauthTwitter.ClearButtonClicked += new ShareX.UploadersLib.OAuthControl.ClearButtonclickedEventHandler(this.oauthTwitter_ClearButtonClicked); + // // txtTwitterDescription // resources.ApplyResources(this.txtTwitterDescription, "txtTwitterDescription"); @@ -1227,19 +1259,6 @@ private void InitializeComponent() this.gbCustomUploaders.Name = "gbCustomUploaders"; this.gbCustomUploaders.TabStop = false; // - // mbCustomUploaderDestinationType - // - resources.ApplyResources(this.mbCustomUploaderDestinationType, "mbCustomUploaderDestinationType"); - this.mbCustomUploaderDestinationType.Menu = this.cmsCustomUploaderDestinationType; - this.mbCustomUploaderDestinationType.Name = "mbCustomUploaderDestinationType"; - this.ttHelpTip.SetToolTip(this.mbCustomUploaderDestinationType, resources.GetString("mbCustomUploaderDestinationType.ToolTip")); - this.mbCustomUploaderDestinationType.UseVisualStyleBackColor = true; - // - // cmsCustomUploaderDestinationType - // - this.cmsCustomUploaderDestinationType.Name = "cmsCustomUploaderDestinationType"; - resources.ApplyResources(this.cmsCustomUploaderDestinationType, "cmsCustomUploaderDestinationType"); - // // btnCustomUploadersExportAll // resources.ApplyResources(this.btnCustomUploadersExportAll, "btnCustomUploadersExportAll"); @@ -1444,6 +1463,15 @@ private void InitializeComponent() resources.ApplyResources(this.lblBitlyDomain, "lblBitlyDomain"); this.lblBitlyDomain.Name = "lblBitlyDomain"; // + // oauth2Bitly + // + this.oauth2Bitly.IsRefreshable = false; + resources.ApplyResources(this.oauth2Bitly, "oauth2Bitly"); + this.oauth2Bitly.Name = "oauth2Bitly"; + this.oauth2Bitly.OpenButtonClicked += new ShareX.UploadersLib.OAuthControl.OpenButtonClickedEventHandler(this.oauth2Bitly_OpenButtonClicked); + this.oauth2Bitly.CompleteButtonClicked += new ShareX.UploadersLib.OAuthControl.CompleteButtonClickedEventHandler(this.oauth2Bitly_CompleteButtonClicked); + this.oauth2Bitly.ClearButtonClicked += new ShareX.UploadersLib.OAuthControl.ClearButtonclickedEventHandler(this.oauth2Bitly_ClearButtonClicked); + // // tpGoogleURLShortener // this.tpGoogleURLShortener.Controls.Add(this.oauth2GoogleURLShortener); @@ -1452,6 +1480,22 @@ private void InitializeComponent() this.tpGoogleURLShortener.Name = "tpGoogleURLShortener"; this.tpGoogleURLShortener.UseVisualStyleBackColor = true; // + // oauth2GoogleURLShortener + // + resources.ApplyResources(this.oauth2GoogleURLShortener, "oauth2GoogleURLShortener"); + this.oauth2GoogleURLShortener.Name = "oauth2GoogleURLShortener"; + this.oauth2GoogleURLShortener.OpenButtonClicked += new ShareX.UploadersLib.OAuthControl.OpenButtonClickedEventHandler(this.oauth2GoogleURLShortener_OpenButtonClicked); + this.oauth2GoogleURLShortener.CompleteButtonClicked += new ShareX.UploadersLib.OAuthControl.CompleteButtonClickedEventHandler(this.oauth2GoogleURLShortener_CompleteButtonClicked); + this.oauth2GoogleURLShortener.ClearButtonClicked += new ShareX.UploadersLib.OAuthControl.ClearButtonclickedEventHandler(this.oauth2GoogleURLShortener_ClearButtonClicked); + this.oauth2GoogleURLShortener.RefreshButtonClicked += new ShareX.UploadersLib.OAuthControl.RefreshButtonClickedEventHandler(this.oauth2GoogleURLShortener_RefreshButtonClicked); + // + // atcGoogleURLShortenerAccountType + // + resources.ApplyResources(this.atcGoogleURLShortenerAccountType, "atcGoogleURLShortenerAccountType"); + this.atcGoogleURLShortenerAccountType.Name = "atcGoogleURLShortenerAccountType"; + this.atcGoogleURLShortenerAccountType.SelectedAccountType = ShareX.UploadersLib.AccountType.Anonymous; + this.atcGoogleURLShortenerAccountType.AccountTypeChanged += new ShareX.UploadersLib.AccountTypeControl.AccountTypeChangedEventHandler(this.atcGoogleURLShortenerAccountType_AccountTypeChanged); + // // tpYourls // this.tpYourls.Controls.Add(this.txtYourlsPassword); @@ -1643,6 +1687,7 @@ private void InitializeComponent() this.tcFileUploaders.Controls.Add(this.tpPuush); this.tcFileUploaders.Controls.Add(this.tpBox); this.tcFileUploaders.Controls.Add(this.tpAmazonS3); + this.tcFileUploaders.Controls.Add(this.tpAzureStorage); this.tcFileUploaders.Controls.Add(this.tpMega); this.tcFileUploaders.Controls.Add(this.tpOwnCloud); this.tcFileUploaders.Controls.Add(this.tpMediaFire); @@ -1735,6 +1780,11 @@ private void InitializeComponent() this.cboFtpText.Name = "cboFtpText"; this.cboFtpText.SelectedIndexChanged += new System.EventHandler(this.cboFtpText_SelectedIndexChanged); // + // ucFTPAccounts + // + resources.ApplyResources(this.ucFTPAccounts, "ucFTPAccounts"); + this.ucFTPAccounts.Name = "ucFTPAccounts"; + // // tpDropbox // this.tpDropbox.Controls.Add(this.oauth2Dropbox); @@ -1749,6 +1799,15 @@ private void InitializeComponent() this.tpDropbox.Name = "tpDropbox"; this.tpDropbox.UseVisualStyleBackColor = true; // + // oauth2Dropbox + // + this.oauth2Dropbox.IsRefreshable = false; + resources.ApplyResources(this.oauth2Dropbox, "oauth2Dropbox"); + this.oauth2Dropbox.Name = "oauth2Dropbox"; + this.oauth2Dropbox.OpenButtonClicked += new ShareX.UploadersLib.OAuthControl.OpenButtonClickedEventHandler(this.oauth2Dropbox_OpenButtonClicked); + this.oauth2Dropbox.CompleteButtonClicked += new ShareX.UploadersLib.OAuthControl.CompleteButtonClickedEventHandler(this.oauth2Dropbox_CompleteButtonClicked); + this.oauth2Dropbox.ClearButtonClicked += new ShareX.UploadersLib.OAuthControl.ClearButtonclickedEventHandler(this.oauth2Dropbox_ClearButtonClicked); + // // cbDropboxURLType // this.cbDropboxURLType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; @@ -1822,6 +1881,15 @@ private void InitializeComponent() this.cbOneDriveCreateShareableLink.UseVisualStyleBackColor = true; this.cbOneDriveCreateShareableLink.CheckedChanged += new System.EventHandler(this.cbOneDriveCreateShareableLink_CheckedChanged); // + // oAuth2OneDrive + // + resources.ApplyResources(this.oAuth2OneDrive, "oAuth2OneDrive"); + this.oAuth2OneDrive.Name = "oAuth2OneDrive"; + this.oAuth2OneDrive.OpenButtonClicked += new ShareX.UploadersLib.OAuthControl.OpenButtonClickedEventHandler(this.oAuth2OneDrive_OpenButtonClicked); + this.oAuth2OneDrive.CompleteButtonClicked += new ShareX.UploadersLib.OAuthControl.CompleteButtonClickedEventHandler(this.oAuth2OneDrive_CompleteButtonClicked); + this.oAuth2OneDrive.ClearButtonClicked += new ShareX.UploadersLib.OAuthControl.ClearButtonclickedEventHandler(this.oAuth2OneDrive_ClearButtonClicked); + this.oAuth2OneDrive.RefreshButtonClicked += new ShareX.UploadersLib.OAuthControl.RefreshButtonClickedEventHandler(this.oAuth2OneDrive_RefreshButtonClicked); + // // tpGoogleDrive // this.tpGoogleDrive.Controls.Add(this.cbGoogleDriveDirectLink); @@ -1897,6 +1965,15 @@ private void InitializeComponent() this.cbGoogleDriveIsPublic.UseVisualStyleBackColor = true; this.cbGoogleDriveIsPublic.CheckedChanged += new System.EventHandler(this.cbGoogleDriveIsPublic_CheckedChanged); // + // oauth2GoogleDrive + // + resources.ApplyResources(this.oauth2GoogleDrive, "oauth2GoogleDrive"); + this.oauth2GoogleDrive.Name = "oauth2GoogleDrive"; + this.oauth2GoogleDrive.OpenButtonClicked += new ShareX.UploadersLib.OAuthControl.OpenButtonClickedEventHandler(this.oauth2GoogleDrive_OpenButtonClicked); + this.oauth2GoogleDrive.CompleteButtonClicked += new ShareX.UploadersLib.OAuthControl.CompleteButtonClickedEventHandler(this.oauth2GoogleDrive_CompleteButtonClicked); + this.oauth2GoogleDrive.ClearButtonClicked += new ShareX.UploadersLib.OAuthControl.ClearButtonclickedEventHandler(this.oauth2GoogleDrive_ClearButtonClicked); + this.oauth2GoogleDrive.RefreshButtonClicked += new ShareX.UploadersLib.OAuthControl.RefreshButtonClickedEventHandler(this.oauth2GoogleDrive_RefreshButtonClicked); + // // tpPuush // this.tpPuush.Controls.Add(this.pbPuush); @@ -2029,6 +2106,15 @@ private void InitializeComponent() this.btnBoxRefreshFolders.UseVisualStyleBackColor = true; this.btnBoxRefreshFolders.Click += new System.EventHandler(this.btnBoxRefreshFolders_Click); // + // oauth2Box + // + resources.ApplyResources(this.oauth2Box, "oauth2Box"); + this.oauth2Box.Name = "oauth2Box"; + this.oauth2Box.OpenButtonClicked += new ShareX.UploadersLib.OAuthControl.OpenButtonClickedEventHandler(this.oauth2Box_OpenButtonClicked); + this.oauth2Box.CompleteButtonClicked += new ShareX.UploadersLib.OAuthControl.CompleteButtonClickedEventHandler(this.oauth2Box_CompleteButtonClicked); + this.oauth2Box.ClearButtonClicked += new ShareX.UploadersLib.OAuthControl.ClearButtonclickedEventHandler(this.oauth2Box_ClearButtonClicked); + this.oauth2Box.RefreshButtonClicked += new ShareX.UploadersLib.OAuthControl.RefreshButtonClickedEventHandler(this.oauth2Box_RefreshButtonClicked); + // // tpAmazonS3 // this.tpAmazonS3.Controls.Add(this.txtAmazonS3CustomDomain); @@ -2140,6 +2226,60 @@ private void InitializeComponent() this.txtAmazonS3AccessKey.Name = "txtAmazonS3AccessKey"; this.txtAmazonS3AccessKey.TextChanged += new System.EventHandler(this.txtAmazonS3AccessKey_TextChanged); // + // tpAzureStorage + // + this.tpAzureStorage.Controls.Add(this.btnAzureStoragePortal); + this.tpAzureStorage.Controls.Add(this.txtAzureStorageContainer); + this.tpAzureStorage.Controls.Add(this.lblAzureStorageContainer); + this.tpAzureStorage.Controls.Add(this.txtAzureStorageAccessKey); + this.tpAzureStorage.Controls.Add(this.lblAzureStorageAccessKey); + this.tpAzureStorage.Controls.Add(this.txtAzureStorageAccountName); + this.tpAzureStorage.Controls.Add(this.lblAzureStorageAccountName); + resources.ApplyResources(this.tpAzureStorage, "tpAzureStorage"); + this.tpAzureStorage.Name = "tpAzureStorage"; + this.tpAzureStorage.UseVisualStyleBackColor = true; + // + // btnAzureStoragePortal + // + resources.ApplyResources(this.btnAzureStoragePortal, "btnAzureStoragePortal"); + this.btnAzureStoragePortal.Name = "btnAzureStoragePortal"; + this.btnAzureStoragePortal.UseVisualStyleBackColor = true; + this.btnAzureStoragePortal.Click += new System.EventHandler(this.btnAzureStoragePortal_Click); + // + // txtAzureStorageContainer + // + resources.ApplyResources(this.txtAzureStorageContainer, "txtAzureStorageContainer"); + this.txtAzureStorageContainer.Name = "txtAzureStorageContainer"; + this.txtAzureStorageContainer.TextChanged += new System.EventHandler(this.txtAzureStorageContainer_TextChanged); + // + // lblAzureStorageContainer + // + resources.ApplyResources(this.lblAzureStorageContainer, "lblAzureStorageContainer"); + this.lblAzureStorageContainer.Name = "lblAzureStorageContainer"; + // + // txtAzureStorageAccessKey + // + resources.ApplyResources(this.txtAzureStorageAccessKey, "txtAzureStorageAccessKey"); + this.txtAzureStorageAccessKey.Name = "txtAzureStorageAccessKey"; + this.txtAzureStorageAccessKey.UseSystemPasswordChar = true; + this.txtAzureStorageAccessKey.TextChanged += new System.EventHandler(this.txtAzureStorageAccessKey_TextChanged); + // + // lblAzureStorageAccessKey + // + resources.ApplyResources(this.lblAzureStorageAccessKey, "lblAzureStorageAccessKey"); + this.lblAzureStorageAccessKey.Name = "lblAzureStorageAccessKey"; + // + // txtAzureStorageAccountName + // + resources.ApplyResources(this.txtAzureStorageAccountName, "txtAzureStorageAccountName"); + this.txtAzureStorageAccountName.Name = "txtAzureStorageAccountName"; + this.txtAzureStorageAccountName.TextChanged += new System.EventHandler(this.txtAzureStorageAccountName_TextChanged); + // + // lblAzureStorageAccountName + // + resources.ApplyResources(this.lblAzureStorageAccountName, "lblAzureStorageAccountName"); + this.lblAzureStorageAccountName.Name = "lblAzureStorageAccountName"; + // // tpMega // this.tpMega.Controls.Add(this.btnMegaRefreshFolders); @@ -2452,6 +2592,13 @@ private void InitializeComponent() this.txtSendSpaceUserName.Name = "txtSendSpaceUserName"; this.txtSendSpaceUserName.TextChanged += new System.EventHandler(this.txtSendSpaceUserName_TextChanged); // + // atcSendSpaceAccountType + // + resources.ApplyResources(this.atcSendSpaceAccountType, "atcSendSpaceAccountType"); + this.atcSendSpaceAccountType.Name = "atcSendSpaceAccountType"; + this.atcSendSpaceAccountType.SelectedAccountType = ShareX.UploadersLib.AccountType.Anonymous; + this.atcSendSpaceAccountType.AccountTypeChanged += new ShareX.UploadersLib.AccountTypeControl.AccountTypeChangedEventHandler(this.atcSendSpaceAccountType_AccountTypeChanged); + // // tpGe_tt // this.tpGe_tt.Controls.Add(this.lblGe_ttStatus); @@ -2707,6 +2854,15 @@ private void InitializeComponent() resources.ApplyResources(this.lblJiraHost, "lblJiraHost"); this.lblJiraHost.Name = "lblJiraHost"; // + // oAuthJira + // + resources.ApplyResources(this.oAuthJira, "oAuthJira"); + this.oAuthJira.Name = "oAuthJira"; + this.oAuthJira.OpenButtonClicked += new ShareX.UploadersLib.OAuthControl.OpenButtonClickedEventHandler(this.oAuthJira_OpenButtonClicked); + this.oAuthJira.CompleteButtonClicked += new ShareX.UploadersLib.OAuthControl.CompleteButtonClickedEventHandler(this.oAuthJira_CompleteButtonClicked); + this.oAuthJira.ClearButtonClicked += new ShareX.UploadersLib.OAuthControl.ClearButtonclickedEventHandler(this.oAuthJira_ClearButtonClicked); + this.oAuthJira.RefreshButtonClicked += new ShareX.UploadersLib.OAuthControl.RefreshButtonClickedEventHandler(this.oAuthJira_RefreshButtonClicked); + // // tpLambda // this.tpLambda.Controls.Add(this.lblLambdaInfo); @@ -3333,6 +3489,11 @@ private void InitializeComponent() this.cboSharedFolderImages.Name = "cboSharedFolderImages"; this.cboSharedFolderImages.SelectedIndexChanged += new System.EventHandler(this.cboSharedFolderImages_SelectedIndexChanged); // + // ucLocalhostAccounts + // + resources.ApplyResources(this.ucLocalhostAccounts, "ucLocalhostAccounts"); + this.ucLocalhostAccounts.Name = "ucLocalhostAccounts"; + // // tpEmail // this.tpEmail.Controls.Add(this.txtEmailAutomaticSendTo); @@ -3641,6 +3802,22 @@ private void InitializeComponent() this.cbGistPublishPublic.UseVisualStyleBackColor = true; this.cbGistPublishPublic.CheckedChanged += new System.EventHandler(this.chkGistPublishPublic_CheckedChanged); // + // oAuth2Gist + // + resources.ApplyResources(this.oAuth2Gist, "oAuth2Gist"); + this.oAuth2Gist.IsRefreshable = false; + this.oAuth2Gist.Name = "oAuth2Gist"; + this.oAuth2Gist.OpenButtonClicked += new ShareX.UploadersLib.OAuthControl.OpenButtonClickedEventHandler(this.oAuth2Gist_OpenButtonClicked); + this.oAuth2Gist.CompleteButtonClicked += new ShareX.UploadersLib.OAuthControl.CompleteButtonClickedEventHandler(this.oAuth2Gist_CompleteButtonClicked); + this.oAuth2Gist.ClearButtonClicked += new ShareX.UploadersLib.OAuthControl.ClearButtonclickedEventHandler(this.oAuth2Gist_ClearButtonClicked); + // + // atcGistAccountType + // + resources.ApplyResources(this.atcGistAccountType, "atcGistAccountType"); + this.atcGistAccountType.Name = "atcGistAccountType"; + this.atcGistAccountType.SelectedAccountType = ShareX.UploadersLib.AccountType.Anonymous; + this.atcGistAccountType.AccountTypeChanged += new ShareX.UploadersLib.AccountTypeControl.AccountTypeChangedEventHandler(this.atcGistAccountType_AccountTypeChanged); + // // tpUpaste // this.tpUpaste.Controls.Add(this.cbUpasteIsPublic); @@ -3822,6 +3999,22 @@ private void InitializeComponent() this.cbImgurDirectLink.UseVisualStyleBackColor = true; this.cbImgurDirectLink.CheckedChanged += new System.EventHandler(this.cbImgurDirectLink_CheckedChanged); // + // atcImgurAccountType + // + resources.ApplyResources(this.atcImgurAccountType, "atcImgurAccountType"); + this.atcImgurAccountType.Name = "atcImgurAccountType"; + this.atcImgurAccountType.SelectedAccountType = ShareX.UploadersLib.AccountType.Anonymous; + this.atcImgurAccountType.AccountTypeChanged += new ShareX.UploadersLib.AccountTypeControl.AccountTypeChangedEventHandler(this.atcImgurAccountType_AccountTypeChanged); + // + // oauth2Imgur + // + resources.ApplyResources(this.oauth2Imgur, "oauth2Imgur"); + this.oauth2Imgur.Name = "oauth2Imgur"; + this.oauth2Imgur.OpenButtonClicked += new ShareX.UploadersLib.OAuthControl.OpenButtonClickedEventHandler(this.oauth2Imgur_OpenButtonClicked); + this.oauth2Imgur.CompleteButtonClicked += new ShareX.UploadersLib.OAuthControl.CompleteButtonClickedEventHandler(this.oauth2Imgur_CompleteButtonClicked); + this.oauth2Imgur.ClearButtonClicked += new ShareX.UploadersLib.OAuthControl.ClearButtonclickedEventHandler(this.oauth2Imgur_ClearButtonClicked); + this.oauth2Imgur.RefreshButtonClicked += new ShareX.UploadersLib.OAuthControl.RefreshButtonClickedEventHandler(this.oauth2Imgur_RefreshButtonClicked); + // // lvImgurAlbumList // this.lvImgurAlbumList.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { @@ -3948,6 +4141,13 @@ private void InitializeComponent() this.tpTinyPic.Name = "tpTinyPic"; this.tpTinyPic.UseVisualStyleBackColor = true; // + // atcTinyPicAccountType + // + resources.ApplyResources(this.atcTinyPicAccountType, "atcTinyPicAccountType"); + this.atcTinyPicAccountType.Name = "atcTinyPicAccountType"; + this.atcTinyPicAccountType.SelectedAccountType = ShareX.UploadersLib.AccountType.Anonymous; + this.atcTinyPicAccountType.AccountTypeChanged += new ShareX.UploadersLib.AccountTypeControl.AccountTypeChangedEventHandler(this.atcTinyPicAccountType_AccountTypeChanged); + // // btnTinyPicLogin // resources.ApplyResources(this.btnTinyPicLogin, "btnTinyPicLogin"); @@ -4008,6 +4208,7 @@ private void InitializeComponent() // this.pgFlickrAuthInfo.CategoryForeColor = System.Drawing.SystemColors.InactiveCaptionText; this.pgFlickrAuthInfo.CommandsVisibleIfAvailable = false; + this.pgFlickrAuthInfo.LineColor = System.Drawing.SystemColors.ControlDark; resources.ApplyResources(this.pgFlickrAuthInfo, "pgFlickrAuthInfo"); this.pgFlickrAuthInfo.Name = "pgFlickrAuthInfo"; this.pgFlickrAuthInfo.PropertySort = System.Windows.Forms.PropertySort.NoSort; @@ -4017,6 +4218,7 @@ private void InitializeComponent() // this.pgFlickrSettings.CategoryForeColor = System.Drawing.SystemColors.InactiveCaptionText; this.pgFlickrSettings.CommandsVisibleIfAvailable = false; + this.pgFlickrSettings.LineColor = System.Drawing.SystemColors.ControlDark; resources.ApplyResources(this.pgFlickrSettings, "pgFlickrSettings"); this.pgFlickrSettings.Name = "pgFlickrSettings"; this.pgFlickrSettings.PropertySort = System.Windows.Forms.PropertySort.NoSort; @@ -4228,6 +4430,15 @@ private void InitializeComponent() this.btnPicasaRefreshAlbumList.UseVisualStyleBackColor = true; this.btnPicasaRefreshAlbumList.Click += new System.EventHandler(this.btnPicasaRefreshAlbumList_Click); // + // oauth2Picasa + // + resources.ApplyResources(this.oauth2Picasa, "oauth2Picasa"); + this.oauth2Picasa.Name = "oauth2Picasa"; + this.oauth2Picasa.OpenButtonClicked += new ShareX.UploadersLib.OAuthControl.OpenButtonClickedEventHandler(this.oauth2Picasa_OpenButtonClicked); + this.oauth2Picasa.CompleteButtonClicked += new ShareX.UploadersLib.OAuthControl.CompleteButtonClickedEventHandler(this.oauth2Picasa_CompleteButtonClicked); + this.oauth2Picasa.ClearButtonClicked += new ShareX.UploadersLib.OAuthControl.ClearButtonclickedEventHandler(this.oauth2Picasa_ClearButtonClicked); + this.oauth2Picasa.RefreshButtonClicked += new ShareX.UploadersLib.OAuthControl.RefreshButtonClickedEventHandler(this.oauth2Picasa_RefreshButtonClicked); + // // tpChevereto // this.tpChevereto.Controls.Add(this.btnCheveretoTestAll); @@ -4384,150 +4595,6 @@ private void InitializeComponent() this.ttlvMain.MainTabControl = null; this.ttlvMain.Name = "ttlvMain"; // - // atcImgurAccountType - // - resources.ApplyResources(this.atcImgurAccountType, "atcImgurAccountType"); - this.atcImgurAccountType.Name = "atcImgurAccountType"; - this.atcImgurAccountType.SelectedAccountType = ShareX.UploadersLib.AccountType.Anonymous; - this.atcImgurAccountType.AccountTypeChanged += new ShareX.UploadersLib.AccountTypeControl.AccountTypeChangedEventHandler(this.atcImgurAccountType_AccountTypeChanged); - // - // oauth2Imgur - // - resources.ApplyResources(this.oauth2Imgur, "oauth2Imgur"); - this.oauth2Imgur.Name = "oauth2Imgur"; - this.oauth2Imgur.OpenButtonClicked += new ShareX.UploadersLib.OAuthControl.OpenButtonClickedEventHandler(this.oauth2Imgur_OpenButtonClicked); - this.oauth2Imgur.CompleteButtonClicked += new ShareX.UploadersLib.OAuthControl.CompleteButtonClickedEventHandler(this.oauth2Imgur_CompleteButtonClicked); - this.oauth2Imgur.ClearButtonClicked += new ShareX.UploadersLib.OAuthControl.ClearButtonclickedEventHandler(this.oauth2Imgur_ClearButtonClicked); - this.oauth2Imgur.RefreshButtonClicked += new ShareX.UploadersLib.OAuthControl.RefreshButtonClickedEventHandler(this.oauth2Imgur_RefreshButtonClicked); - // - // atcTinyPicAccountType - // - resources.ApplyResources(this.atcTinyPicAccountType, "atcTinyPicAccountType"); - this.atcTinyPicAccountType.Name = "atcTinyPicAccountType"; - this.atcTinyPicAccountType.SelectedAccountType = ShareX.UploadersLib.AccountType.Anonymous; - this.atcTinyPicAccountType.AccountTypeChanged += new ShareX.UploadersLib.AccountTypeControl.AccountTypeChangedEventHandler(this.atcTinyPicAccountType_AccountTypeChanged); - // - // oauth2Picasa - // - resources.ApplyResources(this.oauth2Picasa, "oauth2Picasa"); - this.oauth2Picasa.Name = "oauth2Picasa"; - this.oauth2Picasa.OpenButtonClicked += new ShareX.UploadersLib.OAuthControl.OpenButtonClickedEventHandler(this.oauth2Picasa_OpenButtonClicked); - this.oauth2Picasa.CompleteButtonClicked += new ShareX.UploadersLib.OAuthControl.CompleteButtonClickedEventHandler(this.oauth2Picasa_CompleteButtonClicked); - this.oauth2Picasa.ClearButtonClicked += new ShareX.UploadersLib.OAuthControl.ClearButtonclickedEventHandler(this.oauth2Picasa_ClearButtonClicked); - this.oauth2Picasa.RefreshButtonClicked += new ShareX.UploadersLib.OAuthControl.RefreshButtonClickedEventHandler(this.oauth2Picasa_RefreshButtonClicked); - // - // oAuth2Gist - // - resources.ApplyResources(this.oAuth2Gist, "oAuth2Gist"); - this.oAuth2Gist.IsRefreshable = false; - this.oAuth2Gist.Name = "oAuth2Gist"; - this.oAuth2Gist.OpenButtonClicked += new ShareX.UploadersLib.OAuthControl.OpenButtonClickedEventHandler(this.oAuth2Gist_OpenButtonClicked); - this.oAuth2Gist.CompleteButtonClicked += new ShareX.UploadersLib.OAuthControl.CompleteButtonClickedEventHandler(this.oAuth2Gist_CompleteButtonClicked); - this.oAuth2Gist.ClearButtonClicked += new ShareX.UploadersLib.OAuthControl.ClearButtonclickedEventHandler(this.oAuth2Gist_ClearButtonClicked); - // - // atcGistAccountType - // - resources.ApplyResources(this.atcGistAccountType, "atcGistAccountType"); - this.atcGistAccountType.Name = "atcGistAccountType"; - this.atcGistAccountType.SelectedAccountType = ShareX.UploadersLib.AccountType.Anonymous; - this.atcGistAccountType.AccountTypeChanged += new ShareX.UploadersLib.AccountTypeControl.AccountTypeChangedEventHandler(this.atcGistAccountType_AccountTypeChanged); - // - // ucFTPAccounts - // - resources.ApplyResources(this.ucFTPAccounts, "ucFTPAccounts"); - this.ucFTPAccounts.Name = "ucFTPAccounts"; - // - // oauth2Dropbox - // - this.oauth2Dropbox.IsRefreshable = false; - resources.ApplyResources(this.oauth2Dropbox, "oauth2Dropbox"); - this.oauth2Dropbox.Name = "oauth2Dropbox"; - this.oauth2Dropbox.OpenButtonClicked += new ShareX.UploadersLib.OAuthControl.OpenButtonClickedEventHandler(this.oauth2Dropbox_OpenButtonClicked); - this.oauth2Dropbox.CompleteButtonClicked += new ShareX.UploadersLib.OAuthControl.CompleteButtonClickedEventHandler(this.oauth2Dropbox_CompleteButtonClicked); - this.oauth2Dropbox.ClearButtonClicked += new ShareX.UploadersLib.OAuthControl.ClearButtonclickedEventHandler(this.oauth2Dropbox_ClearButtonClicked); - // - // oAuth2OneDrive - // - resources.ApplyResources(this.oAuth2OneDrive, "oAuth2OneDrive"); - this.oAuth2OneDrive.Name = "oAuth2OneDrive"; - this.oAuth2OneDrive.OpenButtonClicked += new ShareX.UploadersLib.OAuthControl.OpenButtonClickedEventHandler(this.oAuth2OneDrive_OpenButtonClicked); - this.oAuth2OneDrive.CompleteButtonClicked += new ShareX.UploadersLib.OAuthControl.CompleteButtonClickedEventHandler(this.oAuth2OneDrive_CompleteButtonClicked); - this.oAuth2OneDrive.ClearButtonClicked += new ShareX.UploadersLib.OAuthControl.ClearButtonclickedEventHandler(this.oAuth2OneDrive_ClearButtonClicked); - this.oAuth2OneDrive.RefreshButtonClicked += new ShareX.UploadersLib.OAuthControl.RefreshButtonClickedEventHandler(this.oAuth2OneDrive_RefreshButtonClicked); - // - // oauth2GoogleDrive - // - resources.ApplyResources(this.oauth2GoogleDrive, "oauth2GoogleDrive"); - this.oauth2GoogleDrive.Name = "oauth2GoogleDrive"; - this.oauth2GoogleDrive.OpenButtonClicked += new ShareX.UploadersLib.OAuthControl.OpenButtonClickedEventHandler(this.oauth2GoogleDrive_OpenButtonClicked); - this.oauth2GoogleDrive.CompleteButtonClicked += new ShareX.UploadersLib.OAuthControl.CompleteButtonClickedEventHandler(this.oauth2GoogleDrive_CompleteButtonClicked); - this.oauth2GoogleDrive.ClearButtonClicked += new ShareX.UploadersLib.OAuthControl.ClearButtonclickedEventHandler(this.oauth2GoogleDrive_ClearButtonClicked); - this.oauth2GoogleDrive.RefreshButtonClicked += new ShareX.UploadersLib.OAuthControl.RefreshButtonClickedEventHandler(this.oauth2GoogleDrive_RefreshButtonClicked); - // - // oauth2Box - // - resources.ApplyResources(this.oauth2Box, "oauth2Box"); - this.oauth2Box.Name = "oauth2Box"; - this.oauth2Box.OpenButtonClicked += new ShareX.UploadersLib.OAuthControl.OpenButtonClickedEventHandler(this.oauth2Box_OpenButtonClicked); - this.oauth2Box.CompleteButtonClicked += new ShareX.UploadersLib.OAuthControl.CompleteButtonClickedEventHandler(this.oauth2Box_CompleteButtonClicked); - this.oauth2Box.ClearButtonClicked += new ShareX.UploadersLib.OAuthControl.ClearButtonclickedEventHandler(this.oauth2Box_ClearButtonClicked); - this.oauth2Box.RefreshButtonClicked += new ShareX.UploadersLib.OAuthControl.RefreshButtonClickedEventHandler(this.oauth2Box_RefreshButtonClicked); - // - // atcSendSpaceAccountType - // - resources.ApplyResources(this.atcSendSpaceAccountType, "atcSendSpaceAccountType"); - this.atcSendSpaceAccountType.Name = "atcSendSpaceAccountType"; - this.atcSendSpaceAccountType.SelectedAccountType = ShareX.UploadersLib.AccountType.Anonymous; - this.atcSendSpaceAccountType.AccountTypeChanged += new ShareX.UploadersLib.AccountTypeControl.AccountTypeChangedEventHandler(this.atcSendSpaceAccountType_AccountTypeChanged); - // - // oAuthJira - // - resources.ApplyResources(this.oAuthJira, "oAuthJira"); - this.oAuthJira.Name = "oAuthJira"; - this.oAuthJira.OpenButtonClicked += new ShareX.UploadersLib.OAuthControl.OpenButtonClickedEventHandler(this.oAuthJira_OpenButtonClicked); - this.oAuthJira.CompleteButtonClicked += new ShareX.UploadersLib.OAuthControl.CompleteButtonClickedEventHandler(this.oAuthJira_CompleteButtonClicked); - this.oAuthJira.ClearButtonClicked += new ShareX.UploadersLib.OAuthControl.ClearButtonclickedEventHandler(this.oAuthJira_ClearButtonClicked); - this.oAuthJira.RefreshButtonClicked += new ShareX.UploadersLib.OAuthControl.RefreshButtonClickedEventHandler(this.oAuthJira_RefreshButtonClicked); - // - // oauthTwitter - // - resources.ApplyResources(this.oauthTwitter, "oauthTwitter"); - this.oauthTwitter.IsRefreshable = false; - this.oauthTwitter.Name = "oauthTwitter"; - this.oauthTwitter.OpenButtonClicked += new ShareX.UploadersLib.OAuthControl.OpenButtonClickedEventHandler(this.oauthTwitter_OpenButtonClicked); - this.oauthTwitter.CompleteButtonClicked += new ShareX.UploadersLib.OAuthControl.CompleteButtonClickedEventHandler(this.oauthTwitter_CompleteButtonClicked); - this.oauthTwitter.ClearButtonClicked += new ShareX.UploadersLib.OAuthControl.ClearButtonclickedEventHandler(this.oauthTwitter_ClearButtonClicked); - // - // oauth2Bitly - // - this.oauth2Bitly.IsRefreshable = false; - resources.ApplyResources(this.oauth2Bitly, "oauth2Bitly"); - this.oauth2Bitly.Name = "oauth2Bitly"; - this.oauth2Bitly.OpenButtonClicked += new ShareX.UploadersLib.OAuthControl.OpenButtonClickedEventHandler(this.oauth2Bitly_OpenButtonClicked); - this.oauth2Bitly.CompleteButtonClicked += new ShareX.UploadersLib.OAuthControl.CompleteButtonClickedEventHandler(this.oauth2Bitly_CompleteButtonClicked); - this.oauth2Bitly.ClearButtonClicked += new ShareX.UploadersLib.OAuthControl.ClearButtonclickedEventHandler(this.oauth2Bitly_ClearButtonClicked); - // - // oauth2GoogleURLShortener - // - resources.ApplyResources(this.oauth2GoogleURLShortener, "oauth2GoogleURLShortener"); - this.oauth2GoogleURLShortener.Name = "oauth2GoogleURLShortener"; - this.oauth2GoogleURLShortener.OpenButtonClicked += new ShareX.UploadersLib.OAuthControl.OpenButtonClickedEventHandler(this.oauth2GoogleURLShortener_OpenButtonClicked); - this.oauth2GoogleURLShortener.CompleteButtonClicked += new ShareX.UploadersLib.OAuthControl.CompleteButtonClickedEventHandler(this.oauth2GoogleURLShortener_CompleteButtonClicked); - this.oauth2GoogleURLShortener.ClearButtonClicked += new ShareX.UploadersLib.OAuthControl.ClearButtonclickedEventHandler(this.oauth2GoogleURLShortener_ClearButtonClicked); - this.oauth2GoogleURLShortener.RefreshButtonClicked += new ShareX.UploadersLib.OAuthControl.RefreshButtonClickedEventHandler(this.oauth2GoogleURLShortener_RefreshButtonClicked); - // - // atcGoogleURLShortenerAccountType - // - resources.ApplyResources(this.atcGoogleURLShortenerAccountType, "atcGoogleURLShortenerAccountType"); - this.atcGoogleURLShortenerAccountType.Name = "atcGoogleURLShortenerAccountType"; - this.atcGoogleURLShortenerAccountType.SelectedAccountType = ShareX.UploadersLib.AccountType.Anonymous; - this.atcGoogleURLShortenerAccountType.AccountTypeChanged += new ShareX.UploadersLib.AccountTypeControl.AccountTypeChangedEventHandler(this.atcGoogleURLShortenerAccountType_AccountTypeChanged); - // - // ucLocalhostAccounts - // - resources.ApplyResources(this.ucLocalhostAccounts, "ucLocalhostAccounts"); - this.ucLocalhostAccounts.Name = "ucLocalhostAccounts"; - // // actRapidShareAccountType // resources.ApplyResources(this.actRapidShareAccountType, "actRapidShareAccountType"); @@ -4597,6 +4664,8 @@ private void InitializeComponent() this.tpBox.PerformLayout(); this.tpAmazonS3.ResumeLayout(false); this.tpAmazonS3.PerformLayout(); + this.tpAzureStorage.ResumeLayout(false); + this.tpAzureStorage.PerformLayout(); this.tpMega.ResumeLayout(false); this.tpMega.PerformLayout(); this.tpOwnCloud.ResumeLayout(false); @@ -5231,5 +5300,13 @@ private void InitializeComponent() private System.Windows.Forms.CheckBox cbPolrIsSecret; private HelpersLib.MenuButton mbCustomUploaderDestinationType; private System.Windows.Forms.ContextMenuStrip cmsCustomUploaderDestinationType; + internal System.Windows.Forms.TabPage tpAzureStorage; + private System.Windows.Forms.Label lblAzureStorageAccessKey; + private System.Windows.Forms.TextBox txtAzureStorageAccountName; + private System.Windows.Forms.Label lblAzureStorageAccountName; + private System.Windows.Forms.TextBox txtAzureStorageAccessKey; + private System.Windows.Forms.TextBox txtAzureStorageContainer; + private System.Windows.Forms.Label lblAzureStorageContainer; + private System.Windows.Forms.Button btnAzureStoragePortal; } } diff --git a/ShareX.UploadersLib/Forms/UploadersConfigForm.cs b/ShareX.UploadersLib/Forms/UploadersConfigForm.cs index 8e25f8501..6597665d2 100644 --- a/ShareX.UploadersLib/Forms/UploadersConfigForm.cs +++ b/ShareX.UploadersLib/Forms/UploadersConfigForm.cs @@ -590,6 +590,11 @@ public void LoadSettings() cbUpleaInstantDownloadEnabled.Checked = Config.UpleaInstantDownloadEnabled; cbUpleaIsPremium.Checked = Config.UpleaIsPremiumMember; + // Azure Storage + txtAzureStorageAccountName.Text = Config.AzureStorageAccountName; + txtAzureStorageAccessKey.Text = Config.AzureStorageAccountAccessKey; + txtAzureStorageContainer.Text = Config.AzureStorageContainer; + #endregion File uploaders #region URL shorteners @@ -2603,6 +2608,30 @@ private void cbUpleaInstantDownloadEnabled_CheckedChanged(object sender, EventAr #endregion Uplea + #region Azure Storage + + private void txtAzureStorageAccountName_TextChanged(object sender, EventArgs e) + { + Config.AzureStorageAccountName = txtAzureStorageAccountName.Text; + } + + private void txtAzureStorageAccessKey_TextChanged(object sender, EventArgs e) + { + Config.AzureStorageAccountAccessKey = txtAzureStorageAccessKey.Text; + } + + private void txtAzureStorageContainer_TextChanged(object sender, EventArgs e) + { + Config.AzureStorageContainer = txtAzureStorageContainer.Text; + } + + private void btnAzureStoragePortal_Click(object sender, EventArgs e) + { + URLHelpers.OpenURL("https://portal.azure.com/?feature.customportal=false#blade/HubsExtension/Resources/resourceType/Microsoft.Storage%2FStorageAccounts"); + } + + #endregion Azure Storage + #endregion File Uploaders #region URL Shorteners diff --git a/ShareX.UploadersLib/Forms/UploadersConfigForm.resx b/ShareX.UploadersLib/Forms/UploadersConfigForm.resx index 13454c9dd..570fec21e 100644 --- a/ShareX.UploadersLib/Forms/UploadersConfigForm.resx +++ b/ShareX.UploadersLib/Forms/UploadersConfigForm.resx @@ -207,6 +207,207 @@ For example, if your bucket is called bucket.example.com then URL will be http:/ 5 + + + 556, 48 + + + 40, 26 + + + 6 + + + ... + + + btnAzureStoragePortal + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tpAzureStorage + + + 0 + + + 24, 201 + + + 526, 26 + + + 5 + + + txtAzureStorageContainer + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tpAzureStorage + + + 1 + + + True + + + 20, 178 + + + 82, 20 + + + 4 + + + Container: + + + lblAzureStorageContainer + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tpAzureStorage + + + 2 + + + 24, 121 + + + 526, 26 + + + 3 + + + txtAzureStorageAccessKey + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tpAzureStorage + + + 3 + + + True + + + 20, 98 + + + 4, 0, 4, 0 + + + 93, 20 + + + 2 + + + Access key: + + + lblAzureStorageAccessKey + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tpAzureStorage + + + 4 + + + 24, 48 + + + 526, 26 + + + 1 + + + txtAzureStorageAccountName + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tpAzureStorage + + + 5 + + + True + + + 20, 25 + + + 4, 0, 4, 0 + + + 116, 20 + + + 0 + + + Account name: + + + lblAzureStorageAccountName + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tpAzureStorage + + + 6 + + + 4, 54 + + + 3, 3, 3, 3 + + + 1468, 746 + + + 28 + + + Azure Storage + + + tpAzureStorage + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tcFileUploaders + + + 7 NoControl diff --git a/ShareX.UploadersLib/Properties/Resources.Designer.cs b/ShareX.UploadersLib/Properties/Resources.Designer.cs index a8a8acfc8..006080193 100644 --- a/ShareX.UploadersLib/Properties/Resources.Designer.cs +++ b/ShareX.UploadersLib/Properties/Resources.Designer.cs @@ -80,6 +80,16 @@ internal static System.Drawing.Icon AmazonS3 { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap AzureStorage { + get { + object obj = ResourceManager.GetObject("AzureStorage", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). /// diff --git a/ShareX.UploadersLib/Properties/Resources.resx b/ShareX.UploadersLib/Properties/Resources.resx index bcd5890f4..4d0a2c4b0 100644 --- a/ShareX.UploadersLib/Properties/Resources.resx +++ b/ShareX.UploadersLib/Properties/Resources.resx @@ -398,4 +398,7 @@ Created folders: ..\Favicons\Pastie.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Favicons\AzureStorage.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/ShareX.UploadersLib/ShareX.UploadersLib.csproj b/ShareX.UploadersLib/ShareX.UploadersLib.csproj index af9cba24c..7df75dbcb 100644 --- a/ShareX.UploadersLib/ShareX.UploadersLib.csproj +++ b/ShareX.UploadersLib/ShareX.UploadersLib.csproj @@ -124,6 +124,8 @@ + + @@ -882,6 +884,7 @@ + diff --git a/ShareX.UploadersLib/UploadersConfig.cs b/ShareX.UploadersLib/UploadersConfig.cs index 00b28ecb8..81c88529b 100644 --- a/ShareX.UploadersLib/UploadersConfig.cs +++ b/ShareX.UploadersLib/UploadersConfig.cs @@ -298,6 +298,12 @@ public class UploadersConfig : SettingsBase public bool UpleaIsPremiumMember = false; public bool UpleaInstantDownloadEnabled = false; + // Azure Storage + + public string AzureStorageAccountName = ""; + public string AzureStorageAccountAccessKey = ""; + public string AzureStorageContainer = ""; + #endregion File uploaders #region URL shorteners