Skip to content

Commit 0337fb5

Browse files
Merge remote-tracking branch 'refs/remotes/origin/feature/independent-container' into develop
2 parents 3e48bb7 + 110e4a5 commit 0337fb5

19 files changed

+142
-65
lines changed

build/transforms/FileSystemProviders.config.install.xdt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@
1717
Defaults to 365 days.
1818
-->
1919
<add key="maxDays" value="365" xdt:Locator="Match(key)" xdt:Transform="InsertIfMissing" />
20+
<!--
21+
When true this allows the VirtualPathProvider to use the deafult "media" route prefix regardless
22+
of the container name.
23+
-->
24+
<add key="useDefaultRoute" value="true" xdt:Locator="Match(key)" xdt:Transform="InsertIfMissing" />
2025
</Parameters>
2126
</Provider>
2227
<!--

src/UmbracoFileSystemProviders.Azure.Installer/Configurator/Controllers/Configure.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,8 @@ configApp.controller("Loader", function ($scope, $http, $log) {
3636
$scope.capitalizeFirstLetter = function (string) {
3737
return string.charAt(0).toUpperCase() + string.slice(1);
3838
}
39+
40+
$scope.getInputType = function (param) {
41+
return param.toUpperCase() === "USEDEFAULTROUTE" ? "checkbox" : "text";
42+
}
3943
});

src/UmbracoFileSystemProviders.Azure.Installer/Configurator/Views/Configure.ascx

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,8 @@
3737
<ng-form name="form">
3838
<label class="control-label" for="param.Key">{{ capitalizeFirstLetter(param.Key) }}</label>
3939
<div class="controls">
40-
<input
41-
class ="input-block-level"
42-
dynamic-name="param.Key"
43-
type="text"
44-
ng-model="param.Value"
45-
required
46-
>
40+
<span ng-if="getInputType(param.Key) === 'checkbox'" ng-include="'/App_Plugins/UmbracoFileSystemProviders/Azure/Install/Configurator/Views/checkbox.htm'"></span>
41+
<span ng-if="getInputType(param.Key) === 'text'" ng-include="'/App_Plugins/UmbracoFileSystemProviders/Azure/Install/Configurator/Views/textfield.htm'"></span>
4742
</div>
4843
<span data-ng-show=" {{'form.'+param.Key+'.$dirty && form.'+param.Key+'.$error.required'}}">Required!</span>
4944
</ng-form>
@@ -78,4 +73,5 @@
7873
</div>
7974

8075
</div>
81-
</div>
76+
</div>
77+
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<input class="input-block-level"
2+
dynamic-name="param.Key"
3+
type="checkbox"
4+
ng-model="param.Value"
5+
ng-true-value="true"
6+
ng-false-value="false">
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<input class="input-block-level"
2+
dynamic-name="param.Key"
3+
type="text"
4+
ng-model="param.Value"
5+
required>

src/UmbracoFileSystemProviders.Azure.Installer/InstallerController.cs

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -62,16 +62,20 @@ public IEnumerable<Parameter> GetParameters()
6262
[HttpPost]
6363
public InstallerStatus PostParameters(IEnumerable<Parameter> parameters)
6464
{
65-
var connection = parameters.SingleOrDefault(k => k.Key == "connectionString").Value;
66-
var containerName = parameters.SingleOrDefault(k => k.Key == "containerName").Value;
67-
var rootUrl = parameters.SingleOrDefault(k => k.Key == "rootUrl").Value;
65+
var newParameters = parameters as IList<Parameter> ?? parameters.ToList();
66+
var connection = newParameters.SingleOrDefault(k => k.Key == "connectionString").Value;
67+
var containerName = newParameters.SingleOrDefault(k => k.Key == "containerName").Value;
68+
bool useDefaultRoute = bool.Parse(newParameters.SingleOrDefault(k => k.Key == "useDefaultRoute").Value);
69+
var rootUrl = newParameters.SingleOrDefault(k => k.Key == "rootUrl").Value;
6870

6971
if (!TestAzureCredentials(connection, containerName))
7072
{
7173
return InstallerStatus.ConnectionError;
7274
}
7375

74-
if (SaveParametersToFileSystemProvidersXdt(this.fileSystemProvidersConfigInstallXdtPath, parameters) && SaveContainerNameToWebConfigXdt(this.webConfigXdtPath, containerName))
76+
var routePrefix = useDefaultRoute ? Azure.Constants.DefaultMediaRoute : containerName;
77+
78+
if (SaveParametersToFileSystemProvidersXdt(this.fileSystemProvidersConfigInstallXdtPath, newParameters) && SaveContainerNameToWebConfigXdt(this.webConfigXdtPath, routePrefix))
7579
{
7680
if (!ExecuteFileSystemConfigTransform() || !ExecuteWebConfigTransform())
7781
{
@@ -85,7 +89,7 @@ public InstallerStatus PostParameters(IEnumerable<Parameter> parameters)
8589
else
8690
{
8791
// merge in storage url to ImageProcessor security.config xdt
88-
SaveBlobPathToImageProcessorSecurityXdt(ImageProcessorSecurityInstallXdtPath, rootUrl, containerName);
92+
SaveBlobPathToImageProcessorSecurityXdt(ImageProcessorSecurityInstallXdtPath, rootUrl, routePrefix, containerName);
8993

9094
// transform ImageProcessor security.config
9195
if (ExecuteImageProcessorSecurityConfigTransform())
@@ -180,7 +184,10 @@ internal static bool SaveContainerNameToWebConfigXdt(string xdtPath, string cont
180184
nsMgr.AddNamespace("xdt", strNamespace);
181185

182186
var locationElement = document.SelectSingleNode(string.Format("//location"));
183-
if (locationElement != null) locationElement.Attributes["path"].Value = containerName;
187+
if (locationElement != null)
188+
{
189+
locationElement.Attributes["path"].Value = containerName;
190+
}
184191

185192
try
186193
{
@@ -199,7 +206,7 @@ internal static bool SaveContainerNameToWebConfigXdt(string xdtPath, string cont
199206
return result;
200207
}
201208

202-
internal static bool SaveBlobPathToImageProcessorSecurityXdt(string xdtPath, string rootUrl, string containerName)
209+
internal static bool SaveBlobPathToImageProcessorSecurityXdt(string xdtPath, string rootUrl, string prefix, string containerName)
203210
{
204211
var result = false;
205212

@@ -214,11 +221,11 @@ internal static bool SaveBlobPathToImageProcessorSecurityXdt(string xdtPath, str
214221

215222
foreach (XmlElement service in rawServices)
216223
{
217-
service.SetAttribute("prefix", $"{containerName}/");
224+
service.SetAttribute("prefix", $"{prefix}/");
218225
}
219226

220227
// Set the settings within the InsertIfMissing action
221-
var rawSettings = document.SelectNodes($"//services/service[@prefix = '{containerName}/' and @name = '{ImageProcessorSecurityServiceName}' and @type = '{ImageProcessorSecurityServiceType}']/settings/setting");
228+
var rawSettings = document.SelectNodes($"//services/service[@prefix = '{prefix}/' and @name = '{ImageProcessorSecurityServiceName}' and @type = '{ImageProcessorSecurityServiceType}']/settings/setting");
222229
if (rawSettings == null)
223230
{
224231
return false;
@@ -249,14 +256,14 @@ internal static bool SaveBlobPathToImageProcessorSecurityXdt(string xdtPath, str
249256
internal static IEnumerable<Parameter> GetParametersFromXdt(string xdtPath, string configPath)
250257
{
251258
// For package upgrades check for configured values in existing FileSystemProviders.config and merge with the Parameters from the XDT file (there could be new ones)
252-
var xdtParameters = GetParametersFromXml(xdtPath);
253-
var currentConfigParameters = GetParametersFromXml(configPath);
259+
List<Parameter> xdtParameters = GetParametersFromXml(xdtPath).ToList();
260+
List<Parameter> currentConfigParameters = GetParametersFromXml(configPath).ToList();
254261

255-
foreach (var parameter in xdtParameters)
262+
foreach (Parameter parameter in xdtParameters)
256263
{
257264
if (currentConfigParameters.Select(k => k.Key).Contains(parameter.Key))
258265
{
259-
var currentParameter = currentConfigParameters.SingleOrDefault(k => k.Key == parameter.Key);
266+
Parameter currentParameter = currentConfigParameters.SingleOrDefault(k => k.Key == parameter.Key);
260267
if (currentParameter != null)
261268
{
262269
parameter.Value = currentParameter.Value;

src/UmbracoFileSystemProviders.Azure.Installer/UmbracoFileSystemProviders.Azure.Installer.csproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,9 +271,11 @@
271271
</ItemGroup>
272272
<ItemGroup>
273273
<Content Include="Configurator\Controllers\Configure.js" />
274+
<Content Include="Configurator\Views\checkbox.htm" />
274275
<Content Include="Configurator\Views\Configure.ascx">
275276
<SubType>ASPXCodeBehind</SubType>
276277
</Content>
278+
<Content Include="Configurator\Views\textfield.htm" />
277279
</ItemGroup>
278280
<ItemGroup>
279281
<Analyzer Include="..\packages\StyleCop.Analyzers.1.0.0-beta014\analyzers\dotnet\cs\Newtonsoft.Json.dll" />

src/UmbracoFileSystemProviders.Azure.Tests/AzureBlobFileSystemTestsBase.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,12 @@ public AzureBlobFileSystem CreateAzureBlobFileSystem(bool disableVirtualPathProv
4141
string rootUrl = "http://127.0.0.1:10000/devstoreaccount1/";
4242
string connectionString = "UseDevelopmentStorage=true";
4343
string maxDays = "30";
44+
string useDefaultRoute = "true";
4445

4546
Mock<ILogHelper> logHelper = new Mock<ILogHelper>();
4647
Mock<IMimeTypeResolver> mimeTypeHelper = new Mock<IMimeTypeResolver>();
4748

48-
return new AzureBlobFileSystem(containerName, rootUrl, connectionString, maxDays)
49+
return new AzureBlobFileSystem(containerName, rootUrl, connectionString, maxDays, useDefaultRoute)
4950
{
5051
FileSystem =
5152
{

src/UmbracoFileSystemProviders.Azure.Tests/FileSystemProviders.config.install.xdt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
</Provider>
99

1010
<Provider alias="media" type="Our.Umbraco.FileSystemProviders.Azure.AzureBlobFileSystem, Our.Umbraco.FileSystemProviders.Azure" xdt:Locator="Match(type)" xdt:Transform="InsertIfMissing">
11-
<Parameters xdt:Transform="InsertIfMissing">
11+
<Parameters xdt:Transform="InsertIfMissing">
1212
<add key="containerName" value="media" xdt:Locator="Match(key)" xdt:Transform="InsertIfMissing" />
1313
<add key="rootUrl" value="http://[myAccountName].blob.core.windows.net/" xdt:Locator="Match(key)" xdt:Transform="InsertIfMissing" />
1414
<add key="connectionString" value="DefaultEndpointsProtocol=https;AccountName=[myAccountName];AccountKey=[myAccountKey]" xdt:Locator="Match(key)" xdt:Transform="InsertIfMissing" />
@@ -17,6 +17,11 @@
1717
Defaults to 365 days.
1818
-->
1919
<add key="maxDays" value="365" xdt:Locator="Match(key)" xdt:Transform="InsertIfMissing" />
20+
<!--
21+
When true this allows the VirtualPathProvider to use the deafult "media" route prefix regardless
22+
of the container name.
23+
-->
24+
<add key="useDefaultRoute" value="true" xdt:Locator="Match(key)" xdt:Transform="InsertIfMissing" />
2025
</Parameters>
2126
</Provider>
2227
<!--
Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,24 @@
11
<?xml version="1.0"?>
22
<FileSystemProviders>
3-
3+
44
<!-- Media -->
55
<Provider alias="media" type="Our.Umbraco.FileSystemProviders.Azure.AzureBlobFileSystem, Our.Umbraco.FileSystemProviders.Azure">
6-
<Parameters>
7-
<add key="containerName" value="media"/>
8-
<add key="rootUrl" value="http://existing123456789.blob.core.windows.net/"/>
9-
<add key="connectionString"
6+
<Parameters>
7+
<add key="containerName" value="media"/>
8+
<add key="rootUrl" value="http://existing123456789.blob.core.windows.net/"/>
9+
<add key="connectionString"
1010
value="DefaultEndpointsProtocol=https;AccountName=existing123456789;AccountKey=existingKey"/>
11-
<!--
11+
<!--
1212
Optional configuration value determining the maximum number of days to cache items in the browser.
1313
Defaults to 365 days.
1414
-->
15-
<add key="maxDays" value="365"/>
16-
</Parameters>
15+
<add key="maxDays" value="365"/>
16+
<!--
17+
When true this allows the VirtualPathProvider to use the deafult "media" route prefix regardless
18+
of the container name.
19+
-->
20+
<add key="useDefaultRoute" value="true"/>
21+
</Parameters>
1722
</Provider>
18-
23+
1924
</FileSystemProviders>

0 commit comments

Comments
 (0)