Skip to content

Commit 825c548

Browse files
fix: Restore ability to connect Azure blob storage with SAS (#25)
1 parent 6a402b3 commit 825c548

File tree

2 files changed

+34
-21
lines changed

2 files changed

+34
-21
lines changed

src/VirtoCommerce.AzureBlobAssetsModule.Core/AzureBlobProvider.cs

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -564,14 +564,18 @@ private static string GetParentUrl(Uri baseUri, string blobPrefix)
564564
{
565565
var baseUriString = baseUri.GetLeftPart(UriPartial.Path);
566566
var baseUriQuery = baseUri.Query;
567-
return GetParentUrl(baseUriString, blobPrefix, baseUriQuery);
567+
var result = GetParentUrl(baseUriString, blobPrefix, baseUriQuery);
568+
569+
return result;
568570
}
569571

570572
private static string GetParentUrl(string baseUri, string blobPrefix, string query = null)
571573
{
572574
var segments = GetOutlineFromUrl(blobPrefix);
573575
var parentPath = string.Join(Delimiter, segments.Take(segments.Length - 1));
574-
return GetAbsoluteUri(new Uri(baseUri), parentPath, query).AbsoluteUri;
576+
var result = GetAbsoluteUri(baseUri, parentPath, query).AbsoluteUri;
577+
578+
return result;
575579
}
576580

577581
private string GetRelativeUrl(Uri absoluteUri)
@@ -591,35 +595,36 @@ private string GetRelativeUrl(Uri absoluteUri)
591595
return result;
592596
}
593597

594-
private static Uri GetAbsoluteUri(Uri baseUri, string inputUrl, string query)
598+
public static Uri GetAbsoluteUri(Uri baseUri, string inputUrl)
599+
{
600+
ArgumentNullException.ThrowIfNull(baseUri);
601+
ArgumentException.ThrowIfNullOrEmpty(inputUrl);
602+
603+
var baseUriString = baseUri.GetLeftPart(UriPartial.Path);
604+
var baseUriQuery = baseUri.Query;
605+
var result = GetAbsoluteUri(baseUriString, inputUrl, baseUriQuery);
606+
607+
return result;
608+
}
609+
610+
private static Uri GetAbsoluteUri(string baseUri, string inputUrl, string query)
595611
{
596612
var result = GetAbsoluteUri(baseUri, inputUrl);
597613

598614
if (!string.IsNullOrEmpty(query))
599615
{
600-
if (string.IsNullOrEmpty(query))
601-
{
602-
return result;
603-
}
604-
605-
var builder = new UriBuilder(result)
606-
{
607-
Query = query,
608-
};
609-
return builder.Uri;
616+
result = new UriBuilder(result) { Query = query }.Uri;
610617
}
611618

612619
return result;
613620
}
614621

615-
public static Uri GetAbsoluteUri(Uri baseUri, string inputUrl)
622+
private static Uri GetAbsoluteUri(string baseUri, string inputUrl)
616623
{
617-
ArgumentNullException.ThrowIfNull(nameof(inputUrl));
618-
619-
// base uri should be end with delimiter. see tests
620-
if (!baseUri.AbsolutePath.EndsWith(Delimiter))
624+
// base uri should be ended with delimiter. see tests
625+
if (!baseUri.EndsWith(Delimiter))
621626
{
622-
baseUri = new Uri(baseUri.AbsoluteUri + Delimiter);
627+
baseUri += Delimiter;
623628
}
624629

625630
// do trim lead slash to prevent transform it to absolute file path on linux.
@@ -638,9 +643,9 @@ public static Uri GetAbsoluteUri(Uri baseUri, string inputUrl)
638643
inputUrl = "./" + inputUrl;
639644
}
640645

641-
if (Uri.TryCreate(baseUri, inputUrl, out resultUri))
646+
// If the input URL is relative, combine it with the base URI
647+
if (Uri.TryCreate(new Uri(baseUri), inputUrl, out resultUri))
642648
{
643-
// If the input URL is relative, combine it with the base URI
644649
return resultUri;
645650
}
646651

tests/VirtoCommerce.Platform.Assets.AzureBlobStorage.Tests/AzureBlobStorageProviderTests.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,14 @@ public void GetAbsoluteUri_StaticMethod(string baseUrl, string inputUrl, string
143143
Assert.Equal(absoluteUrl, AzureBlobProvider.GetAbsoluteUri(new Uri(baseUrl), inputUrl).AbsoluteUri);
144144
}
145145

146+
[Theory]
147+
[InlineData("https://qademovc3.core.windows.net/cms/test?sv=2022-11-02&ss=b&srt=co&sp", "Catalog/", "https://qademovc3.core.windows.net/cms/test/Catalog/?sv=2022-11-02&ss=b&srt=co&sp")]
148+
[InlineData("https://qademovc3.core.windows.net/cms/test?sv=2022-11-02&ss=b&srt=co&sp", "/Catalog", "https://qademovc3.core.windows.net/cms/test/Catalog?sv=2022-11-02&ss=b&srt=co&sp")]
149+
[InlineData("https://qademovc3.core.windows.net/cms/test?sv=2022-11-02&ss=b&srt=co&sp", "/Catalog/", "https://qademovc3.core.windows.net/cms/test/Catalog/?sv=2022-11-02&ss=b&srt=co&sp")]
150+
public void GetAbsoluteUriWithParameters_StaticMethod(string baseUrl, string inputUrl, string absoluteUrl)
151+
{
152+
Assert.Equal(absoluteUrl, AzureBlobProvider.GetAbsoluteUri(new Uri(baseUrl), inputUrl).AbsoluteUri);
153+
}
146154

147155
private static void ValidateFailure<TOptions>(OptionsValidationException ex, string name = "", int count = 1, params string[] errorsToMatch)
148156
{

0 commit comments

Comments
 (0)