Esempio n. 1
0
        public void Given_AppConfig_ConnectionString_ShouldReturn_Result()
        {
            var settings = new StorageAccountSettings();

            settings.ConnectionString.Should().StartWithEquivalent("use");
            settings.ConnectionString.Should().EndWithEquivalent("true");
        }
 public SetContainerMetadataRequest(StorageAccountSettings settings, string containerName, Dictionary <string, string> metadata, string lease = null)
     : base(settings)
 {
     _containerName = containerName;
     _metadata      = metadata;
     _lease         = lease;
 }
        /// <summary>
        /// BlockBlob Type
        /// </summary>
        public PutBlockListRequest(StorageAccountSettings settings, string containerName, string blobName, BlockListBlockIdList data,
                                   string cacheControl    = null, string contentType           = null,
                                   string contentEncoding = null, string contentLanguage       = null, string blobContentMD5 = null,
                                   Dictionary <string, string> metadata = null, string leaseId = null)
            : base(settings)
        {
            if (!string.IsNullOrEmpty(leaseId))
            {
                Guard.ArgumentIsAGuid("leaseId", leaseId);
            }
            if (metadata != null)
            {
                IdentifierValidation.EnsureNamesAreValidIdentifiers(metadata.Keys);
            }

            var dataAndHash = data.AsXmlByteArrayWithMd5Hash();

            _data = dataAndHash.XmlBytes;
            _requestContentMD5 = dataAndHash.MD5Hash;

            _containerName   = containerName;
            _blobName        = blobName;
            _contentType     = contentType;
            _contentEncoding = contentEncoding;
            _contentLanguage = contentLanguage;
            _blobContentMD5  = blobContentMD5;
            _cacheControl    = cacheControl;
            _metadata        = metadata;
            _leaseId         = leaseId;
        }
        public static string GenerateSharedKeySignatureStringForTableService(WebRequest request, Dictionary<string, string> queryStringParameters, StorageAccountSettings settings)
        {

            var queryStrings = queryStringParameters.OrderBy(kvp => kvp.Key)
                                                    .Select(kvp => kvp.Key + ":" + kvp.Value);

            string canonicalizedResource = "/" + settings.AccountName +
                                            String.Join("", request.RequestUri.Segments);
            canonicalizedResource = canonicalizedResource.TrimEnd(new char[] { '\n' });

            // Shared Key
            string stringToSign = String.Format(
                /* Method */ "{0}\n" +
                /* Content-MD5 */ "{1}\n" +
                /* Content-Type */ "{2}\n" +
                /* Date */ "{3}\n" +
                /* Canonicalized Resource */ "{4}",
                request.Method,
                request.Headers[ProtocolConstants.Headers.ContentMD5],
                request.ContentType,
                request.Headers[ProtocolConstants.Headers.Date],
                canonicalizedResource);

            return settings.ComputeMacSha256(stringToSign);
        }
Esempio n. 5
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            var storageAccount = Configuration["Blob_StorageAccount"];
            var storageKey     = Configuration["Blob_StorageKey"];
            var containerName  = Configuration["Blob_ContainerName"];

            var _settings = new StorageAccountSettings(storageAccount, storageKey, containerName);

            services.AddTransient <StorageAccountSettings>(provider => { return(_settings); });
            services.AddTransient <IAzureBlobStorage, AzureBlobStorage>();
            services.AddTransient(typeof(IAzureTableStorage <>), typeof(AzureTableStorage <>));

            services.AddTransient <IUserService, UserService>((ctx) =>
            {
                IAzureTableStorage <User> svc = ctx.GetService <IAzureTableStorage <User> >();
                return(new UserService(svc));
            });


            services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
            .AddCookie(options =>
            {
                options.LoginPath = "/Login/Fail";
            });

            services.AddMvc();
        }
        private PutBlobRequest(StorageAccountSettings settings, string containerName, string blobName, BlobType blobType,
                               string contentType  = null, string contentEncoding = null, string contentLanguage       = null, string contentMD5 = null,
                               string cacheControl = null, Dictionary <string, string> metadata = null, string leaseId = null)
            : base(settings)
        {
            if (!string.IsNullOrEmpty(leaseId))
            {
                Guard.ArgumentIsAGuid("leaseId", leaseId);
            }
            if (null != metadata)
            {
                IdentifierValidation.EnsureNamesAreValidIdentifiers(metadata.Keys);
            }

            _containerName   = containerName;
            _blobName        = blobName;
            _blobType        = blobType;
            _contentType     = contentType;
            _contentEncoding = contentEncoding;
            _contentLanguage = contentLanguage;
            _contentMD5      = contentMD5;
            _cacheControl    = cacheControl;
            _metadata        = metadata;
            _leaseId         = leaseId;
        }
        public SetQueueServicePropertiesRequest(StorageAccountSettings settings, StorageServiceProperties properties)
            : base(settings)
        {
            _properties = properties;

            _content = PrepareContent(properties);
        }
Esempio n. 8
0
        public async static Task <byte[]> RetrieveOriginalImageFromObjectStorageAsync(ImageInformation image)
        {
            StorageAccountSettings storageAccountSettings = Common.CurrentStorageAccountSettings;

            CloudStorageAccount storageAccount = CloudStorageAccount.Parse(storageAccountSettings.ConnectionString);

            CloudBlobClient    client    = storageAccount.CreateCloudBlobClient();
            CloudBlobContainer container = client.GetContainerReference(storageAccountSettings.UploadsContainerName);
            CloudBlockBlob     blob      = null;

            byte[] originalImageBytes = null;

            bool blobExists = false;

            try
            {
                blob       = container.GetBlockBlobReference(image.FileName);
                blobExists = await blob.ExistsAsync();

                if (blobExists)
                {
                    originalImageBytes = new byte[blob.StreamWriteSizeInBytes];

                    await blob.DownloadToByteArrayAsync(originalImageBytes, 0);
                }
            }
            catch (Exception ex)
            {
            }

            return(originalImageBytes);
        }
Esempio n. 9
0
 public ListQueuesRequest(StorageAccountSettings settings, string prefix = "", int maxResults = 5000, string marker = null, bool includeMetadata = false)
     : base(settings)
 {
     _prefix          = prefix;
     _maxResults      = maxResults;
     _marker          = marker;
     _includeMetadata = includeMetadata;
 }
 public DeleteMessageRequest(StorageAccountSettings settings, string queueName, string messageId, string popReceipt)
     : base(settings)
 {
     //TODO: add Guard statements against invalid values, short circuit so we don't have the latency roundtrip to the server
     _queueName = queueName;
     _messageId = messageId;
     _popReceipt = popReceipt;
 }
Esempio n. 11
0
 public AzureTableStorage(StorageAccountSettings settings, string tableName = null)
 {
     this.settings = settings;
     if (!string.IsNullOrEmpty(tableName))
     {
         SetTableName(tableName).Wait();
     }
 }
        public void Parse_UseDevelopmentStorage_ReturnsLocalEmulatorSettings()
        {
            string connectionString = "UseDevelopmentStorage=true";

            var result = StorageAccountSettings.Parse(connectionString);

            Assert.IsInstanceOf <LocalEmulatorAccountSettings>(result);
        }
 public CreateTableRequest(StorageAccountSettings settings, string tableName, MetadataPreference?metadataPreference = null)
     : base(settings)
 {
     _tableName = tableName;
     // emulator prior to 2.2.1 preview does not support json
     _content            = UTF8Encoding.UTF8.GetBytes(GetAtomContent(_tableName));
     _metadataPreference = metadataPreference;
 }
        public void Parse_UseDevelopmentCredentials_ReturnsLocalEmulatorSettings()
        {
            string connectionString = "AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;";

            var result = StorageAccountSettings.Parse(connectionString);

            Assert.IsInstanceOf <LocalEmulatorAccountSettings>(result);
        }
 public RequestWithEmptyPayload(StorageAccountSettings settings, string uri, string httpMethod)
     : base(settings)
 {
     TestRequestUri = uri;
     TestHttpMethod = httpMethod;
     // use a faster retry policy with the same strategy as the real one
     RetryPolicy = new RetryPolicy <ExceptionRetryStrategy>(3, TimeSpan.FromMilliseconds(1));
 }
 /// <summary>
 /// PageBlob Type
 /// </summary>
 public PutBlobRequest(StorageAccountSettings settings, string containerName, string blobName, int pageContentLength,
                       string contentType  = null, string contentEncoding = null, string contentLanguage            = null, string contentMD5 = null,
                       string cacheControl = null, Dictionary <string, string> metadata = null, long sequenceNumber = 0, string leaseId       = null)
     : this(settings, containerName, blobName, BlobType.Page, contentType, contentEncoding, contentLanguage, contentMD5, cacheControl, metadata, leaseId)
 {
     _pageContentLength = pageContentLength;
     _sequenceNumber    = sequenceNumber;
 }
Esempio n. 17
0
 public SetContainerACLRequest(StorageAccountSettings settings, string containerName, ContainerAccessType containerAccess, List <BlobSignedIdentifier> signedIdentifiers, string leaseId = null)
     : base(settings)
 {
     _containerName   = containerName;
     _containerAccess = containerAccess;
     _content         = PrepareContent(signedIdentifiers ?? new List <BlobSignedIdentifier>());
     _leaseId         = leaseId;
 }
Esempio n. 18
0
        public static async void Run([BlobTrigger("teste/{name}", Connection = "AzureWebJobsStorage")] Stream myBlob,
                                     string name,
                                     [Queue("toprocess", Connection = "AzureWebJobsStorage")] ICollector <Document> queueCollector,
                                     TraceWriter log)
        {
            var storageAccount = "cosmoshoroscopob34c";
            var storageKey     = "ortdcoPVj90rv0GyPGDzMN/jN+5K0izumxFbIqvRM6MiDcXQwcNLSJomGeDQE3RdfhowIyH9MQw856fikwiIrw==";
            var containerName  = "teste";

            var settings = new StorageAccountSettings(storageAccount, storageKey, containerName);
            IDocumentService documentService = null;

            if (name.StartsWith("uploads"))
            {
                try
                {
                    var sheetService = new SheetProcessService(queueCollector, documentService, log);
                    await sheetService.ProcessSheet(myBlob);
                }
                catch (Exception e)
                {
                    log.Error($"Ocorreu um erro: {e}");
                }
                log.Info($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes");
            }
            else if (name.StartsWith("docs"))
            {
                try
                {
                    var tableName         = "document";
                    var azureTableStorage = new AzureTableStorage <Document>(settings, tableName);

                    //Is necessary create new byte array here, because has timeout and
                    //we can't edite the word file after
                    byte[] b;
                    using (BinaryReader br = new BinaryReader(myBlob))
                        b = br.ReadBytes((int)myBlob.Length);

                    var pk     = ClearFileName(name);
                    var result = await azureTableStorage.Retrieve("");

                    var docData = result.FirstOrDefault();

                    if (docData?.Status == "Aguardando processamento")
                    {
                        docData.Status = "Processando";
                        await azureTableStorage.Insert(docData);

                        var docService = new DocProcessService(settings, documentService, log);
                        await docService.Process(b, docData, name);
                    }
                }
                catch (Exception ex)
                {
                    log.Error($"Erro ao receber docx: {ex}");
                }
            }
        }
        public void Parse_UseNonDevelopmentCredentials_ReturnsNormalSettings()
        {
            string connectionString = "AccountName=some-account-name;AccountKey=some-account-key;";

            var result = StorageAccountSettings.Parse(connectionString);

            Assert.IsInstanceOf <StorageAccountSettings>(result);
            Assert.IsNotInstanceOf <LocalEmulatorAccountSettings>(result);
        }
        public LeaseContainerRenewRequest(StorageAccountSettings settings, string containerName, string leaseId)
            : base(settings)
        {
            Guard.ArgumentIsNotNullOrEmpty("containerName", containerName);
            Guard.ArgumentIsAGuid("leaseId", leaseId);

            _containerName = containerName;
            _leaseId       = leaseId;
        }
        /// <summary>
        /// BlockBlob Type
        /// </summary>
        public PutBlobRequest(StorageAccountSettings settings, string containerName, string blobName, byte[] data,
                              string contentType  = null, string contentEncoding = null, string contentLanguage       = null, string contentMD5 = null,
                              string cacheControl = null, Dictionary <string, string> metadata = null, string leaseId = null)
            : this(settings, containerName, blobName, BlobType.Block, contentType, contentEncoding, contentLanguage, contentMD5, cacheControl, metadata, leaseId)
        {
            Guard.ArgumentArrayLengthIsEqualOrSmallerThanSize("data", data, BlobServiceConstants.MaxSingleBlobUploadSize);

            _data = data;
        }
        public void Parse_HttpsSpecified_UsesHttps()
        {
            string connectionString = "AccountName=some-account-name;AccountKey=some-account-key;";

            var result = StorageAccountSettings.Parse(connectionString);

            Assert.IsTrue(result.BlobEndpoint.StartsWith("https://"), "BlobEndpoint should start with https");
            Assert.IsTrue(result.QueueEndpoint.StartsWith("https://"), "QueueEndpoint should start with https");
            Assert.IsTrue(result.TableEndpoint.StartsWith("https://"), "TableEndpoint should start with https");
        }
        public void Parse_UseDevelopmentStorageWithproxy_SettingsIncludeProxy()
        {
            string connectionString = "UseDevelopmentStorage=true;DevelopmentStorageProxyUri=http://PROXY-HERE";

            var result = StorageAccountSettings.Parse(connectionString);

            Assert.AreEqual("http://PROXY-HERE:10000/devstoreaccount1", result.BlobEndpoint);
            Assert.AreEqual("http://PROXY-HERE:10001/devstoreaccount1", result.QueueEndpoint);
            Assert.AreEqual("http://PROXY-HERE:10002/devstoreaccount1", result.TableEndpoint);
        }
Esempio n. 24
0
        public PeekMessagesRequest(StorageAccountSettings settings, string queueName, int numOfMessages = 1, int?messageTtl = null)
            : base(settings)
        {
            //TODO: add Guard statements against invalid values, short circuit so we don't have the latency roundtrip to the server

            _queueName     = queueName;
            _numOfMessages = numOfMessages;

            _messageTtl = messageTtl;
        }
 public ListBlobsRequest(StorageAccountSettings settings, string containerName, string prefix = "", string delimiter = "", string marker = "", int maxResults = 5000, ListBlobsInclude?include = null)
     : base(settings)
 {
     _containerName = containerName;
     _prefix        = prefix;
     _delimiter     = delimiter;
     _marker        = marker;
     _maxResults    = maxResults;
     _include       = include;
 }
Esempio n. 26
0
        public PutMessageRequest(StorageAccountSettings settings, string queueName, string messageData, int?visibilityTimeout = null, int?messageTtl = null)
            : base(settings)
        {
            //TODO: add Guard statements against invalid values, short circuit so we don't have the latency roundtrip to the server
            _queueName   = queueName;
            _messageData = messageData;

            _visibilityTimeout = visibilityTimeout;
            _messageTtl        = messageTtl;
        }
Esempio n. 27
0
        /// <param name="leaseDurationTimeInSeconds">-1 for infinite, otherwise 15 to 60 seconds is allowed</param>
        public LeaseContainerChangeRequest(StorageAccountSettings settings, string containerName, string currentLeaseId, string proposedLeaseId)
            : base(settings)
        {
            Guard.ArgumentIsNotNullOrEmpty("containerName", containerName);
            Guard.ArgumentIsAGuid("currentLeaseId", currentLeaseId);
            Guard.ArgumentIsAGuid("proposedLeaseId", proposedLeaseId);

            _containerName   = containerName;
            _currentLeaseId  = currentLeaseId;
            _proposedLeaseId = proposedLeaseId;
        }
Esempio n. 28
0
        public CreateQueueRequest(StorageAccountSettings settings, string queueName, Dictionary <string, string> metadata = null)
            : base(settings)
        {
            _queueName = queueName;
            _metadata  = metadata;

            if (_metadata != null)
            {
                IdentifierValidation.EnsureNamesAreValidIdentifiers(_metadata.Select(kvp => kvp.Key));
            }
        }
        public void Parse_EndointSuffixSupplied_UsesProvidedSuffixForAllAddresses()
        {
            string expectedSuffix   = "core.expected.address";
            string connectionString = String.Format("AccountName=some-account-name;AccountKey=some-account-key;EndpointSuffix={0}", expectedSuffix);

            var result = StorageAccountSettings.Parse(connectionString);

            Assert.IsTrue(result.BlobEndpoint.EndsWith(expectedSuffix), String.Format("Expected suffix of '{0} but actual value was {1}", expectedSuffix, result.BlobEndpoint));
            Assert.IsTrue(result.QueueEndpoint.EndsWith(expectedSuffix), String.Format("Expected suffix of '{0} but actual value was {1}", expectedSuffix, result.QueueEndpoint));
            Assert.IsTrue(result.TableEndpoint.EndsWith(expectedSuffix), String.Format("Expected suffix of '{0} but actual value was {1}", expectedSuffix, result.TableEndpoint));
        }
Esempio n. 30
0
        public LeaseContainerBreakRequest(StorageAccountSettings settings, string containerName, string leaseId, int leaseBreakPeriod)
            : base(settings)
        {
            Guard.ArgumentIsNotNullOrEmpty("containerName", containerName);
            Guard.ArgumentIsAGuid("leaseId", leaseId);
            Guard.ArgumentInRanges <int>("leaseBreakPeriod", leaseBreakPeriod, new GuardRange <int>(0, 60));

            _containerName    = containerName;
            _leaseId          = leaseId;
            _leaseBreakPeriod = leaseBreakPeriod;
        }
Esempio n. 31
0
        private void RegisterServices(IServiceCollection services)
        {
            var storageAccount = "cosmoshoroscopob34c";
            var storageKey     = "ortdcoPVj90rv0GyPGDzMN/jN+5K0izumxFbIqvRM6MiDcXQwcNLSJomGeDQE3RdfhowIyH9MQw856fikwiIrw==";
            var containerName  = "teste";

            var settings = new StorageAccountSettings(storageAccount, storageKey, containerName);

            services.AddTransient <StorageAccountSettings>(provider => { return(settings); });

            services.AddTransient <ISheetReader, SheetProcess>();
        }
        public static string GenerateSharedKeySignatureString(WebRequest request, Dictionary<string,string> queryStringParameters, StorageAccountSettings settings)
        {
            var canonicalizedHeaders = request.Headers.AllKeys
                .Where(k => k.StartsWith("x-ms-"))
                .OrderBy(k => k.ToLower())
                .Select(k => k.ToLower() + ":" + request.Headers[k].Replace('\r',' ').Replace('\n',' ').TrimStart());

            var queryStrings = queryStringParameters.OrderBy(kvp => kvp.Key)
                                                    .Select(kvp => kvp.Key + ":" + kvp.Value);

            string canonicalizedResource =
                    "/" + settings.AccountName +
                    String.Join("", request.RequestUri.Segments) + "\n" +
                    String.Join("\n", queryStrings);
            canonicalizedResource = canonicalizedResource.TrimEnd(new char[] { '\n' });

            string contentLength = "";
            if (request.Method == "POST" || request.Method == "PUT" || request.Method == "DELETE")
                contentLength = request.ContentLength.ToString();

            string stringToSign = String.Format(
                /* Method */ "{0}\n"
                /* Content-Encoding */ + "{1}\n"
                /* Content-Language */ + "{2}\n"
                /* Content-Length */ + "{3}\n"
                /* Content-MD5 */ + "{4}\n"
                /* Content-Type */ + "{5}\n"
                /* Date */ + "{6}\n"
                /* If-Modified-Since */ + "{7}\n"
                /* If-Match */ + "{8}\n"
                /* If-None-Match */ + "{9}\n"
                /* If-Unmodified-Since */ + "{10}\n"
                /* Range */ + "{11}\n"
                /* Canonicalized Headers */ + "{12}\n"
                /* Canonicalilzed Resource */ + "{13}",
                request.Method,
                request.Headers[ProtocolConstants.Headers.ContentEncoding],
                request.Headers[ProtocolConstants.Headers.ContentLanguage],
                contentLength,
                request.Headers[ProtocolConstants.Headers.ContentMD5],
                request.ContentType,
                "",
                "",
                "",
                "",
                "",
                "",
                String.Join("\n", canonicalizedHeaders),
                canonicalizedResource);


            return settings.ComputeMacSha256(stringToSign);
        }
 public void SetupFixture()
 {
     _settings = new SettingsFake();
     WebRequest.RegisterPrefix("test", TestableWebRequestCreateFactory.GetFactory());
 }
        public void Parse_TableEndpointSpecified_OverridesDefaultValueForTableStorage()
        {
            string expectedEndpoint = "http://expected.endpoint.here";
            string connectionString = String.Format("AccountName=some-account-name;AccountKey=some-account-key;TableEndpoint={0}", expectedEndpoint);

            var result = StorageAccountSettings.Parse(connectionString);

            var defaultStorageSettings = new StorageAccountSettings("some-account-name", "", true);
            Assert.AreEqual(defaultStorageSettings.BlobEndpoint, result.BlobEndpoint);
            Assert.AreEqual(defaultStorageSettings.QueueEndpoint, result.QueueEndpoint);
            Assert.AreEqual(expectedEndpoint, result.TableEndpoint);
        }
 public BlobServiceClientEx(StorageAccountSettings account, int maxSingleBlobUploadSize = BlobServiceConstants.MaxSingleBlobUploadSize)
     : base(account)
 {
     _maxSingleBlobUploadSize = maxSingleBlobUploadSize;
 }