Skip to content

Commit 84a484a

Browse files
authored
Merge pull request #348 from benjaminhowarth1/master
Fixes #347
2 parents 68fd300 + f7410b8 commit 84a484a

File tree

4 files changed

+78
-8
lines changed

4 files changed

+78
-8
lines changed

LetsEncrypt-SiteExtension/Controllers/HomeController.cs

+22
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ public async Task<ActionResult> Index(AuthenticationModel model)
6262
return View(model);
6363
}
6464
var webappsettings = client.WebApps.ListSiteOrSlotAppSettings(model.ResourceGroupName, model.WebAppName, model.SiteSlotName);
65+
var connectionStrings = client.WebApps.ListConnectionStrings(model.ResourceGroupName, model.WebAppName);
6566
if (model.UpdateAppSettings)
6667
{
6768
var newAppSettingsValues = new Dictionary<string, string>{
@@ -74,6 +75,13 @@ public async Task<ActionResult> Index(AuthenticationModel model)
7475
{ AppSettingsAuthConfig.servicePlanResourceGroupNameKey, model.ServicePlanResourceGroupName },
7576
{ AppSettingsAuthConfig.useIPBasedSSL, model.UseIPBasedSSL.ToString().ToLowerInvariant() }
7677
};
78+
79+
var newConnectionStrings = new Dictionary<string, string>
80+
{
81+
{ AppSettingsAuthConfig.webjobDashboard, model.DashboardConnectionString },
82+
{ AppSettingsAuthConfig.webjobStorage, model.StorageConnectionString }
83+
};
84+
7785
foreach (var appsetting in newAppSettingsValues)
7886
{
7987
if (!webappsettings.Properties.ContainsKey(appsetting.Key))
@@ -86,8 +94,22 @@ public async Task<ActionResult> Index(AuthenticationModel model)
8694
}
8795
}
8896

97+
foreach (var connString in newConnectionStrings)
98+
{
99+
if (!connectionStrings.Properties.ContainsKey(connString.Key))
100+
{
101+
connectionStrings.Properties.Add(connString.Key, new ConnStringValueTypePair(connString.Value, ConnectionStringType.Custom));
102+
}
103+
else
104+
{
105+
connectionStrings.Properties[connString.Key] = new ConnStringValueTypePair(connString.Value, ConnectionStringType.Custom);
106+
}
107+
}
108+
89109
client.WebApps.UpdateSiteOrSlotAppSettings(model.ResourceGroupName, model.WebAppName, model.SiteSlotName, webappsettings);
110+
client.WebApps.UpdateConnectionStrings(model.ResourceGroupName, model.WebAppName, connectionStrings);
90111
ConfigurationManager.RefreshSection("appSettings");
112+
ConfigurationManager.RefreshSection("connectionStrings");
91113

92114
await path.ChallengeDirectory(true);
93115
}

LetsEncrypt-SiteExtension/Models/AuthenticationModel.cs

+14
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,18 @@ public bool UseIPBasedSSL
4646
get; set;
4747
}
4848

49+
[Required]
50+
public string DashboardConnectionString
51+
{
52+
get; set;
53+
}
54+
55+
[Required]
56+
public string StorageConnectionString
57+
{
58+
get; set;
59+
}
60+
4961
[Display(Name = "Update Application Settings and Virtual Directory (if needed)")]
5062
public bool UpdateAppSettings
5163
{
@@ -113,6 +125,8 @@ public static explicit operator AuthenticationModel(AppSettingsAuthConfig config
113125
SiteSlotName = config.SiteSlotName,
114126
WebRootPath = config.WebRootPath,
115127
RunFromPackage = config.RunFromPackage,
128+
DashboardConnectionString = config.DashboardConnectionString,
129+
StorageConnectionString = config.StorageConnectionString,
116130
};
117131
}
118132
}

LetsEncrypt-SiteExtension/Views/Home/Index.cshtml

+22-8
Original file line numberDiff line numberDiff line change
@@ -113,21 +113,21 @@
113113

114114
@if (Model.RunFromPackage && string.IsNullOrEmpty(Environment.GetEnvironmentVariable(LetsEncrypt.Azure.Core.Models.AppSettingsAuthConfig.webRootPath)))
115115
{
116-
<div class="alert alert-warning" role="alert">
117-
<p>Web Site was deployed using "Run From Package", the site extension will have to configure a virtual directory to ensure the challenge file can be browsable at http://your-site/.well-known/acme-challenge. </p>
116+
<div class="alert alert-warning" role="alert">
117+
<p>Web Site was deployed using "Run From Package", the site extension will have to configure a virtual directory to ensure the challenge file can be browsable at http://your-site/.well-known/acme-challenge. </p>
118118
119-
<p>If you already host content under /.well-known then you should not continue, instead you should follow the manual setup procedure at <a href="https://github.com/sjkp/letsencrypt-siteextension/wiki/Run-From-Package">https://github.com/sjkp/letsencrypt-siteextension/wiki/Run-From-Package</a></p>
120-
</div>
119+
<p>If you already host content under /.well-known then you should not continue, instead you should follow the manual setup procedure at <a href="https://github.com/sjkp/letsencrypt-siteextension/wiki/Run-From-Package">https://github.com/sjkp/letsencrypt-siteextension/wiki/Run-From-Package</a></p>
120+
</div>
121121
}
122122
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
123123
@{
124-
var authModel = (Model as LetsEncrypt.SiteExtension.Models.AuthenticationModel);
124+
var authModel = (Model as LetsEncrypt.SiteExtension.Models.AuthenticationModel);
125125
}
126126
@if (authModel != null && authModel.Error)
127127
{
128-
<div class="alert alert-danger" role="alert">
129-
@authModel.ErrorMessage
130-
</div>
128+
<div class="alert alert-danger" role="alert">
129+
@authModel.ErrorMessage
130+
</div>
131131
}
132132
<div class="form-group">
133133
@Html.LabelFor(model => model.Tenant, htmlAttributes: new { @class = "control-label col-md-2" })
@@ -198,6 +198,20 @@
198198
@Html.ValidationMessageFor(model => model.SiteSlotName, "", new { @class = "text-danger" })
199199
</div>
200200
</div>
201+
<div class="form-group">
202+
@Html.LabelFor(model => model.DashboardConnectionString, htmlAttributes: new { @class = "control-label col-md-2" })
203+
<div class="col-md-10">
204+
@Html.EditorFor(model => model.DashboardConnectionString, new { htmlAttributes = new { @class = "form-control" } })
205+
@Html.ValidationMessageFor(model => model.DashboardConnectionString, "", new { @class = "text-danger" })
206+
</div>
207+
</div>
208+
<div class="form-group">
209+
@Html.LabelFor(model => model.StorageConnectionString, htmlAttributes: new { @class = "control-label col-md-2" })
210+
<div class="col-md-10">
211+
@Html.EditorFor(model => model.StorageConnectionString, new { htmlAttributes = new { @class = "form-control" } })
212+
@Html.ValidationMessageFor(model => model.StorageConnectionString, "", new { @class = "text-danger" })
213+
</div>
214+
</div>
201215
<div class="form-group">
202216
@Html.LabelFor(model => model.UpdateAppSettings, htmlAttributes: new { @class = "control-label col-md-2" })
203217
<div class="col-md-10">

LetsEncrypt.SiteExtension.Core/AppSettingsAuthConfig.cs

+20
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ public class AppSettingsAuthConfig : IAzureWebAppEnvironment, IAcmeConfig
3535
public const string authorizationChallengeBlobStorageAccount = "letsencrypt:AuthorizationChallengeBlobStorageAccount";
3636
public const string authorizationChallengeBlobStorageContainer = "letsencrypt:AuthorizationChallengeBlobStorageContainer";
3737
public const string disableVirtualApplication = "letsencrypt:DisableVirtualApplication";
38+
public const string webjobDashboard = "AzureWebJobsDashboard";
39+
public const string webjobStorage = "AzureWebJobsStorage";
3840

3941
public AppSettingsAuthConfig()
4042
{
@@ -109,6 +111,24 @@ public string WebAppName
109111
}
110112
}
111113

114+
[Required(ErrorMessage = webjobDashboard + " connectionString is required")]
115+
public string DashboardConnectionString
116+
{
117+
get
118+
{
119+
return ConfigurationManager.ConnectionStrings[webjobDashboard].ConnectionString;
120+
}
121+
}
122+
123+
[Required(ErrorMessage = webjobStorage + " connectionString is required")]
124+
public string StorageConnectionString
125+
{
126+
get
127+
{
128+
return ConfigurationManager.ConnectionStrings[webjobStorage].ConnectionString;
129+
}
130+
}
131+
112132
public string WebRootPath
113133
{
114134
get

0 commit comments

Comments
 (0)