< Summary

Class:Azure.Data.Tables.Sas.TableAccountSasQueryParameters
Assembly:Azure.Data.Tables
File(s):C:\Git\azure-sdk-for-net\sdk\tables\Azure.Data.Tables\src\Sas\TableAccountSasQueryParameters.cs
Covered lines:35
Uncovered lines:32
Coverable lines:67
Total lines:230
Line coverage:52.2% (35 of 67)
Covered branches:7
Total branches:60
Branch coverage:11.6% (7 of 60)

Metrics

MethodCyclomatic complexity Line coverage Branch coverage
get_Version()-100%50%
get_ResourceTypes()-100%100%
get_Protocol()-100%100%
get_StartsOn()-100%100%
get_ExpiresOn()-100%100%
get_IPRange()-100%100%
get_Identifier()-100%100%
get_Resource()-100%100%
get_Permissions()-100%50%
get_Signature()-100%50%
.ctor()-0%100%
.ctor(...)-100%100%
.ctor(...)-0%0%
ToString()-100%100%

File(s)

C:\Git\azure-sdk-for-net\sdk\tables\Azure.Data.Tables\src\Sas\TableAccountSasQueryParameters.cs

#LineLine coverage
 1// Copyright (c) Microsoft Corporation. All rights reserved.
 2// Licensed under the MIT License.
 3
 4using System;
 5using System.Collections.Generic;
 6using System.Globalization;
 7using System.Linq;
 8using System.Text;
 9
 10namespace Azure.Data.Tables.Sas
 11{
 12    /// <summary>
 13    /// A <see cref="TableAccountSasQueryParameters"/> object represents the components
 14    /// that make up an Azure Storage Shared Access Signature's query
 15    /// parameters.  You can construct a new instance using
 16    /// <see cref="TableAccountSasBuilder"/>.
 17    ///
 18    /// For more information, <see href="https://docs.microsoft.com/en-us/rest/api/storageservices/create-account-sas">C
 19    /// </summary>
 20    public class TableAccountSasQueryParameters
 21    {
 22        // sv
 23        private readonly string _version;
 24
 25        // srt
 26        private TableAccountSasResourceTypes? _resourceTypes;
 27
 28        // spr
 29        private readonly TableSasProtocol _protocol;
 30
 31        // st
 32        private DateTimeOffset _startTime;
 33
 34        // se
 35        private DateTimeOffset _expiryTime;
 36
 37        // sip
 38        private readonly TableSasIPRange _ipRange;
 39
 40        // si
 41        private readonly string _identifier;
 42
 43        // sr
 44        private readonly string _resource;
 45
 46        // sp
 47        private readonly string _permissions;
 48
 49        // sig
 50        private readonly string _signature;
 51
 52        /// <summary>
 53        /// The default service version to use for Shared Access Signatures.
 54        /// </summary>
 55        internal const string DefaultSasVersion = TableConstants.Sas.DefaultSasVersion;
 56
 57        /// <summary>
 58        /// Gets the storage service version to use to authenticate requests
 59        /// made with this shared access signature, and the service version to
 60        /// use when handling requests made with this shared access signature.
 61        /// </summary>
 8062        public string Version => _version ?? TableConstants.Sas.DefaultSasVersion;
 63
 64        /// <summary>
 65        /// Gets which resources are accessible via the shared access signature.
 66        /// </summary>
 7267        public TableAccountSasResourceTypes? ResourceTypes => _resourceTypes;
 68
 69        /// <summary>
 70        /// Optional. Specifies the protocol permitted for a request made with
 71        /// the shared access signature.
 72        /// </summary>
 4073        public TableSasProtocol Protocol => _protocol;
 74
 75        /// <summary>
 76        /// Gets the optional time at which the shared access signature becomes
 77        /// valid.  If omitted, start time for this call is assumed to be the
 78        /// time when the storage service receives the request.
 79        /// <see cref="DateTimeOffset.MinValue"/> means not set.
 80        /// </summary>
 4081        public DateTimeOffset StartsOn => _startTime;
 82
 83        /// <summary>
 84        /// Gets the time at which the shared access signature becomes invalid.
 85        /// <see cref="DateTimeOffset.MinValue"/> means not set.
 86        /// </summary>
 8087        public DateTimeOffset ExpiresOn => _expiryTime;
 88        /// <summary>
 89        /// Gets the optional IP address or a range of IP addresses from which
 90        /// to accept requests.  When specifying a range, note that the range
 91        /// is inclusive.
 92        /// </summary>
 4093        public TableSasIPRange IPRange => _ipRange;
 94
 95        /// <summary>
 96        /// Gets the optional unique value up to 64 characters in length that
 97        /// correlates to an access policy specified for the blob container, queue,
 98        /// or share.
 99        /// </summary>
 40100        public string Identifier => _identifier ?? string.Empty;
 101
 102        /// <summary>
 103        /// Gets the resources are accessible via the shared access signature.
 104        /// </summary>
 40105        public string Resource => _resource ?? string.Empty;
 106
 107        /// <summary>
 108        /// Gets the permissions associated with the shared access signature.
 109        /// The user is restricted to operations allowed by the permissions.
 110        /// This field must be omitted if it has been specified in an
 111        /// associated stored access policy.
 112        /// </summary>
 80113        public string Permissions => _permissions ?? string.Empty;
 114
 115        /// <summary>
 116        /// The signature is an HMAC computed over the string-to-sign and key
 117        /// using the SHA256 algorithm, and then encoded using Base64 encoding.
 118        /// </summary>
 80119        public string Signature => _signature ?? string.Empty;
 120
 121        internal TableAccountSasQueryParameters()
 0122            : base()
 123        {
 0124        }
 125
 126        /// <summary>
 127        /// Creates a new TableAccountSasQueryParameters instance.
 128        /// </summary>
 40129        internal TableAccountSasQueryParameters(
 40130            string version,
 40131            TableAccountSasResourceTypes? resourceTypes,
 40132            TableSasProtocol protocol,
 40133            DateTimeOffset startsOn,
 40134            DateTimeOffset expiresOn,
 40135            TableSasIPRange ipRange,
 40136            string identifier,
 40137            string resource,
 40138            string permissions,
 40139            string signature)
 140        {
 40141            _version = version;
 40142            _resourceTypes = resourceTypes;
 40143            _protocol = protocol;
 40144            _startTime = startsOn;
 40145            _expiryTime = expiresOn;
 40146            _ipRange = ipRange;
 40147            _identifier = identifier;
 40148            _resource = resource;
 40149            _permissions = permissions;
 40150            _signature = signature;
 151
 40152        }
 153
 154        /// <summary>
 155        /// Creates a new instance of the <see cref="TableAccountSasQueryParameters"/>
 156        /// type based on the supplied query parameters <paramref name="values"/>.
 157        /// All SAS-related query parameters will be removed from
 158        /// <paramref name="values"/>.
 159        /// </summary>
 160        /// <param name="values">URI query parameters</param>
 0161        internal TableAccountSasQueryParameters(
 0162            IDictionary<string, string> values)
 163        {
 164            // make copy, otherwise we'll get an exception when we remove
 0165            IEnumerable<KeyValuePair<string, string>> kvps = values.ToArray();
 0166            foreach (KeyValuePair<string, string> kv in kvps)
 167            {
 168                // these are already decoded
 0169                var isSasKey = true;
 0170                switch (kv.Key.ToUpperInvariant())
 171                {
 172                    case TableConstants.Sas.Parameters.VersionUpper:
 0173                        _version = kv.Value;
 0174                        break;
 175                    case TableConstants.Sas.Parameters.ResourceTypesUpper:
 0176                        _resourceTypes = TableSasExtensions.ParseResourceTypes(kv.Value);
 0177                        break;
 178                    case TableConstants.Sas.Parameters.ProtocolUpper:
 0179                        _protocol = TableSasExtensions.ParseProtocol(kv.Value);
 0180                        break;
 181                    case TableConstants.Sas.Parameters.StartTimeUpper:
 0182                        _startTime = DateTimeOffset.ParseExact(kv.Value, TableConstants.Sas.SasTimeFormat, CultureInfo.I
 0183                        break;
 184                    case TableConstants.Sas.Parameters.ExpiryTimeUpper:
 0185                        _expiryTime = DateTimeOffset.ParseExact(kv.Value, TableConstants.Sas.SasTimeFormat, CultureInfo.
 0186                        break;
 187                    case TableConstants.Sas.Parameters.IPRangeUpper:
 0188                        _ipRange = TableSasIPRange.Parse(kv.Value);
 0189                        break;
 190                    case TableConstants.Sas.Parameters.IdentifierUpper:
 0191                        _identifier = kv.Value;
 0192                        break;
 193                    case TableConstants.Sas.Parameters.ResourceUpper:
 0194                        _resource = kv.Value;
 0195                        break;
 196                    case TableConstants.Sas.Parameters.PermissionsUpper:
 0197                        _permissions = kv.Value;
 0198                        break;
 199                    case TableConstants.Sas.Parameters.SignatureUpper:
 0200                        _signature = kv.Value;
 0201                        break;
 202
 203                    // We didn't recognize the query parameter
 204                    default:
 0205                        isSasKey = false;
 206                        break;
 207                }
 208
 209                // Remove the query parameter if it's part of the SAS
 0210                if (isSasKey)
 211                {
 0212                    values.Remove(kv.Key);
 213                }
 214            }
 0215        }
 216
 217        /// <summary>
 218        /// Convert the SAS query parameters into a URL encoded query string.
 219        /// </summary>
 220        /// <returns>
 221        /// A URL encoded query string representing the SAS.
 222        /// </returns>
 223        public override string ToString()
 224        {
 32225            StringBuilder sb = new StringBuilder();
 32226            this.AppendProperties(sb);
 32227            return sb.ToString();
 228        }
 229    }
 230}