Ejemplo n.º 1
0
        public void ToSasQueryParameters_ContainerIdentityTest()
        {
            // Arrange
            var constants      = new TestConstants(this);
            var containerName  = this.GetNewContainerName();
            var blobName       = this.GetNewBlobName();
            var blobSasBuilder = this.BuildBlobSasBuilder(includeBlob: false, includeSnapshot: false, containerName, blobName, constants);
            var signature      = this.BuildIdentitySignature(includeBlob: false, includeSnapshot: false, containerName, blobName, constants);

            // Act
            var sasQueryParameters = blobSasBuilder.ToSasQueryParameters(GetUserDelegationKey(constants), constants.Sas.Account);

            // Assert
            Assert.AreEqual(SasQueryParameters.SasVersion, sasQueryParameters.Version);
            Assert.AreEqual(String.Empty, sasQueryParameters.Services);
            Assert.AreEqual(String.Empty, sasQueryParameters.ResourceTypes);
            Assert.AreEqual(constants.Sas.Protocol, sasQueryParameters.Protocol);
            Assert.AreEqual(constants.Sas.StartTime, sasQueryParameters.StartTime);
            Assert.AreEqual(constants.Sas.ExpiryTime, sasQueryParameters.ExpiryTime);
            Assert.AreEqual(constants.Sas.IPRange, sasQueryParameters.IPRange);
            Assert.AreEqual(String.Empty, sasQueryParameters.Identifier);
            Assert.AreEqual(constants.Sas.KeyOid, sasQueryParameters.KeyOid);
            Assert.AreEqual(constants.Sas.KeyTid, sasQueryParameters.KeyTid);
            Assert.AreEqual(constants.Sas.KeyStart, sasQueryParameters.KeyStart);
            Assert.AreEqual(constants.Sas.KeyExpiry, sasQueryParameters.KeyExpiry);
            Assert.AreEqual(constants.Sas.KeyService, sasQueryParameters.KeyService);
            Assert.AreEqual(constants.Sas.KeyVersion, sasQueryParameters.KeyVersion);
            Assert.AreEqual(Constants.Sas.Resource.Container, sasQueryParameters.Resource);
            Assert.AreEqual(Permissions, sasQueryParameters.Permissions);
            Assert.AreEqual(signature, sasQueryParameters.Signature);
        }
Ejemplo n.º 2
0
        public void FileSasBuilder_ToSasQueryParameters_NoVersionTest()
        {
            // Arrange
            var constants      = new TestConstants(this);
            var shareName      = this.GetNewShareName();
            var filePath       = this.GetNewDirectoryName();
            var fileSasBuilder = this.BuildFileSasBuilder(includeVersion: false, includeFilePath: false, constants, shareName, filePath);
            var signature      = this.BuildSignature(includeFilePath: false, includeVersion: false, constants, shareName, filePath);

            // Act
            var sasQueryParameters = fileSasBuilder.ToSasQueryParameters(constants.Sas.SharedKeyCredential);

            // Assert
            Assert.AreEqual(SasQueryParameters.SasVersion, sasQueryParameters.Version);
            Assert.AreEqual(String.Empty, sasQueryParameters.Services);
            Assert.AreEqual(String.Empty, sasQueryParameters.ResourceTypes);
            Assert.AreEqual(constants.Sas.Protocol, sasQueryParameters.Protocol);
            Assert.AreEqual(constants.Sas.StartTime, sasQueryParameters.StartTime);
            Assert.AreEqual(constants.Sas.ExpiryTime, sasQueryParameters.ExpiryTime);
            Assert.AreEqual(constants.Sas.IPRange, sasQueryParameters.IPRange);
            Assert.AreEqual(constants.Sas.Identifier, sasQueryParameters.Identifier);
            Assert.AreEqual(Constants.Sas.Resource.Share, sasQueryParameters.Resource);
            Assert.AreEqual(Permissions, sasQueryParameters.Permissions);
            Assert.AreEqual(signature, sasQueryParameters.Signature);
        }
Ejemplo n.º 3
0
        public void ToSasQueryParameters_SnapshotTest()
        {
            // Arrange
            var constants      = new TestConstants(this);
            var containerName  = this.GetNewContainerName();
            var blobName       = this.GetNewBlobName();
            var blobSasBuilder = this.BuildBlobSasBuilder(includeBlob: true, includeSnapshot: true, containerName, blobName, constants);
            var signature      = this.BuildSignature(includeBlob: true, includeSnapshot: true, containerName, blobName, constants);

            // Act
            var sasQueryParameters = blobSasBuilder.ToSasQueryParameters(constants.Sas.SharedKeyCredential);

            // Assert
            Assert.AreEqual(SasQueryParameters.SasVersion, sasQueryParameters.Version);
            Assert.AreEqual(String.Empty, sasQueryParameters.Services);
            Assert.AreEqual(String.Empty, sasQueryParameters.ResourceTypes);
            Assert.AreEqual(constants.Sas.Protocol, sasQueryParameters.Protocol);
            Assert.AreEqual(constants.Sas.StartTime, sasQueryParameters.StartTime);
            Assert.AreEqual(constants.Sas.ExpiryTime, sasQueryParameters.ExpiryTime);
            Assert.AreEqual(constants.Sas.IPRange, sasQueryParameters.IPRange);
            Assert.AreEqual(constants.Sas.Identifier, sasQueryParameters.Identifier);
            Assert.AreEqual(Constants.Sas.Resource.BlobSnapshot, sasQueryParameters.Resource);
            Assert.AreEqual(Permissions, sasQueryParameters.Permissions);
            Assert.AreEqual(signature, sasQueryParameters.Signature);
        }
Ejemplo n.º 4
0
        private string BuildSignature(bool includeFilePath, bool includeVersion, TestConstants constants, string shareName, string filePath)
        {
            var canonicalName = "/file/" + constants.Sas.Account + "/" + shareName;

            if (includeFilePath)
            {
                canonicalName += "/" + filePath;
            }

            var stringToSign = String.Join("\n",
                                           Permissions,
                                           SasQueryParameters.FormatTimesForSasSigning(constants.Sas.StartTime),
                                           SasQueryParameters.FormatTimesForSasSigning(constants.Sas.ExpiryTime),
                                           canonicalName,
                                           constants.Sas.Identifier,
                                           constants.Sas.IPRange.ToString(),
                                           constants.Sas.Protocol.ToString(),
                                           includeVersion ? constants.Sas.Version : SasQueryParameters.SasVersion,
                                           constants.Sas.CacheControl,
                                           constants.Sas.ContentDisposition,
                                           constants.Sas.ContentEncoding,
                                           constants.Sas.ContentLanguage,
                                           constants.Sas.ContentType);

            return(constants.Sas.SharedKeyCredential.ComputeHMACSHA256(stringToSign));
        }
        public void QueueSasBuilder_NullSharedKeyCredentialTest()
        {
            // Arrange
            var constants       = new TestConstants(this);
            var queueName       = this.GetNewQueueName();
            var queueSasBuilder = this.BuildQueueSasBuilder(constants, queueName, includeVersion: true);

            // Act
            Assert.Throws <ArgumentNullException>(() => queueSasBuilder.ToSasQueryParameters(null), "sharedKeyCredential");
        }
Ejemplo n.º 6
0
 static UserDelegationKey GetUserDelegationKey(TestConstants constants)
 => new UserDelegationKey
 {
     SignedOid     = constants.Sas.KeyOid,
     SignedTid     = constants.Sas.KeyTid,
     SignedStart   = constants.Sas.KeyStart,
     SignedExpiry  = constants.Sas.KeyExpiry,
     SignedService = constants.Sas.KeyService,
     SignedVersion = constants.Sas.KeyVersion,
     Value         = constants.Sas.KeyValue
 };
Ejemplo n.º 7
0
        public void ToSasQueryParameters_NullSharedKeyCredentialTest()
        {
            // Arrange
            var constants      = new TestConstants(this);
            var containerName  = this.GetNewContainerName();
            var blobName       = this.GetNewBlobName();
            var blobSasBuilder = this.BuildBlobSasBuilder(includeBlob: true, includeSnapshot: true, containerName, blobName, constants);

            // Act
            Assert.Throws <ArgumentNullException>(() => blobSasBuilder.ToSasQueryParameters(null), "sharedKeyCredential");
        }
Ejemplo n.º 8
0
        public void FileSasBuilder_NullSharedKeyCredentialTest()
        {
            // Arrange
            var constants      = new TestConstants(this);
            var shareName      = this.GetNewShareName();
            var filePath       = this.GetNewDirectoryName();
            var fileSasBuilder = this.BuildFileSasBuilder(includeVersion: true, includeFilePath: true, constants, shareName, filePath);

            // Act
            Assert.Throws <ArgumentNullException>(() => fileSasBuilder.ToSasQueryParameters(null), "sharedKeyCredential");
        }
        private string BuildSignature(TestConstants constants, string queueName, bool includeVersion)
        {
            var stringToSign = String.Join("\n",
                                           Permissions,
                                           SasQueryParameters.FormatTimesForSasSigning(constants.Sas.StartTime),
                                           SasQueryParameters.FormatTimesForSasSigning(constants.Sas.ExpiryTime),
                                           "/queue/" + constants.Sas.Account + "/" + queueName,
                                           constants.Sas.Identifier,
                                           constants.Sas.IPRange.ToString(),
                                           SasProtocol.Https.ToString(),
                                           includeVersion ? constants.Sas.Version:  SasQueryParameters.SasVersion);

            return(constants.Sas.SharedKeyCredential.ComputeHMACSHA256(stringToSign));
        }
        private QueueSasBuilder BuildQueueSasBuilder(TestConstants constants, string queueName, bool includeVersion)
        {
            var queueSasBuilder = new QueueSasBuilder
            {
                Version     = null,
                Protocol    = constants.Sas.Protocol,
                StartTime   = constants.Sas.StartTime,
                ExpiryTime  = constants.Sas.ExpiryTime,
                Permissions = Permissions,
                IPRange     = constants.Sas.IPRange,
                Identifier  = constants.Sas.Identifier,
                QueueName   = queueName,
            };

            if (includeVersion)
            {
                queueSasBuilder.Version = constants.Sas.Version;
            }

            return(queueSasBuilder);
        }
        public void QueueSasBuilder_ToSasQueryParameters_NoVersionTest()
        {
            // Arrange
            var constants       = new TestConstants(this);
            var queueName       = this.GetNewQueueName();
            var queueSasBuilder = this.BuildQueueSasBuilder(constants, queueName, includeVersion: false);
            var signature       = this.BuildSignature(constants, queueName, includeVersion: false);

            // Act
            var sasQueryParameters = queueSasBuilder.ToSasQueryParameters(constants.Sas.SharedKeyCredential);

            // Assert
            Assert.AreEqual(SasQueryParameters.SasVersion, sasQueryParameters.Version);
            Assert.AreEqual(String.Empty, sasQueryParameters.Services);
            Assert.AreEqual(String.Empty, sasQueryParameters.ResourceTypes);
            Assert.AreEqual(SasProtocol.Https, sasQueryParameters.Protocol);
            Assert.AreEqual(constants.Sas.StartTime, sasQueryParameters.StartTime);
            Assert.AreEqual(constants.Sas.ExpiryTime, sasQueryParameters.ExpiryTime);
            Assert.AreEqual(constants.Sas.IPRange, sasQueryParameters.IPRange);
            Assert.AreEqual(constants.Sas.Identifier, sasQueryParameters.Identifier);
            Assert.AreEqual(String.Empty, sasQueryParameters.Resource);
            Assert.AreEqual(Permissions, sasQueryParameters.Permissions);
            Assert.AreEqual(signature, sasQueryParameters.Signature);
        }
Ejemplo n.º 12
0
        private string BuildIdentitySignature(bool includeBlob, bool includeSnapshot, string containerName, string blobName, TestConstants constants)
        {
            var canonicalName = includeBlob ? $"/blob/{constants.Sas.Account}/{containerName}/{blobName}"
                : $"/blob/{constants.Sas.Account}/{containerName}";

            var resource = Constants.Sas.Resource.Container;

            if (includeBlob && includeSnapshot)
            {
                resource = Constants.Sas.Resource.BlobSnapshot;
            }
            else if (includeBlob)
            {
                resource = Constants.Sas.Resource.Blob;
            }

            var stringToSign = String.Join("\n",
                                           Permissions,
                                           SasQueryParameters.FormatTimesForSasSigning(constants.Sas.StartTime),
                                           SasQueryParameters.FormatTimesForSasSigning(constants.Sas.ExpiryTime),
                                           canonicalName,
                                           constants.Sas.KeyOid,
                                           constants.Sas.KeyTid,
                                           SasQueryParameters.FormatTimesForSasSigning(constants.Sas.KeyStart),
                                           SasQueryParameters.FormatTimesForSasSigning(constants.Sas.KeyExpiry),
                                           constants.Sas.KeyService,
                                           constants.Sas.KeyVersion,
                                           constants.Sas.IPRange.ToString(),
                                           constants.Sas.Protocol.ToString(),
                                           SasQueryParameters.SasVersion,
                                           resource,
                                           includeSnapshot ? Snapshot : null,
                                           constants.Sas.CacheControl,
                                           constants.Sas.ContentDisposition,
                                           constants.Sas.ContentEncoding,
                                           constants.Sas.ContentLanguage,
                                           constants.Sas.ContentType);

            return(this.ComputeHMACSHA256(constants.Sas.KeyValue, stringToSign));
        }
Ejemplo n.º 13
0
 private BlobSasBuilder BuildBlobSasBuilder(bool includeBlob, bool includeSnapshot, string containerName, string blobName, TestConstants constants)
 => new BlobSasBuilder
 {
     Version            = null,
     Protocol           = constants.Sas.Protocol,
     StartTime          = constants.Sas.StartTime,
     ExpiryTime         = constants.Sas.ExpiryTime,
     Permissions        = Permissions,
     IPRange            = constants.Sas.IPRange,
     Identifier         = constants.Sas.Identifier,
     ContainerName      = containerName,
     BlobName           = includeBlob ? blobName : null,
     Snapshot           = includeSnapshot ? Snapshot : null,
     CacheControl       = constants.Sas.CacheControl,
     ContentDisposition = constants.Sas.ContentDisposition,
     ContentEncoding    = constants.Sas.ContentEncoding,
     ContentLanguage    = constants.Sas.ContentLanguage,
     ContentType        = constants.Sas.ContentType
 };
Ejemplo n.º 14
0
        private FileSasBuilder BuildFileSasBuilder(bool includeVersion, bool includeFilePath, TestConstants constants, string shareName, string filePath)
        {
            var fileSasBuilder = new FileSasBuilder
            {
                Version            = null,
                Protocol           = constants.Sas.Protocol,
                StartTime          = constants.Sas.StartTime,
                ExpiryTime         = constants.Sas.ExpiryTime,
                Permissions        = Permissions,
                IPRange            = constants.Sas.IPRange,
                Identifier         = constants.Sas.Identifier,
                ShareName          = shareName,
                FilePath           = "",
                CacheControl       = constants.Sas.CacheControl,
                ContentDisposition = constants.Sas.ContentDisposition,
                ContentEncoding    = constants.Sas.ContentEncoding,
                ContentLanguage    = constants.Sas.ContentLanguage,
                ContentType        = constants.Sas.ContentType
            };

            if (includeVersion)
            {
                fileSasBuilder.Version = constants.Sas.Version;
            }

            if (includeFilePath)
            {
                fileSasBuilder.FilePath = filePath;
            }

            return(fileSasBuilder);
        }