Merge pull request #3436 from Lego6245/master

Azure Storage Updates
This commit is contained in:
Jaex 2018-06-09 03:45:20 +03:00 committed by GitHub
commit b13e52500b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 187 additions and 27 deletions

View file

@ -51,7 +51,7 @@ public override bool CheckConfig(UploadersConfig config)
public override GenericUploader CreateUploader(UploadersConfig config, TaskReferenceHelper taskInfo)
{
return new AzureStorage(config.AzureStorageAccountName, config.AzureStorageAccountAccessKey, config.AzureStorageContainer, config.AzureStorageEnvironment, config.AzureStorageCustomDomain);
return new AzureStorage(config.AzureStorageAccountName, config.AzureStorageAccountAccessKey, config.AzureStorageContainer, config.AzureStorageEnvironment, config.AzureStorageCustomDomain, config.AzureStorageUploadPath, config.AzureStorageExcludeContainer);
}
public override TabPage GetUploadersConfigTabPage(UploadersConfigForm form) => form.tpAzureStorage;
@ -66,14 +66,18 @@ public sealed class AzureStorage : FileUploader
public string AzureStorageContainer { get; private set; }
public string AzureStorageEnvironment { get; private set; }
public string AzureStorageCustomDomain { get; private set; }
public string AzureStorageUploadPath { get; private set; }
public bool AzureStorageExcludeContainer { get; private set; }
public AzureStorage(string azureStorageAccountName, string azureStorageAccessKey, string azureStorageContainer, string azureStorageEnvironment, string customDomain)
public AzureStorage(string azureStorageAccountName, string azureStorageAccessKey, string azureStorageContainer, string azureStorageEnvironment, string customDomain, string uploadPath, bool excludeContainer)
{
AzureStorageAccountName = azureStorageAccountName;
AzureStorageAccountAccessKey = azureStorageAccessKey;
AzureStorageContainer = azureStorageContainer;
AzureStorageEnvironment = (!string.IsNullOrEmpty(azureStorageEnvironment)) ? azureStorageEnvironment : "blob.core.windows.net";
AzureStorageCustomDomain = customDomain;
AzureStorageUploadPath = uploadPath;
AzureStorageExcludeContainer = excludeContainer;
}
public override UploadResult Upload(Stream stream, string fileName)
@ -90,7 +94,16 @@ public override UploadResult Upload(Stream stream, string fileName)
CreateContainerIfNotExists();
string date = DateTime.UtcNow.ToString("R", CultureInfo.InvariantCulture);
string url = $"https://{AzureStorageAccountName}.{AzureStorageEnvironment}/{AzureStorageContainer}/{fileName}";
string targetPath = GetUploadPath(fileName);
string url;
if (AzureStorageContainer == "$root")
{
url = $"https://{AzureStorageAccountName}.{AzureStorageEnvironment}/{targetPath}";
}
else
{
url = $"https://{AzureStorageAccountName}.{AzureStorageEnvironment}/{AzureStorageContainer}/{targetPath}";
}
string contentType = Helpers.GetMimeType(fileName);
NameValueCollection requestHeaders = new NameValueCollection();
@ -99,7 +112,15 @@ public override UploadResult Upload(Stream stream, string fileName)
requestHeaders["x-ms-blob-type"] = "BlockBlob";
string canonicalizedHeaders = $"x-ms-blob-type:BlockBlob\nx-ms-date:{date}\nx-ms-version:{APIVersion}\n";
string canonicalizedResource = $"/{AzureStorageAccountName}/{AzureStorageContainer}/{fileName}";
string canonicalizedResource;
if (AzureStorageContainer == "$root")
{
canonicalizedResource = $"/{AzureStorageAccountName}/{targetPath}";
}
else
{
canonicalizedResource = $"/{AzureStorageAccountName}/{AzureStorageContainer}/{targetPath}";
}
string stringToSign = GenerateStringToSign(canonicalizedHeaders, canonicalizedResource, stream.Length.ToString(), contentType);
requestHeaders["Authorization"] = $"SharedKey {AzureStorageAccountName}:{stringToSign}";
@ -112,7 +133,14 @@ public override UploadResult Upload(Stream stream, string fileName)
if (!string.IsNullOrEmpty(AzureStorageCustomDomain))
{
result = URLHelpers.CombineURL(AzureStorageCustomDomain, AzureStorageContainer, fileName);
if (AzureStorageExcludeContainer)
{
result = URLHelpers.CombineURL(AzureStorageCustomDomain, targetPath);
}
else
{
result = URLHelpers.CombineURL(AzureStorageCustomDomain, AzureStorageContainer, targetPath);
}
result = URLHelpers.FixPrefix(result);
}
else
@ -224,5 +252,18 @@ private string HashRequest(string stringToSign)
return hashedString;
}
private string GetUploadPath(string fileName)
{
if (!String.IsNullOrEmpty(AzureStorageUploadPath))
{
string path = NameParser.Parse(NameParserType.FolderPath, AzureStorageUploadPath.Trim('/'));
return URLHelpers.CombineURL(path, fileName);
}
else
{
return fileName;
}
}
}
}

View file

@ -309,6 +309,9 @@ private void InitializeComponent()
this.txtGoogleCloudStorageBucket = new System.Windows.Forms.TextBox();
this.oauth2GoogleCloudStorage = new ShareX.UploadersLib.OAuthControl();
this.tpAzureStorage = new System.Windows.Forms.TabPage();
this.cbAzureStorageExcludeContainer = new System.Windows.Forms.CheckBox();
this.txtAzureStorageUploadPath = new System.Windows.Forms.TextBox();
this.lblAzureStorageUploadPath = new System.Windows.Forms.Label();
this.cbAzureStorageEnvironment = new System.Windows.Forms.ComboBox();
this.lblAzureStorageEnvironment = new System.Windows.Forms.Label();
this.btnAzureStoragePortal = new System.Windows.Forms.Button();
@ -2830,6 +2833,9 @@ private void InitializeComponent()
// tpAzureStorage
//
this.tpAzureStorage.BackColor = System.Drawing.SystemColors.Window;
this.tpAzureStorage.Controls.Add(this.cbAzureStorageExcludeContainer);
this.tpAzureStorage.Controls.Add(this.txtAzureStorageUploadPath);
this.tpAzureStorage.Controls.Add(this.lblAzureStorageUploadPath);
this.tpAzureStorage.Controls.Add(this.cbAzureStorageEnvironment);
this.tpAzureStorage.Controls.Add(this.lblAzureStorageEnvironment);
this.tpAzureStorage.Controls.Add(this.btnAzureStoragePortal);
@ -2844,6 +2850,24 @@ private void InitializeComponent()
resources.ApplyResources(this.tpAzureStorage, "tpAzureStorage");
this.tpAzureStorage.Name = "tpAzureStorage";
//
// cbAzureStorageExcludeContainer
//
resources.ApplyResources(this.cbAzureStorageExcludeContainer, "cbAzureStorageExcludeContainer");
this.cbAzureStorageExcludeContainer.Name = "cbAzureStorageExcludeContainer";
this.cbAzureStorageExcludeContainer.UseVisualStyleBackColor = true;
this.cbAzureStorageExcludeContainer.CheckedChanged += new System.EventHandler(this.cbAzureStorageExcludeContainer_CheckedChanged);
//
// txtAzureStorageUploadPath
//
resources.ApplyResources(this.txtAzureStorageUploadPath, "txtAzureStorageUploadPath");
this.txtAzureStorageUploadPath.Name = "txtAzureStorageUploadPath";
this.txtAzureStorageUploadPath.TextChanged += new System.EventHandler(this.txtAzureStorageUploadPath_TextChanged);
//
// lblAzureStorageUploadPath
//
resources.ApplyResources(this.lblAzureStorageUploadPath, "lblAzureStorageUploadPath");
this.lblAzureStorageUploadPath.Name = "lblAzureStorageUploadPath";
//
// cbAzureStorageEnvironment
//
this.cbAzureStorageEnvironment.FormattingEnabled = true;
@ -6082,6 +6106,9 @@ private void InitializeComponent()
private System.Windows.Forms.ListBox lbSharedFolderAccounts;
private System.Windows.Forms.Label lblGoogleCloudStoragePathPreviewLabel;
private System.Windows.Forms.Label lblGoogleCloudStoragePathPreview;
private System.Windows.Forms.TextBox txtAzureStorageUploadPath;
private System.Windows.Forms.Label lblAzureStorageUploadPath;
private System.Windows.Forms.CheckBox cbAzureStorageExcludeContainer;
private System.Windows.Forms.Label lblFirebaseDomain;
}
}

View file

@ -667,6 +667,8 @@ public void LoadSettings()
txtAzureStorageContainer.Text = Config.AzureStorageContainer;
cbAzureStorageEnvironment.Text = Config.AzureStorageEnvironment;
txtAzureStorageCustomDomain.Text = Config.AzureStorageCustomDomain;
txtAzureStorageUploadPath.Text = Config.AzureStorageUploadPath;
cbAzureStorageExcludeContainer.Checked = Config.AzureStorageExcludeContainer;
#endregion Azure Storage
@ -2870,6 +2872,16 @@ private void txtAzureStorageCustomDomain_TextChanged(object sender, EventArgs e)
Config.AzureStorageCustomDomain = txtAzureStorageCustomDomain.Text;
}
private void txtAzureStorageUploadPath_TextChanged(object sender, EventArgs e)
{
Config.AzureStorageUploadPath = txtAzureStorageUploadPath.Text;
}
private void cbAzureStorageExcludeContainer_CheckedChanged(object sender, EventArgs e)
{
Config.AzureStorageExcludeContainer = cbAzureStorageExcludeContainer.Checked;
}
private void btnAzureStoragePortal_Click(object sender, EventArgs e)
{
URLHelpers.OpenURL("https://portal.azure.com/?feature.customportal=false#blade/HubsExtension/Resources/resourceType/Microsoft.Storage%2FStorageAccounts");

View file

@ -3537,7 +3537,7 @@ store.book[0].title</value>
<value>3, 3, 3, 3</value>
</data>
<data name="tpFirebaseDynamicLinks.Size" type="System.Drawing.Size, System.Drawing">
<value>972, 537</value>
<value>178, 42</value>
</data>
<data name="tpFirebaseDynamicLinks.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
@ -7279,6 +7279,84 @@ store.book[0].title</value>
<data name="&gt;&gt;tpGoogleCloudStorage.ZOrder" xml:space="preserve">
<value>7</value>
</data>
<data name="cbAzureStorageExcludeContainer.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="cbAzureStorageExcludeContainer.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="cbAzureStorageExcludeContainer.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 299</value>
</data>
<data name="cbAzureStorageExcludeContainer.Size" type="System.Drawing.Size, System.Drawing">
<value>230, 17</value>
</data>
<data name="cbAzureStorageExcludeContainer.TabIndex" type="System.Int32, mscorlib">
<value>13</value>
</data>
<data name="cbAzureStorageExcludeContainer.Text" xml:space="preserve">
<value>Exclude container name from returned URL</value>
</data>
<data name="&gt;&gt;cbAzureStorageExcludeContainer.Name" xml:space="preserve">
<value>cbAzureStorageExcludeContainer</value>
</data>
<data name="&gt;&gt;cbAzureStorageExcludeContainer.Type" xml:space="preserve">
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;cbAzureStorageExcludeContainer.Parent" xml:space="preserve">
<value>tpAzureStorage</value>
</data>
<data name="&gt;&gt;cbAzureStorageExcludeContainer.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="txtAzureStorageUploadPath.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 223</value>
</data>
<data name="txtAzureStorageUploadPath.Size" type="System.Drawing.Size, System.Drawing">
<value>526, 20</value>
</data>
<data name="txtAzureStorageUploadPath.TabIndex" type="System.Int32, mscorlib">
<value>10</value>
</data>
<data name="&gt;&gt;txtAzureStorageUploadPath.Name" xml:space="preserve">
<value>txtAzureStorageUploadPath</value>
</data>
<data name="&gt;&gt;txtAzureStorageUploadPath.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;txtAzureStorageUploadPath.Parent" xml:space="preserve">
<value>tpAzureStorage</value>
</data>
<data name="&gt;&gt;txtAzureStorageUploadPath.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="lblAzureStorageUploadPath.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="lblAzureStorageUploadPath.Location" type="System.Drawing.Point, System.Drawing">
<value>13, 207</value>
</data>
<data name="lblAzureStorageUploadPath.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 13</value>
</data>
<data name="lblAzureStorageUploadPath.TabIndex" type="System.Int32, mscorlib">
<value>9</value>
</data>
<data name="lblAzureStorageUploadPath.Text" xml:space="preserve">
<value>Upload Path:</value>
</data>
<data name="&gt;&gt;lblAzureStorageUploadPath.Name" xml:space="preserve">
<value>lblAzureStorageUploadPath</value>
</data>
<data name="&gt;&gt;lblAzureStorageUploadPath.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;lblAzureStorageUploadPath.Parent" xml:space="preserve">
<value>tpAzureStorage</value>
</data>
<data name="&gt;&gt;lblAzureStorageUploadPath.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="cbAzureStorageEnvironment.Items" xml:space="preserve">
<value>blob.core.windows.net</value>
</data>
@ -7310,7 +7388,7 @@ store.book[0].title</value>
<value>tpAzureStorage</value>
</data>
<data name="&gt;&gt;cbAzureStorageEnvironment.ZOrder" xml:space="preserve">
<value>0</value>
<value>3</value>
</data>
<data name="lblAzureStorageEnvironment.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -7340,7 +7418,7 @@ store.book[0].title</value>
<value>tpAzureStorage</value>
</data>
<data name="&gt;&gt;lblAzureStorageEnvironment.ZOrder" xml:space="preserve">
<value>1</value>
<value>4</value>
</data>
<data name="btnAzureStoragePortal.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
@ -7352,7 +7430,7 @@ store.book[0].title</value>
<value>24, 24</value>
</data>
<data name="btnAzureStoragePortal.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
<value>2</value>
</data>
<data name="btnAzureStoragePortal.Text" xml:space="preserve">
<value>...</value>
@ -7367,7 +7445,7 @@ store.book[0].title</value>
<value>tpAzureStorage</value>
</data>
<data name="&gt;&gt;btnAzureStoragePortal.ZOrder" xml:space="preserve">
<value>2</value>
<value>5</value>
</data>
<data name="txtAzureStorageContainer.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 128</value>
@ -7376,7 +7454,7 @@ store.book[0].title</value>
<value>526, 20</value>
</data>
<data name="txtAzureStorageContainer.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
<value>6</value>
</data>
<data name="&gt;&gt;txtAzureStorageContainer.Name" xml:space="preserve">
<value>txtAzureStorageContainer</value>
@ -7388,7 +7466,7 @@ store.book[0].title</value>
<value>tpAzureStorage</value>
</data>
<data name="&gt;&gt;txtAzureStorageContainer.ZOrder" xml:space="preserve">
<value>3</value>
<value>6</value>
</data>
<data name="lblAzureStorageContainer.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -7403,7 +7481,7 @@ store.book[0].title</value>
<value>55, 13</value>
</data>
<data name="lblAzureStorageContainer.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
<value>5</value>
</data>
<data name="lblAzureStorageContainer.Text" xml:space="preserve">
<value>Container:</value>
@ -7418,7 +7496,7 @@ store.book[0].title</value>
<value>tpAzureStorage</value>
</data>
<data name="&gt;&gt;lblAzureStorageContainer.ZOrder" xml:space="preserve">
<value>4</value>
<value>7</value>
</data>
<data name="txtAzureStorageAccessKey.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 80</value>
@ -7427,7 +7505,7 @@ store.book[0].title</value>
<value>526, 20</value>
</data>
<data name="txtAzureStorageAccessKey.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
<value>4</value>
</data>
<data name="&gt;&gt;txtAzureStorageAccessKey.Name" xml:space="preserve">
<value>txtAzureStorageAccessKey</value>
@ -7439,7 +7517,7 @@ store.book[0].title</value>
<value>tpAzureStorage</value>
</data>
<data name="&gt;&gt;txtAzureStorageAccessKey.ZOrder" xml:space="preserve">
<value>5</value>
<value>8</value>
</data>
<data name="lblAzureStorageAccessKey.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -7457,7 +7535,7 @@ store.book[0].title</value>
<value>65, 13</value>
</data>
<data name="lblAzureStorageAccessKey.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
<value>3</value>
</data>
<data name="lblAzureStorageAccessKey.Text" xml:space="preserve">
<value>Access key:</value>
@ -7472,7 +7550,7 @@ store.book[0].title</value>
<value>tpAzureStorage</value>
</data>
<data name="&gt;&gt;lblAzureStorageAccessKey.ZOrder" xml:space="preserve">
<value>6</value>
<value>9</value>
</data>
<data name="txtAzureStorageAccountName.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 32</value>
@ -7493,7 +7571,7 @@ store.book[0].title</value>
<value>tpAzureStorage</value>
</data>
<data name="&gt;&gt;txtAzureStorageAccountName.ZOrder" xml:space="preserve">
<value>7</value>
<value>10</value>
</data>
<data name="lblAzureStorageAccountName.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -7526,16 +7604,16 @@ store.book[0].title</value>
<value>tpAzureStorage</value>
</data>
<data name="&gt;&gt;lblAzureStorageAccountName.ZOrder" xml:space="preserve">
<value>8</value>
<value>11</value>
</data>
<data name="txtAzureStorageCustomDomain.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 222</value>
<value>16, 273</value>
</data>
<data name="txtAzureStorageCustomDomain.Size" type="System.Drawing.Size, System.Drawing">
<value>526, 20</value>
</data>
<data name="txtAzureStorageCustomDomain.TabIndex" type="System.Int32, mscorlib">
<value>9</value>
<value>12</value>
</data>
<data name="&gt;&gt;txtAzureStorageCustomDomain.Name" xml:space="preserve">
<value>txtAzureStorageCustomDomain</value>
@ -7547,19 +7625,19 @@ store.book[0].title</value>
<value>tpAzureStorage</value>
</data>
<data name="&gt;&gt;txtAzureStorageCustomDomain.ZOrder" xml:space="preserve">
<value>9</value>
<value>12</value>
</data>
<data name="lblAzureStorageCustomDomain.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="lblAzureStorageCustomDomain.Location" type="System.Drawing.Point, System.Drawing">
<value>13, 206</value>
<value>13, 257</value>
</data>
<data name="lblAzureStorageCustomDomain.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 13</value>
</data>
<data name="lblAzureStorageCustomDomain.TabIndex" type="System.Int32, mscorlib">
<value>10</value>
<value>11</value>
</data>
<data name="lblAzureStorageCustomDomain.Text" xml:space="preserve">
<value>Custom Domain:</value>
@ -7574,10 +7652,10 @@ store.book[0].title</value>
<value>tpAzureStorage</value>
</data>
<data name="&gt;&gt;lblAzureStorageCustomDomain.ZOrder" xml:space="preserve">
<value>10</value>
<value>13</value>
</data>
<data name="tpAzureStorage.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 202</value>
<value>4, 40</value>
</data>
<data name="tpAzureStorage.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>

View file

@ -372,6 +372,8 @@ public class UploadersConfig : SettingsBase<UploadersConfig>
public string AzureStorageContainer = "";
public string AzureStorageEnvironment = "blob.core.windows.net";
public string AzureStorageCustomDomain = "";
public string AzureStorageUploadPath = "";
public bool AzureStorageExcludeContainer = false;
#endregion Azure Storage