/// <summary> /// Creates a new SasQueryParameters instance. /// </summary> protected SasQueryParameters( string version, AccountSasServices?services, AccountSasResourceTypes?resourceTypes, SasProtocol protocol, DateTimeOffset startsOn, DateTimeOffset expiresOn, SasIPRange ipRange, string identifier, string resource, string permissions, string signature, string cacheControl = default, string contentDisposition = default, string contentEncoding = default, string contentLanguage = default, string contentType = default) { _version = version; _services = services; _resourceTypes = resourceTypes; _protocol = protocol; _startTime = startsOn; _expiryTime = expiresOn; _ipRange = ipRange; _identifier = identifier; _resource = resource; _permissions = permissions; _signature = signature; _cacheControl = cacheControl; _contentDisposition = contentDisposition; _contentEncoding = contentEncoding; _contentLanguage = contentLanguage; _contentType = contentType; }
/// <summary> /// Creates a new SasQueryParameters instance. /// </summary> protected static SasQueryParameters Create( string version, AccountSasServices?services, AccountSasResourceTypes?resourceTypes, SasProtocol protocol, DateTimeOffset startsOn, DateTimeOffset expiresOn, SasIPRange ipRange, string identifier, string resource, string permissions, string signature, string cacheControl = default, string contentDisposition = default, string contentEncoding = default, string contentLanguage = default, string contentType = default) => new SasQueryParameters( version, services, resourceTypes, protocol, startsOn, expiresOn, ipRange, identifier, resource, permissions, signature, cacheControl, contentDisposition, contentEncoding, contentLanguage, contentType);
/// <summary> /// Creates a new BlobSasQueryParameters instance. /// </summary> internal BlobSasQueryParameters( string version, AccountSasServices?services, AccountSasResourceTypes?resourceTypes, SasProtocol protocol, DateTimeOffset startsOn, DateTimeOffset expiresOn, SasIPRange ipRange, string identifier, string resource, string permissions, string signature, string keyOid = default, string keyTid = default, DateTimeOffset keyStart = default, DateTimeOffset keyExpiry = default, string keyService = default, string keyVersion = default, string cacheControl = default, string contentDisposition = default, string contentEncoding = default, string contentLanguage = default, string contentType = default, string authorizedAadObjectId = default, string unauthorizedAadObjectId = default, string correlationId = default, string encryptionScope = default) : base( version, services, resourceTypes, protocol, startsOn, expiresOn, ipRange, identifier, resource, permissions, signature, cacheControl, contentDisposition, contentEncoding, contentLanguage, contentType, authorizedAadObjectId, unauthorizedAadObjectId, correlationId, directoryDepth: null, encryptionScope) { KeyProperties = new UserDelegationKeyProperties { ObjectId = keyOid, TenantId = keyTid, StartsOn = keyStart, ExpiresOn = keyExpiry, Service = keyService, Version = keyVersion }; }
/// <summary> /// Gets a string representation of the protocol. /// </summary> /// <returns>A string representation of the protocol.</returns> internal static string ToProtocolString(this SasProtocol protocol) { switch (protocol) { case SasProtocol.Https: return(HttpsName); case SasProtocol.HttpsAndHttp: return(HttpsAndHttpName); case SasProtocol.None: default: return(null); } }
/// <summary> /// Creates a new instance of the <see cref="SasQueryParameters"/> type. /// /// Expects decoded values. /// </summary> internal SasQueryParameters( string version, AccountSasServices?services, AccountSasResourceTypes?resourceTypes, SasProtocol protocol, DateTimeOffset startsOn, DateTimeOffset expiresOn, SasIPRange ipRange, string identifier, string resource, string permissions, string signature, string keyOid = default, string keyTid = default, DateTimeOffset keyStart = default, DateTimeOffset keyExpiry = default, string keyService = default, string keyVersion = default, string cacheControl = default, string contentDisposition = default, string contentEncoding = default, string contentLanguage = default, string contentType = default) { // Assume URL-decoded _version = version ?? DefaultSasVersion; _services = services; _resourceTypes = resourceTypes; _protocol = protocol; _startTime = startsOn; _expiryTime = expiresOn; _ipRange = ipRange; _identifier = identifier ?? string.Empty; _resource = resource ?? string.Empty; _permissions = permissions ?? string.Empty; _signature = signature ?? string.Empty; // Should never be null _keyObjectId = keyOid; _keyTenantId = keyTid; _keyStart = keyStart; _keyExpiry = keyExpiry; _keyService = keyService; _keyVersion = keyVersion; _cacheControl = cacheControl; _contentDisposition = contentDisposition; _contentEncoding = contentEncoding; _contentLanguage = contentLanguage; _contentType = contentType; }
/// <summary> /// Creates a new instance of the <see cref="BlobSasQueryParameters"/> /// type. /// /// Expects decoded values. /// </summary> internal BlobSasQueryParameters( string version, string services, string resourceTypes, SasProtocol protocol, DateTimeOffset startTime, DateTimeOffset expiryTime, IPRange ipRange, string identifier, string resource, string permissions, string signature, string keyOid = default, string keyTid = default, DateTimeOffset keyStart = default, DateTimeOffset keyExpiry = default, string keyService = default, string keyVersion = default, string cacheControl = default, string contentDisposition = default, string contentEncoding = default, string contentLanguage = default, string contentType = default) : base( version, services, resourceTypes, protocol, startTime, expiryTime, ipRange, identifier, resource, permissions, signature, keyOid, keyTid, keyStart, keyExpiry, keyService, keyVersion, cacheControl, contentDisposition, contentEncoding, contentLanguage, contentType) { }
/// <summary> /// Creates a new SasQueryParameters instance. /// </summary> protected SasQueryParameters( string version, AccountSasServices?services, AccountSasResourceTypes?resourceTypes, SasProtocol protocol, DateTimeOffset startsOn, DateTimeOffset expiresOn, SasIPRange ipRange, string identifier, string resource, string permissions, string signature, string cacheControl = default, string contentDisposition = default, string contentEncoding = default, string contentLanguage = default, string contentType = default, string authorizedAadObjectId = default, string unauthorizedAadObjectId = default, string correlationId = default, int?directoryDepth = default) { _version = version; _services = services; _resourceTypes = resourceTypes; _protocol = protocol; _startTime = startsOn; _startTimeString = startsOn.ToString(Constants.SasTimeFormatSeconds, CultureInfo.InvariantCulture); _expiryTime = expiresOn; _expiryTimeString = expiresOn.ToString(Constants.SasTimeFormatSeconds, CultureInfo.InvariantCulture); _ipRange = ipRange; _identifier = identifier; _resource = resource; _permissions = permissions; _signature = signature; _cacheControl = cacheControl; _contentDisposition = contentDisposition; _contentEncoding = contentEncoding; _contentLanguage = contentLanguage; _contentType = contentType; _preauthorizedAgentObjectId = authorizedAadObjectId; _agentObjectId = unauthorizedAadObjectId; _correlationId = correlationId; _directoryDepth = directoryDepth; }
internal static new SasQueryParameters Create( string version, AccountSasServices?services, AccountSasResourceTypes?resourceTypes, SasProtocol protocol, DateTimeOffset startsOn, DateTimeOffset expiresOn, SasIPRange ipRange, string identifier, string resource, string permissions, string signature, string cacheControl = default, string contentDisposition = default, string contentEncoding = default, string contentLanguage = default, string contentType = default, string authorizedAadObjectId = default, string unauthorizedAadObjectId = default, string correlationId = default, int?directoryDepth = default, string encryptionScope = default) => SasQueryParameters.Create( version: version, services: services, resourceTypes: resourceTypes, protocol: protocol, startsOn: startsOn, expiresOn: expiresOn, ipRange: ipRange, identifier: identifier, resource: resource, permissions: permissions, signature: signature, cacheControl: cacheControl, contentDisposition: contentDisposition, contentEncoding: contentEncoding, contentLanguage: contentLanguage, contentType: contentType, authorizedAadObjectId: authorizedAadObjectId, unauthorizedAadObjectId: unauthorizedAadObjectId, correlationId: correlationId, directoryDepth: directoryDepth, encryptionScope: encryptionScope);
/// <summary> /// Creates a new instance of the <see cref="SasQueryParameters"/> type. /// /// Expects decoded values. /// </summary> internal SasQueryParameters( string version, string services, string resourceTypes, SasProtocol protocol, DateTimeOffset startTime, DateTimeOffset expiryTime, IPRange ipRange, string identifier, string resource, string permissions, string signature, string keyOid = default, string keyTid = default, DateTimeOffset keyStart = default, DateTimeOffset keyExpiry = default, string keyService = default, string keyVersion = default) { // Assume URL-decoded this.version = version ?? DefaultSasVersion; this.services = services ?? String.Empty; this.resourceTypes = resourceTypes ?? String.Empty; this.protocol = protocol; this.startTime = startTime; this.expiryTime = expiryTime; this.ipRange = ipRange; this.identifier = identifier ?? String.Empty; this.resource = resource ?? String.Empty; this.permissions = permissions ?? String.Empty; this.signature = signature ?? String.Empty; // Should never be null this.keyObjectId = keyOid; this.keyTenantId = keyTid; this.keyStart = keyStart; this.keyExpiry = keyExpiry; this.keyService = keyService; this.keyVersion = keyVersion; }
/// <summary> /// Creates a new instance of the <see cref="BlobSasQueryParameters"/> /// type. /// /// Expects decoded values. /// </summary> internal BlobSasQueryParameters( string version, string services, string resourceTypes, SasProtocol protocol, DateTimeOffset startTime, DateTimeOffset expiryTime, IPRange ipRange, string identifier, string resource, string permissions, string signature, string keyOid = default, string keyTid = default, DateTimeOffset keyStart = default, DateTimeOffset keyExpiry = default, string keyService = default, string keyVersion = default) : base( version, services, resourceTypes, protocol, startTime, expiryTime, ipRange, identifier, resource, permissions, signature, keyOid, keyTid, keyStart, keyExpiry, keyService, keyVersion) { }
/// <summary> /// Creates a new instance of the <see cref="SasQueryParameters"/> type /// based on the supplied query parameters <paramref name="values"/>. /// All SAS-related query parameters will be removed from /// <paramref name="values"/>. /// </summary> /// <param name="values">URI query parameters</param> /// <param name="includeBlobParameters"> /// Optional flag indicating whether to process blob-specific query /// parameters. The default value is false. /// </param> internal SasQueryParameters( UriQueryParamsCollection values, bool includeBlobParameters = false) { // make copy, otherwise we'll get an exception when we remove IEnumerable <KeyValuePair <string, string> > kvps = values.ToArray(); foreach (KeyValuePair <string, string> kv in kvps) { // these are already decoded var isSasKey = true; switch (kv.Key.ToUpperInvariant()) { case Constants.Sas.Parameters.VersionUpper: _version = kv.Value; break; case Constants.Sas.Parameters.ServicesUpper: _services = SasExtensions.ParseAccountServices(kv.Value); break; case Constants.Sas.Parameters.ResourceTypesUpper: _resourceTypes = SasExtensions.ParseResourceTypes(kv.Value); break; case Constants.Sas.Parameters.ProtocolUpper: _protocol = SasExtensions.ParseProtocol(kv.Value); break; case Constants.Sas.Parameters.StartTimeUpper: _startTime = DateTimeOffset.ParseExact(kv.Value, Constants.SasTimeFormat, CultureInfo.InvariantCulture); break; case Constants.Sas.Parameters.ExpiryTimeUpper: _expiryTime = DateTimeOffset.ParseExact(kv.Value, Constants.SasTimeFormat, CultureInfo.InvariantCulture); break; case Constants.Sas.Parameters.IPRangeUpper: _ipRange = SasIPRange.Parse(kv.Value); break; case Constants.Sas.Parameters.IdentifierUpper: _identifier = kv.Value; break; case Constants.Sas.Parameters.ResourceUpper: _resource = kv.Value; break; case Constants.Sas.Parameters.PermissionsUpper: _permissions = kv.Value; break; case Constants.Sas.Parameters.SignatureUpper: _signature = kv.Value; break; case Constants.Sas.Parameters.CacheControlUpper: _cacheControl = kv.Value; break; case Constants.Sas.Parameters.ContentDispositionUpper: _contentDisposition = kv.Value; break; case Constants.Sas.Parameters.ContentEncodingUpper: _contentEncoding = kv.Value; break; case Constants.Sas.Parameters.ContentLanguageUpper: _contentLanguage = kv.Value; break; case Constants.Sas.Parameters.ContentTypeUpper: _contentType = kv.Value; break; // Optionally include Blob parameters case Constants.Sas.Parameters.KeyObjectIdUpper: if (includeBlobParameters) { _keyObjectId = kv.Value; } else { isSasKey = false; } break; case Constants.Sas.Parameters.KeyTenantIdUpper: if (includeBlobParameters) { _keyTenantId = kv.Value; } else { isSasKey = false; } break; case Constants.Sas.Parameters.KeyStartUpper: if (includeBlobParameters) { _keyStart = DateTimeOffset.ParseExact(kv.Value, Constants.SasTimeFormat, CultureInfo.InvariantCulture); } else { isSasKey = false; } break; case Constants.Sas.Parameters.KeyExpiryUpper: if (includeBlobParameters) { _keyExpiry = DateTimeOffset.ParseExact(kv.Value, Constants.SasTimeFormat, CultureInfo.InvariantCulture); } else { isSasKey = false; } break; case Constants.Sas.Parameters.KeyServiceUpper: if (includeBlobParameters) { _keyService = kv.Value; } else { isSasKey = false; } break; case Constants.Sas.Parameters.KeyVersionUpper: if (includeBlobParameters) { _keyVersion = kv.Value; } else { isSasKey = false; } break; // We didn't recognize the query parameter default: isSasKey = false; break; } // Remove the query parameter if it's part of the SAS if (isSasKey) { values.Remove(kv.Key); } } }
/// <summary> /// Creates a new instance of the <see cref="SasQueryParameters"/> type /// based on the supplied query parameters <paramref name="values"/>. /// All SAS-related query parameters will be removed from /// <paramref name="values"/>. /// </summary> /// <param name="values">URI query parameters</param> protected SasQueryParameters(IDictionary <string, string> values) { // make copy, otherwise we'll get an exception when we remove IEnumerable <KeyValuePair <string, string> > kvps = values.ToArray(); foreach (KeyValuePair <string, string> kv in kvps) { // these are already decoded var isSasKey = true; switch (kv.Key.ToUpperInvariant()) { case Constants.Sas.Parameters.VersionUpper: _version = kv.Value; break; case Constants.Sas.Parameters.ServicesUpper: _services = SasExtensions.ParseAccountServices(kv.Value); break; case Constants.Sas.Parameters.ResourceTypesUpper: _resourceTypes = SasExtensions.ParseResourceTypes(kv.Value); break; case Constants.Sas.Parameters.ProtocolUpper: _protocol = SasExtensions.ParseProtocol(kv.Value); break; case Constants.Sas.Parameters.StartTimeUpper: _startTime = DateTimeOffset.ParseExact(kv.Value, Constants.SasTimeFormat, CultureInfo.InvariantCulture); break; case Constants.Sas.Parameters.ExpiryTimeUpper: _expiryTime = DateTimeOffset.ParseExact(kv.Value, Constants.SasTimeFormat, CultureInfo.InvariantCulture); break; case Constants.Sas.Parameters.IPRangeUpper: _ipRange = SasIPRange.Parse(kv.Value); break; case Constants.Sas.Parameters.IdentifierUpper: _identifier = kv.Value; break; case Constants.Sas.Parameters.ResourceUpper: _resource = kv.Value; break; case Constants.Sas.Parameters.PermissionsUpper: _permissions = kv.Value; break; case Constants.Sas.Parameters.SignatureUpper: _signature = kv.Value; break; case Constants.Sas.Parameters.CacheControlUpper: _cacheControl = kv.Value; break; case Constants.Sas.Parameters.ContentDispositionUpper: _contentDisposition = kv.Value; break; case Constants.Sas.Parameters.ContentEncodingUpper: _contentEncoding = kv.Value; break; case Constants.Sas.Parameters.ContentLanguageUpper: _contentLanguage = kv.Value; break; case Constants.Sas.Parameters.ContentTypeUpper: _contentType = kv.Value; break; case Constants.Sas.Parameters.PreauthorizedAgentObjectIdUpper: _preauthorizedAgentObjectId = kv.Value; break; case Constants.Sas.Parameters.AgentObjectIdUpper: _agentObjectId = kv.Value; break; case Constants.Sas.Parameters.CorrelationIdUpper: _correlationId = kv.Value; break; case Constants.Sas.Parameters.DirectoryDepthUpper: _directoryDepth = Convert.ToInt32(kv.Value, Constants.Base16); break; // We didn't recognize the query parameter default: isSasKey = false; break; } // Remove the query parameter if it's part of the SAS if (isSasKey) { values.Remove(kv.Key); } } }
/// <summary> /// Creates a new instance of the <see cref="SasQueryParameters"/> type /// based on the supplied query parameters <paramref name="values"/>. /// All SAS-related query parameters will be removed from /// <paramref name="values"/>. /// </summary> /// <param name="values">URI query parameters</param> /// <param name="includeBlobParameters"> /// Optional flag indicating whether to process blob-specific query /// parameters. The default value is false. /// </param> internal SasQueryParameters( UriQueryParamsCollection values, bool includeBlobParameters = false) { // make copy, otherwise we'll get an exception when we remove IEnumerable <KeyValuePair <string, string> > kvps = values.ToArray();; foreach (var kv in kvps) { // these are already decoded var isSasKey = true; switch (kv.Key.ToUpperInvariant()) { case Constants.Sas.Parameters.VersionUpper: this.version = kv.Value; break; case Constants.Sas.Parameters.ServicesUpper: this.services = kv.Value; break; case Constants.Sas.Parameters.ResourceTypesUpper: this.resourceTypes = kv.Value; break; case Constants.Sas.Parameters.ProtocolUpper: this.protocol = SasProtocol.Parse(kv.Value); break; case Constants.Sas.Parameters.StartTimeUpper: this.startTime = DateTimeOffset.ParseExact(kv.Value, TimeFormat, CultureInfo.InvariantCulture); break; case Constants.Sas.Parameters.ExpiryTimeUpper: this.expiryTime = DateTimeOffset.ParseExact(kv.Value, TimeFormat, CultureInfo.InvariantCulture); break; case Constants.Sas.Parameters.IPRangeUpper: this.ipRange = IPRange.Parse(kv.Value); break; case Constants.Sas.Parameters.IdentifierUpper: this.identifier = kv.Value; break; case Constants.Sas.Parameters.ResourceUpper: this.resource = kv.Value; break; case Constants.Sas.Parameters.PermissionsUpper: this.permissions = kv.Value; break; case Constants.Sas.Parameters.SignatureUpper: this.signature = kv.Value; break; // Optionally include Blob parameters case Constants.Sas.Parameters.KeyOidUpper: if (includeBlobParameters) { this.keyObjectId = kv.Value; } else { isSasKey = false; } break; case Constants.Sas.Parameters.KeyTidUpper: if (includeBlobParameters) { this.keyTenantId = kv.Value; } else { isSasKey = false; } break; case Constants.Sas.Parameters.KeyStartUpper: if (includeBlobParameters) { this.keyStart = DateTimeOffset.ParseExact(kv.Value, TimeFormat, CultureInfo.InvariantCulture); } else { isSasKey = false; } break; case Constants.Sas.Parameters.KeyExpiryUpper: if (includeBlobParameters) { this.keyExpiry = DateTimeOffset.ParseExact(kv.Value, TimeFormat, CultureInfo.InvariantCulture); } else { isSasKey = false; } break; case Constants.Sas.Parameters.KeyServiceUpper: if (includeBlobParameters) { this.keyService = kv.Value; } else { isSasKey = false; } break; case Constants.Sas.Parameters.KeyVersionUpper: if (includeBlobParameters) { this.keyVersion = kv.Value; } else { isSasKey = false; } break; // We didn't recognize the query parameter default: isSasKey = false; break; } // Remove the query parameter if it's part of the SAS if (isSasKey) { values.Remove(kv.Key); } } }