public static SasResourceType ParseSasResourceType(string signedResourceType) { if (string.IsNullOrWhiteSpace(signedResourceType)) { throw new ArgumentException("signedResourceType"); } SasResourceType sasResourceType = SasResourceType.None; for (int i = 0; i < signedResourceType.Length; i++) { char chr = signedResourceType[i]; if (chr == 'c') { sasResourceType = AccountSasHelper.ValidateAndAddResourceType(sasResourceType, SasResourceType.Container, i); } else if (chr == 'o') { sasResourceType = AccountSasHelper.ValidateAndAddResourceType(sasResourceType, SasResourceType.Object, i); } else { if (chr != 's') { throw new FormatException(string.Concat("Unexpected character ", signedResourceType[i], " in signed resource type")); } sasResourceType = AccountSasHelper.ValidateAndAddResourceType(sasResourceType, SasResourceType.Service, i); } } return(sasResourceType); }
private static SasResourceType ValidateAndAddResourceType(SasResourceType currResourceTypes, SasResourceType newResourceType, int position) { if ((currResourceTypes & newResourceType) == newResourceType) { object[] objArray = new object[] { "Invalid duplicate service. Error at index ", position, " of ", currResourceTypes }; throw new FormatException(string.Concat(objArray)); } currResourceTypes |= newResourceType; return(currResourceTypes); }
public SASAuthorizationParameters CheckAccessWithMultiplePermissions(IAccountIdentifier requestor, string resourceAccount, string resourceContainer, string resourceIdentifier, PermissionLevel requiredPermission, SasType supportedSasTypes, SasResourceType requiredResourceType, List <SASPermission> requiredSasPermissions, TimeSpan timeout) { SASAuthorizationParameters sASAuthorizationParameter; AuthorizationResult authorizationResult = null; Duration startingNow = Duration.StartingNow; SASAuthorizationParameters sASAuthorizationParameter1 = new SASAuthorizationParameters() { SupportedSasTypes = supportedSasTypes, SignedResourceType = requiredResourceType }; SASAuthorizationParameters current = sASAuthorizationParameter1; List <SASPermission> .Enumerator enumerator = requiredSasPermissions.GetEnumerator(); try { do { if (!enumerator.MoveNext()) { break; } current.SignedPermission = enumerator.Current; IAsyncResult asyncResult = this.BeginAuthorizeRequest(requestor, resourceAccount, resourceContainer, resourceIdentifier, requiredPermission, current, startingNow.Remaining(timeout), null, null); authorizationResult = this.EndAuthorizeRequest(asyncResult); if (!authorizationResult.Authorized) { continue; } sASAuthorizationParameter = current; return(sASAuthorizationParameter); }while (authorizationResult.Authorized || authorizationResult.FailureReason == AuthorizationFailureReason.PermissionMismatch); if (requestor == null || !requestor.IsSecondaryAccess || !AuthorizationManager.IsWritePermission(requiredPermission)) { throw new NephosUnauthorizedAccessException(resourceAccount, resourceContainer, resourceIdentifier, requestor, requiredPermission, authorizationResult.FailureReason); } throw new SecondaryWriteNotAllowedException(); } finally { ((IDisposable)enumerator).Dispose(); } return(sASAuthorizationParameter); }