Ejemplo n.º 1
0
 public TableDataServiceBase(TableProtocolHead tableProtocolHead, IAccountIdentifier identifier, IUtilityTableDataContextFactory factory, bool operationIsConditional, Dictionary <string, string> continuationToken, RequestStartedCallback requestStartedCallback, CheckPermissionDelegate checkPermissionCallback, QueryRowCommandPropertiesAvailableCallback queryRowCommandPropertiesAvailableCallback, ContinuationTokenAvailableCallback continuationTokenAvailableCallback)
 {
     if (factory == null)
     {
         throw new ArgumentNullException("factory");
     }
     if (tableProtocolHead == null)
     {
         throw new ArgumentNullException("tableProtocolHead");
     }
     this.dataSource            = factory.CreateDataContext(identifier, tableProtocolHead.ServiceOperationContext.AccountName, tableProtocolHead.RequestRestVersion);
     this.dataSource.ApiVersion = tableProtocolHead.RequestRestVersion;
     this.dataSource.OldMetricsTableNamesDeprecated = tableProtocolHead.IsRequestVersionAtLeast("2013-08-15");
     this.dataSource.IsBatchRequest          = tableProtocolHead.IsBatchRequest();
     this.dataSource.OperationIsConditional  = operationIsConditional;
     this.dataSource.ContinuationToken       = continuationToken;
     this.dataSource.RequestStartedCallback  = requestStartedCallback;
     this.dataSource.CheckPermissionCallback = checkPermissionCallback;
     this.dataSource.QueryRowCommandPropertiesAvailableCallback = queryRowCommandPropertiesAvailableCallback;
     this.dataSource.ContinuationTokenAvailableCallback         = continuationTokenAvailableCallback;
     this.tableProtocolHead = tableProtocolHead;
     if (VersioningHelper.CompareVersions(tableProtocolHead.RequestRestVersion, "2016-05-31") >= 0)
     {
         this.dataSource.Timeout = tableProtocolHead.operationContext.RemainingTimeout();
     }
 }
Ejemplo n.º 2
0
        private static string GetCanonicalizedResource(NephosUriComponents uriComponents, string tableName, string signedVersion)
        {
            NephosAssertionException.Assert(!string.IsNullOrEmpty(uriComponents.AccountName));
            NephosAssertionException.Assert(!string.IsNullOrEmpty(tableName));
            StringBuilder stringBuilder = new StringBuilder();

            if (signedVersion != null && VersioningHelper.CompareVersions(signedVersion, "2015-02-21") >= 0)
            {
                stringBuilder.Append("/table");
            }
            stringBuilder.Append("/");
            stringBuilder.Append(uriComponents.AccountName);
            stringBuilder.Append("/");
            stringBuilder.Append(tableName.ToLower());
            return(stringBuilder.ToString());
        }
Ejemplo n.º 3
0
        private static string GetCanonicalizedResource(NephosUriComponents uriComponents, SASAccessLevel signedResource, string signedVersion)
        {
            NephosAssertionException.Assert(!string.IsNullOrEmpty(uriComponents.AccountName));
            NephosAssertionException.Assert(!string.IsNullOrEmpty(uriComponents.ContainerName));
            StringBuilder stringBuilder = new StringBuilder();

            if (signedVersion != null && VersioningHelper.CompareVersions(signedVersion, "2015-02-21") >= 0)
            {
                stringBuilder.Append("/blob");
            }
            stringBuilder.Append("/");
            stringBuilder.Append(uriComponents.AccountName);
            stringBuilder.Append("/");
            stringBuilder.Append(uriComponents.ContainerName);
            if (signedResource == SASAccessLevel.Blob)
            {
                NephosAssertionException.Assert(!string.IsNullOrEmpty(uriComponents.RemainingPart));
                stringBuilder.Append("/");
                stringBuilder.Append(uriComponents.RemainingPart);
            }
            return(stringBuilder.ToString());
        }
Ejemplo n.º 4
0
 private void ValidateSASVersion(string sasVersion)
 {
     sasVersion = sasVersion.Trim();
     if (!VersioningConfigurationLookup.Instance.IsValidVersion(sasVersion) || VersioningHelper.CompareVersions(sasVersion, "2012-02-12") < 0)
     {
         FutureVersionProtocolException.ThrowIfFutureVersion(sasVersion);
         throw new AuthenticationFailureException(string.Format("{0} is either not in the correct format or is not equal or later than version {1}", "sv", "2012-02-12"));
     }
     base.SignedVersion = sasVersion;
 }
Ejemplo n.º 5
0
        private IEnumerator <IAsyncResult> PerformOperationImpl(IAccountIdentifier identifier, string accountName, TableProtocolHead tableProtocolHead, RequestStartedCallback requestStartedCallback, CheckPermissionDelegate checkPermissionCallback, QueryRowCommandPropertiesAvailableCallback queryRowCommandPropertiesAvailableCallback, Dictionary <string, string> continuationToken, ContinuationTokenAvailableCallback continuationTokenAvailableCallback, bool operationIsConditional, RequestContext requestContext, AsyncIteratorContext <NoResults> context)
        {
            TimeSpan maxValue = TimeSpan.MaxValue;

            if (VersioningHelper.CompareVersions(tableProtocolHead.RequestRestVersion, "2016-05-31") >= 0)
            {
                maxValue = tableProtocolHead.operationContext.RemainingTimeout();
            }
            IAsyncResult workerThread = this.authorizationManager.BeginCheckAccess(identifier, accountName, null, null, PermissionLevel.Owner, maxValue, context.GetResumeCallback(), context.GetResumeState("AuthorizationManager.BeginCheckAccess"));

            yield return(workerThread);

            this.authorizationManager.EndCheckAccess(workerThread);
            using (Stream bufferPoolMemoryStream = new BufferPoolMemoryStream(65536))
            {
                bool flag = false;
                if (tableProtocolHead.ShouldReadRequestBody)
                {
                    long requestContentLength = tableProtocolHead.RequestContentLength;
                    if (requestContentLength > (long)4194304)
                    {
                        IStringDataEventStream verbose = Logger <IRestProtocolHeadLogger> .Instance.Verbose;
                        object[] objArray = new object[] { requestContentLength, 4194304 };
                        verbose.Log("Content-Length is out of range. Content-Length={0} MaxRequestBodySize={1}", objArray);
                        if (!tableProtocolHead.IsBatchRequest())
                        {
                            if (VersioningHelper.CompareVersions(tableProtocolHead.RequestRestVersion, "2013-08-15") < 0)
                            {
                                throw new RequestTooLargeException();
                            }
                            throw new RequestEntityTooLargeException(new long?((long)4194304));
                        }
                        flag = true;
                        requestContentLength = (long)102400;
                    }
                    else if (requestContentLength == (long)-1)
                    {
                        requestContentLength = (long)4194305;
                    }
                    Logger <IRestProtocolHeadLogger> .Instance.Verbose.Log("Started asynchronously reading from input stream");

                    if (VersioningHelper.CompareVersions(tableProtocolHead.RequestRestVersion, "2016-05-31") >= 0)
                    {
                        maxValue = tableProtocolHead.operationContext.RemainingTimeout();
                    }
                    workerThread = AsyncStreamCopy.BeginAsyncStreamCopy(tableProtocolHead.RequestStream, bufferPoolMemoryStream, requestContentLength, 65536, maxValue, context.GetResumeCallback(), context.GetResumeState("BeginAsyncStreamCopy"));
                    yield return(workerThread);

                    long num = AsyncStreamCopy.EndAsyncStreamCopy(workerThread);
                    bufferPoolMemoryStream.Seek((long)0, SeekOrigin.Begin);
                    tableProtocolHead.RequestStream = bufferPoolMemoryStream;
                    Logger <IRestProtocolHeadLogger> .Instance.Verbose.Log("Finished reading from input stream");

                    workerThread = AsyncHelpers.BeginSwitchToWorkerThread(context.GetResumeCallback(), context.GetResumeState("PerformOperationImpl"));
                    yield return(workerThread);

                    AsyncHelpers.EndSwitchToWorkerThread(workerThread);
                    Logger <IRestProtocolHeadLogger> .Instance.Verbose.Log("Switched to a WorkerThread");

                    if (num > (long)4194304)
                    {
                        IStringDataEventStream stringDataEventStream = Logger <IRestProtocolHeadLogger> .Instance.Verbose;
                        object[] requestContentLength1 = new object[] { tableProtocolHead.RequestContentLength, 4194304, num };
                        stringDataEventStream.Log("Request body is too long. Content-Length={0} MaxRequestBodySize={1} BytesRead={2}", requestContentLength1);
                        if (!tableProtocolHead.IsBatchRequest())
                        {
                            if (VersioningHelper.CompareVersions(tableProtocolHead.RequestRestVersion, "2013-08-15") < 0)
                            {
                                throw new RequestTooLargeException();
                            }
                            throw new RequestEntityTooLargeException(new long?((long)4194304));
                        }
                        flag = true;
                    }
                }
                if (!flag)
                {
                    this.DispatchRequestToAstoria(identifier, tableProtocolHead, requestStartedCallback, checkPermissionCallback, queryRowCommandPropertiesAvailableCallback, continuationToken, continuationTokenAvailableCallback, operationIsConditional);
                }
                else
                {
                    Logger <IRestProtocolHeadLogger> .Instance.Error.Log("Batch request body is too long. Sending error batch response now.");

                    if (VersioningHelper.CompareVersions(tableProtocolHead.RequestRestVersion, "2013-08-15") >= 0)
                    {
                        throw new RequestEntityTooLargeException(new long?((long)4194304));
                    }
                    string            str = tableProtocolHead.ReadContentIdFromRequest(100, 102400);
                    TableProtocolHead tableProtocolHead1 = tableProtocolHead;
                    string            str1 = str;
                    if (str1 == null)
                    {
                        str1 = "1";
                    }
                    tableProtocolHead1.SendBatchRequestTooLargeResponse(str1);
                }
            }
        }
Ejemplo n.º 6
0
        public override byte[] ComputeUrlDecodedUtf8EncodedStringToSign()
        {
            StringBuilder stringBuilder = new StringBuilder();

            if (base.SignedPermission.HasValue)
            {
                stringBuilder.Append(base.QueryParams["sp"]);
            }
            stringBuilder.Append("\n");
            if (base.SignedStart.HasValue)
            {
                stringBuilder.Append(base.QueryParams["st"]);
            }
            stringBuilder.Append("\n");
            if (base.SignedExpiry.HasValue)
            {
                stringBuilder.Append(base.QueryParams["se"]);
            }
            stringBuilder.Append("\n");
            stringBuilder.Append(BlobSignedAccessHelper.GetCanonicalizedResource(base.UriComponents, this.SignedResource, base.SignedVersion));
            stringBuilder.Append("\n");
            if (base.SignedIdentifier != null)
            {
                stringBuilder.Append(base.QueryParams["si"]);
            }
            if (base.SignedVersion != null)
            {
                if (VersioningHelper.CompareVersions(base.SignedVersion, "2015-04-05") >= 0)
                {
                    stringBuilder.Append("\n");
                    if (base.QueryParams["sip"] != null)
                    {
                        stringBuilder.Append(base.QueryParams["sip"]);
                    }
                    stringBuilder.Append("\n");
                    string item = base.QueryParams["spr"];
                    if (item != null)
                    {
                        stringBuilder.Append(item);
                    }
                }
                stringBuilder.Append("\n");
                stringBuilder.Append(base.QueryParams["sv"]);
                if (VersioningHelper.CompareVersions(base.SignedVersion, "2013-08-15") >= 0)
                {
                    stringBuilder.Append("\n");
                    if (base.QueryParams["rscc"] != null)
                    {
                        stringBuilder.Append(base.QueryParams["rscc"]);
                    }
                    stringBuilder.Append("\n");
                    if (base.QueryParams["rscd"] != null)
                    {
                        stringBuilder.Append(base.QueryParams["rscd"]);
                    }
                    stringBuilder.Append("\n");
                    if (base.QueryParams["rsce"] != null)
                    {
                        stringBuilder.Append(base.QueryParams["rsce"]);
                    }
                    stringBuilder.Append("\n");
                    if (base.QueryParams["rscl"] != null)
                    {
                        stringBuilder.Append(base.QueryParams["rscl"]);
                    }
                    stringBuilder.Append("\n");
                    if (base.QueryParams["rsct"] != null)
                    {
                        stringBuilder.Append(base.QueryParams["rsct"]);
                    }
                }
            }
            if (base.SignedExtraPermission.HasValue)
            {
                stringBuilder.Append("\n");
                stringBuilder.Append(base.QueryParams["sep"]);
            }
            return((new UTF8Encoding()).GetBytes(stringBuilder.ToString()));
        }
Ejemplo n.º 7
0
        public static byte[] ComputeUrlDecodedUtf8EncodedStringToSign(NameValueCollection queryParams, NephosUriComponents uriComponents)
        {
            string        item          = queryParams["st"];
            string        str           = queryParams["se"];
            string        item1         = queryParams["sp"];
            string        str1          = queryParams["sr"];
            string        item2         = queryParams["si"];
            string        str2          = queryParams["sip"];
            string        item3         = queryParams["spr"];
            string        str3          = queryParams["sv"];
            StringBuilder stringBuilder = new StringBuilder();

            stringBuilder.Append(item1 ?? string.Empty);
            stringBuilder.Append("\n");
            stringBuilder.Append(item ?? string.Empty);
            stringBuilder.Append("\n");
            stringBuilder.Append(str ?? string.Empty);
            stringBuilder.Append("\n");
            stringBuilder.Append(BlobSignedAccessHelper.GetCanonicalizedResource(uriComponents, SASUtilities.ParseSasAccessLevel(str1), str3));
            stringBuilder.Append("\n");
            stringBuilder.Append(item2 ?? string.Empty);
            if (str3 != null)
            {
                if (VersioningHelper.CompareVersions(str3, "2015-04-05") >= 0)
                {
                    stringBuilder.Append("\n");
                    stringBuilder.Append(str2 ?? string.Empty);
                    stringBuilder.Append("\n");
                    stringBuilder.Append(item3 ?? string.Empty);
                }
                stringBuilder.Append("\n");
                stringBuilder.Append(queryParams["sv"]);
                if (VersioningHelper.CompareVersions(str3, "2014-02-14") >= 0)
                {
                    stringBuilder.Append("\n");
                    if (queryParams["rscc"] != null)
                    {
                        stringBuilder.Append(queryParams["rscc"]);
                    }
                    stringBuilder.Append("\n");
                    if (queryParams["rscd"] != null)
                    {
                        stringBuilder.Append(queryParams["rscd"]);
                    }
                    stringBuilder.Append("\n");
                    if (queryParams["rsce"] != null)
                    {
                        stringBuilder.Append(queryParams["rsce"]);
                    }
                    stringBuilder.Append("\n");
                    if (queryParams["rscl"] != null)
                    {
                        stringBuilder.Append(queryParams["rscl"]);
                    }
                    stringBuilder.Append("\n");
                    if (queryParams["rsct"] != null)
                    {
                        stringBuilder.Append(queryParams["rsct"]);
                    }
                }
            }
            if (queryParams["sep"] != null)
            {
                stringBuilder.Append("\n");
                stringBuilder.Append(queryParams["sep"]);
            }
            return((new UTF8Encoding()).GetBytes(stringBuilder.ToString()));
        }