public async Task <bool> ExecuteAsync() { Log.LogMessage( MessageImportance.High, "Creating container named '{0}' in storage account {1}.", ContainerName, AccountName); string url = string.Format( "https://{0}.blob.core.windows.net/{1}?restype=container", AccountName, ContainerName); StorageUri = string.Format( "https://{0}.blob.core.windows.net/{1}/", AccountName, ContainerName); Log.LogMessage(MessageImportance.Low, "Sending request to create Container"); using (HttpClient client = new HttpClient()) { Func <HttpRequestMessage> createRequest = () => { DateTime dt = DateTime.UtcNow; var req = new HttpRequestMessage(HttpMethod.Put, url); req.Headers.Add(AzureHelper.DateHeaderString, dt.ToString("R", CultureInfo.InvariantCulture)); req.Headers.Add(AzureHelper.VersionHeaderString, AzureHelper.StorageApiVersion); req.Headers.Add(AzureHelper.AuthorizationHeaderString, AzureHelper.AuthorizationHeader( AccountName, AccountKey, "PUT", dt, req)); byte[] bytestoWrite = new byte[0]; int bytesToWriteLength = 0; Stream postStream = new MemoryStream(); postStream.Write(bytestoWrite, 0, bytesToWriteLength); req.Content = new StreamContent(postStream); return(req); }; Func <HttpResponseMessage, bool> validate = (HttpResponseMessage response) => { // the Conflict status (409) indicates that the container already exists, so // if FailIfExists is set to false and we get a 409 don't fail the task. return(response.IsSuccessStatusCode || (!FailIfExists && response.StatusCode == HttpStatusCode.Conflict)); }; using (HttpResponseMessage response = await AzureHelper.RequestWithRetry(Log, client, createRequest, validate)) { try { Log.LogMessage( MessageImportance.Low, "Received response to create Container {0}: Status Code: {1} {2}", ContainerName, response.StatusCode, response.Content.ToString()); // specifying zero is valid, it means "I don't want a token" if (ReadOnlyTokenDaysValid > 0) { ReadOnlyToken = AzureHelper.CreateContainerSasToken( AccountName, ContainerName, AccountKey, AzureHelper.SasAccessType.Read, ReadOnlyTokenDaysValid); } // specifying zero is valid, it means "I don't want a token" if (WriteOnlyTokenDaysValid > 0) { WriteOnlyToken = AzureHelper.CreateContainerSasToken( AccountName, ContainerName, AccountKey, AzureHelper.SasAccessType.Write, WriteOnlyTokenDaysValid); } } catch (Exception e) { Log.LogErrorFromException(e, true); return(false); } } } return(true); }
public async Task <bool> ExecuteAsync() { Log.LogMessage( MessageImportance.High, "Creating container named '{0}' in storage account {1}.", ContainerName, AccountName); DateTime dt = DateTime.UtcNow; string url = string.Format( "https://{0}.blob.core.windows.net/{1}?restype=container", AccountName, ContainerName); StorageUri = string.Format( "https://{0}.blob.core.windows.net/{1}/", AccountName, ContainerName); Log.LogMessage(MessageImportance.Normal, "Sending request to create Container"); using (HttpClient client = new HttpClient()) { using (HttpRequestMessage req = new HttpRequestMessage(HttpMethod.Put, url)) { req.Headers.Add(AzureHelper.DateHeaderString, dt.ToString("R", CultureInfo.InvariantCulture)); req.Headers.Add(AzureHelper.VersionHeaderString, AzureHelper.StorageApiVersion); req.Headers.Add(AzureHelper.AuthorizationHeaderString, AzureHelper.AuthorizationHeader( AccountName, AccountKey, "PUT", dt, req)); byte[] bytestoWrite = new byte[0]; int bytesToWriteLength = 0; Stream postStream = new MemoryStream(); postStream.Write(bytestoWrite, 0, bytesToWriteLength); req.Content = new StreamContent(postStream); using (HttpResponseMessage response = await client.SendAsync(req)) { this.Log.LogMessage( MessageImportance.Normal, "Received response to create Container {0}: Status Code: {1} {2}", this.ContainerName, response.StatusCode, response.Content); } } } try { if (ReadOnlyTokenDaysValid > 0) { ReadOnlyToken = AzureHelper.CreateContainerSasToken( AccountName, ContainerName, AccountKey, AzureHelper.SasAccessType.Read, ReadOnlyTokenDaysValid); } else { Log.LogWarning("{0} will not allow read permissions - ReadOnlyTokenDaysValid must be greater than 0.", StorageUri); } if (WriteOnlyTokenDaysValid > 0) { WriteOnlyToken = AzureHelper.CreateContainerSasToken( AccountName, ContainerName, AccountKey, AzureHelper.SasAccessType.Write, WriteOnlyTokenDaysValid); } else { Log.LogWarning("{0} will not allow write permissions - WriteOnlyTokenDaysValid must be greater than 0.", StorageUri); } } catch (ArgumentOutOfRangeException e) { Log.LogError("ArgumentOutOfRangeException: Invalid AzureHelper.SasAccessType :" + e.Message); return(false); } return(true); }
public async Task <bool> ExecuteAsync() { ParseConnectionString(); // If the connection string AND AccountKey & AccountName are provided, error out. if (Log.HasLoggedErrors) { return(false); } Log.LogMessage( MessageImportance.High, "Creating container named '{0}' in storage account {1}.", ContainerName, AccountName); string url = string.Format( "https://{0}.blob.core.windows.net/{1}?restype=container", AccountName, ContainerName); StorageUri = string.Format( "https://{0}.blob.core.windows.net/{1}/", AccountName, ContainerName); Log.LogMessage(MessageImportance.Low, "Sending request to create Container"); using (HttpClient client = new HttpClient()) { var createRequest = AzureHelper.RequestMessage("PUT", url, AccountName, AccountKey); Func <HttpResponseMessage, bool> validate = (HttpResponseMessage response) => { // the Conflict status (409) indicates that the container already exists, so // if FailIfExists is set to false and we get a 409 don't fail the task. return(response.IsSuccessStatusCode || (!FailIfExists && response.StatusCode == HttpStatusCode.Conflict)); }; using (HttpResponseMessage response = await AzureHelper.RequestWithRetry(Log, client, createRequest, validate)) { try { Log.LogMessage( MessageImportance.Low, "Received response to create Container {0}: Status Code: {1} {2}", ContainerName, response.StatusCode, response.Content.ToString()); // specifying zero is valid, it means "I don't want a token" if (ReadOnlyTokenDaysValid > 0) { ReadOnlyToken = AzureHelper.CreateContainerSasToken( AccountName, ContainerName, AccountKey, AzureHelper.SasAccessType.Read, ReadOnlyTokenDaysValid); } // specifying zero is valid, it means "I don't want a token" if (WriteOnlyTokenDaysValid > 0) { WriteOnlyToken = AzureHelper.CreateContainerSasToken( AccountName, ContainerName, AccountKey, AzureHelper.SasAccessType.Write, WriteOnlyTokenDaysValid); } } catch (Exception e) { Log.LogErrorFromException(e, true); } } } return(!Log.HasLoggedErrors); }