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(); } }
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()); }
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()); }
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; }
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); } } }
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())); }
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())); }