Skip to content

Commit c6d93fb

Browse files
committed
SAS tokens based on access policies do not even allow to check the container exists
1 parent 58bc0dc commit c6d93fb

File tree

1 file changed

+44
-44
lines changed

1 file changed

+44
-44
lines changed

src/UmbracoFileSystemProviders.Azure/AzureFileSystem.cs

Lines changed: 44 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -615,61 +615,61 @@ private static CloudBlobContainer CreateContainer(CloudBlobClient cloudBlobClien
615615
}
616616

617617
CloudBlobContainer container = cloudBlobClient.GetContainerReference(containerName.ToLowerInvariant());
618-
if (!container.Exists())
619-
{
620-
if (cloudBlobClient.Credentials.IsSAS)
621-
{
622-
// Shared access signatures (SAS) have some limitations compared to shared access keys
623-
// read more on: https://docs.microsoft.com/en-us/azure/storage/common/storage-dotnet-shared-access-signature-part-1
624-
string[] sasTokenProperties = cloudBlobClient.Credentials.SASToken.Split("&".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
625-
bool isAccountSas = sasTokenProperties.Where(k => k.ToLowerInvariant().StartsWith("ss=")).FirstOrDefault() != null;
626618

627-
string allowedServices = sasTokenProperties.Where(k => k.ToLowerInvariant().StartsWith("ss=")).FirstOrDefault();
628-
if (allowedServices != null)
629-
{
630-
allowedServices = allowedServices.Split('=')[1].ToLower();
631-
}
632-
else
633-
{
634-
allowedServices = string.Empty;
635-
}
636619

637-
string resourceTypes = sasTokenProperties.Where(k => k.ToLowerInvariant().StartsWith("srt=")).FirstOrDefault();
638-
if (resourceTypes != null)
639-
{
640-
resourceTypes = resourceTypes.Split('=')[1].ToLower();
641-
}
642-
else
643-
{
644-
resourceTypes = string.Empty;
645-
}
620+
if (cloudBlobClient.Credentials.IsSAS)
621+
{
622+
// Shared access signatures (SAS) have some limitations compared to shared access keys
623+
// read more on: https://docs.microsoft.com/en-us/azure/storage/common/storage-dotnet-shared-access-signature-part-1
624+
string[] sasTokenProperties = cloudBlobClient.Credentials.SASToken.Split("&".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
625+
bool isAccountSas = sasTokenProperties.Where(k => k.ToLowerInvariant().StartsWith("ss=")).FirstOrDefault() != null;
646626

647-
string permissions = sasTokenProperties.Where(k => k.ToLowerInvariant().StartsWith("sp=")).FirstOrDefault();
648-
if (permissions != null)
649-
{
650-
permissions = permissions.Split('=')[1].ToLower();
651-
}
652-
else
653-
{
654-
permissions = string.Empty;
655-
}
627+
string allowedServices = sasTokenProperties.Where(k => k.ToLowerInvariant().StartsWith("ss=")).FirstOrDefault();
628+
if (allowedServices != null)
629+
{
630+
allowedServices = allowedServices.Split('=')[1].ToLower();
631+
}
632+
else
633+
{
634+
allowedServices = string.Empty;
635+
}
656636

657-
bool canCreateContainer = allowedServices.Contains('b') && resourceTypes.Contains('c') && permissions.Contains('c');
658-
if (canCreateContainer)
659-
{
660-
container.CreateIfNotExists();
637+
string resourceTypes = sasTokenProperties.Where(k => k.ToLowerInvariant().StartsWith("srt=")).FirstOrDefault();
638+
if (resourceTypes != null)
639+
{
640+
resourceTypes = resourceTypes.Split('=')[1].ToLower();
641+
}
642+
else
643+
{
644+
resourceTypes = string.Empty;
645+
}
661646

662-
// cannot set permissions with sas access
663-
}
647+
string permissions = sasTokenProperties.Where(k => k.ToLowerInvariant().StartsWith("sp=")).FirstOrDefault();
648+
if (permissions != null)
649+
{
650+
permissions = permissions.Split('=')[1].ToLower();
664651
}
665652
else
653+
{
654+
permissions = string.Empty;
655+
}
656+
657+
bool canCreateContainer = allowedServices.Contains('b') && resourceTypes.Contains('c') && permissions.Contains('c');
658+
if (canCreateContainer)
666659
{
667660
container.CreateIfNotExists();
668-
BlobContainerPermissions newPermissions = container.GetPermissions();
669-
newPermissions.PublicAccess = accessType;
670-
container.SetPermissions(newPermissions);
661+
662+
// cannot set permissions with sas access
671663
}
672664
}
665+
else if (!container.Exists())
666+
{
667+
container.CreateIfNotExists();
668+
BlobContainerPermissions newPermissions = container.GetPermissions();
669+
newPermissions.PublicAccess = accessType;
670+
container.SetPermissions(newPermissions);
671+
}
672+
673673

674674
return container;
675675
}

0 commit comments

Comments
 (0)