Fix the error thrown on enabling the "OpenId.Google" feature (#7556)

This commit is contained in:
Tha'er M. Al-Ajlouni
2017-04-13 22:31:11 +03:00
committed by Sébastien Ros
parent 8002d34d65
commit 324261ba80
28 changed files with 125 additions and 114 deletions

View File

@@ -1,7 +1,7 @@
namespace Orchard.OpenId.Constants { namespace Orchard.OpenId.Constants {
public class General { public class General {
public const string AuthenticationErrorUrl = "~/Authentication/Error"; public const string AuthenticationErrorUrl = "~/Authentication/Error";
public const string LogonCallbackUrl = "~/Users/Account/LogonCallback"; public const string LogonCallbackUrl = "/Users/Account/LogonCallback";
public const string OpenIdOwinMiddlewarePriority = "10"; public const string OpenIdOwinMiddlewarePriority = "10";
public const string LocalIssuer = "LOCAL AUTHORITY"; public const string LocalIssuer = "LOCAL AUTHORITY";
public const string FormsIssuer = "Forms"; public const string FormsIssuer = "Forms";

View File

@@ -6,6 +6,7 @@ using System.Web.Mvc;
using Microsoft.Owin.Security; using Microsoft.Owin.Security;
using Microsoft.Owin.Security.Cookies; using Microsoft.Owin.Security.Cookies;
using Microsoft.Owin.Security.OpenIdConnect; using Microsoft.Owin.Security.OpenIdConnect;
using Orchard.Environment.Configuration;
using Orchard.Environment.Extensions; using Orchard.Environment.Extensions;
using Orchard.Localization; using Orchard.Localization;
using Orchard.Logging; using Orchard.Logging;
@@ -99,7 +100,7 @@ namespace Orchard.OpenId.Controllers
TempData["ReturnUrl"] = returnUrl; TempData["ReturnUrl"] = returnUrl;
} }
var redirectUri = Url.Content(String.Concat(Constants.General.LogonCallbackUrl)); var redirectUri = Url.Content(GetCallbackPath(_orchardServices.WorkContext));
HttpContext.GetOwinContext().Authentication.Challenge(new AuthenticationProperties { RedirectUri = redirectUri }, openIdProvider); HttpContext.GetOwinContext().Authentication.Challenge(new AuthenticationProperties { RedirectUri = redirectUri }, openIdProvider);
} }
@@ -168,5 +169,17 @@ namespace Orchard.OpenId.Controllers
return user; return user;
} }
private string GetCallbackPath(WorkContext workContext)
{
var shellSettings = workContext.Resolve<ShellSettings>();
var tenantPrefix = shellSettings.RequestUrlPrefix;
var callbackUrl = string.IsNullOrWhiteSpace(tenantPrefix) ?
Constants.General.LogonCallbackUrl :
string.Format("/{0}{1}", tenantPrefix, Constants.General.LogonCallbackUrl);
return callbackUrl;
}
} }
} }

View File

@@ -21,19 +21,17 @@ namespace Orchard.OpenId.Models {
set { this.Store(x => x.PostLogoutRedirectUri, value); } set { this.Store(x => x.PostLogoutRedirectUri, value); }
} }
public bool IsValid { public bool IsValid() {
get { if (String.IsNullOrWhiteSpace(ClientId) ||
if (String.IsNullOrWhiteSpace(ClientId) || String.CompareOrdinal(ClientId, Constants.ActiveDirectoryFederationServices.DefaultClientId) == 0 ||
String.CompareOrdinal(ClientId, Constants.ActiveDirectoryFederationServices.DefaultClientId) == 0 || String.IsNullOrWhiteSpace(MetadataAddress) ||
String.IsNullOrWhiteSpace(MetadataAddress) || String.CompareOrdinal(MetadataAddress, Constants.ActiveDirectoryFederationServices.DefaultMetadataAddress) == 0 ||
String.CompareOrdinal(MetadataAddress, Constants.ActiveDirectoryFederationServices.DefaultMetadataAddress) == 0 || String.IsNullOrWhiteSpace(PostLogoutRedirectUri)) {
String.IsNullOrWhiteSpace(PostLogoutRedirectUri)) {
return false; return false;
}
return true;
} }
return true;
} }
} }
} }

View File

@@ -71,25 +71,22 @@ namespace Orchard.OpenId.Models {
set { this.Store(x => x.AppKey, value); } set { this.Store(x => x.AppKey, value); }
} }
public string GraphApiKey public string GraphApiKey {
{
get { return this.Retrieve(x => x.GraphApiKey); } get { return this.Retrieve(x => x.GraphApiKey); }
set { this.Store(x => x.GraphApiKey, value); } set { this.Store(x => x.GraphApiKey, value); }
} }
public bool IsValid { public bool IsValid() {
get { if (String.IsNullOrWhiteSpace(Tenant) ||
if (String.IsNullOrWhiteSpace(Tenant) || String.IsNullOrWhiteSpace(ClientId) ||
String.IsNullOrWhiteSpace(ClientId) || String.IsNullOrWhiteSpace(LogoutRedirectUri) ||
String.IsNullOrWhiteSpace(LogoutRedirectUri) || String.IsNullOrWhiteSpace(ServiceResourceID) ||
String.IsNullOrWhiteSpace(ServiceResourceID) || String.IsNullOrWhiteSpace(AppKey)) {
String.IsNullOrWhiteSpace(AppKey)) {
return false; return false;
}
return true;
} }
return true;
} }
public Dictionary<string, string> ServiceResourceIDs { public Dictionary<string, string> ServiceResourceIDs {

View File

@@ -16,18 +16,16 @@ namespace Orchard.OpenId.Models {
set { this.Store(x => x.AppSecret, value); } set { this.Store(x => x.AppSecret, value); }
} }
public bool IsValid { public bool IsValid() {
get { if (String.IsNullOrWhiteSpace(AppId) ||
if (String.IsNullOrWhiteSpace(AppId) || String.CompareOrdinal(AppId, Constants.Facebook.DefaultAppId) == 0 ||
String.CompareOrdinal(AppId, Constants.Facebook.DefaultAppId) == 0 || String.IsNullOrWhiteSpace(AppSecret) ||
String.IsNullOrWhiteSpace(AppSecret) || String.CompareOrdinal(AppSecret, Constants.Facebook.DefaultAppSecret) == 0) {
String.CompareOrdinal(AppSecret, Constants.Facebook.DefaultAppSecret) == 0) {
return false; return false;
}
return true;
} }
return true;
} }
} }
} }

View File

@@ -1,8 +1,10 @@
using System; using System;
using System.ComponentModel.DataAnnotations;
using Orchard.ContentManagement; using Orchard.ContentManagement;
using Orchard.Environment.Extensions; using Orchard.Environment.Extensions;
namespace Orchard.OpenId.Models { namespace Orchard.OpenId.Models
{
[OrchardFeature("Orchard.OpenId.Google")] [OrchardFeature("Orchard.OpenId.Google")]
public class GoogleSettingsPart : ContentPart { public class GoogleSettingsPart : ContentPart {
@@ -16,24 +18,25 @@ namespace Orchard.OpenId.Models {
set { this.Store(x => x.ClientSecret, value); } set { this.Store(x => x.ClientSecret, value); }
} }
[RegularExpression(pattern: "/.+", ErrorMessage = "The Callback Path Must start with a forward slash '/' followed by one or more characters")]
public string CallbackPath { public string CallbackPath {
get { return this.Retrieve(x => x.CallbackPath, () => Constants.General.LogonCallbackUrl); } get { return this.Retrieve(x => x.CallbackPath, () => Constants.General.LogonCallbackUrl); }
set { this.Store(x => x.CallbackPath, value); } set { this.Store(x => x.CallbackPath, value); }
} }
public bool IsValid { public bool IsValid() {
get { if (String.IsNullOrWhiteSpace(ClientId) ||
if (String.IsNullOrWhiteSpace(ClientId) || String.CompareOrdinal(ClientId, Constants.Google.DefaultClientId) == 0 ||
String.CompareOrdinal(ClientId, Constants.Google.DefaultClientId) == 0 || String.IsNullOrWhiteSpace(ClientSecret) ||
String.IsNullOrWhiteSpace(ClientSecret) || String.CompareOrdinal(ClientId, Constants.Google.DefaultClientSecret) == 0 ||
String.CompareOrdinal(ClientId, Constants.Google.DefaultClientSecret) == 0 || String.IsNullOrWhiteSpace(CallbackPath) ||
String.IsNullOrWhiteSpace(CallbackPath)) { CallbackPath.StartsWith("/") == false ||
CallbackPath.Length < 2) {
return false; return false;
}
return true;
} }
return true;
} }
} }
} }

View File

@@ -16,18 +16,16 @@ namespace Orchard.OpenId.Models {
set { this.Store(x => x.ConsumerSecret, value); } set { this.Store(x => x.ConsumerSecret, value); }
} }
public bool IsValid { public bool IsValid() {
get { if (String.IsNullOrWhiteSpace(ConsumerKey) ||
if (String.IsNullOrWhiteSpace(ConsumerKey) || String.CompareOrdinal(ConsumerKey, Constants.Twitter.DefaultConsumerKey) == 0 ||
String.CompareOrdinal(ConsumerKey, Constants.Twitter.DefaultConsumerKey) == 0 || String.IsNullOrWhiteSpace(ConsumerSecret) ||
String.IsNullOrWhiteSpace(ConsumerSecret) || String.CompareOrdinal(ConsumerSecret, Constants.Twitter.DefaultConsumerSecret) == 0) {
String.CompareOrdinal(ConsumerSecret, Constants.Twitter.DefaultConsumerSecret) == 0) {
return false; return false;
}
return true;
} }
return true;
} }
public string VeriSignClass3SecureServerCA_G2 public string VeriSignClass3SecureServerCA_G2

View File

@@ -20,7 +20,7 @@ namespace Orchard.OpenId.OwinMiddlewares {
public IEnumerable<OwinMiddlewareRegistration> GetOwinMiddlewares() { public IEnumerable<OwinMiddlewareRegistration> GetOwinMiddlewares() {
var settings = _workContextAccessor.GetContext().CurrentSite.As<ActiveDirectoryFederationServicesSettingsPart>(); var settings = _workContextAccessor.GetContext().CurrentSite.As<ActiveDirectoryFederationServicesSettingsPart>();
if (settings == null || !settings.IsValid) { if (settings == null || !settings.IsValid()) {
return Enumerable.Empty<OwinMiddlewareRegistration>(); return Enumerable.Empty<OwinMiddlewareRegistration>();
} }

View File

@@ -52,7 +52,7 @@ namespace Orchard.OpenId.OwinMiddlewares {
var azureWebSiteProtectionEnabled = false; var azureWebSiteProtectionEnabled = false;
var azureUseAzureGraphApi = false; var azureUseAzureGraphApi = false;
if (settings == null || !settings.IsValid) { if (settings == null || !settings.IsValid()) {
return Enumerable.Empty<OwinMiddlewareRegistration>(); return Enumerable.Empty<OwinMiddlewareRegistration>();
} }

View File

@@ -18,7 +18,7 @@ namespace Orchard.OpenId.OwinMiddlewares {
public IEnumerable<OwinMiddlewareRegistration> GetOwinMiddlewares() { public IEnumerable<OwinMiddlewareRegistration> GetOwinMiddlewares() {
var settings = _workContextAccessor.GetContext().CurrentSite.As<FacebookSettingsPart>(); var settings = _workContextAccessor.GetContext().CurrentSite.As<FacebookSettingsPart>();
if (settings == null || !settings.IsValid) { if (settings == null || !settings.IsValid()) {
return Enumerable.Empty<OwinMiddlewareRegistration>(); return Enumerable.Empty<OwinMiddlewareRegistration>();
} }

View File

@@ -3,6 +3,7 @@ using System.Linq;
using Microsoft.Owin; using Microsoft.Owin;
using Microsoft.Owin.Security.Google; using Microsoft.Owin.Security.Google;
using Orchard.ContentManagement; using Orchard.ContentManagement;
using Orchard.Environment.Configuration;
using Orchard.Environment.Extensions; using Orchard.Environment.Extensions;
using Orchard.OpenId.Models; using Orchard.OpenId.Models;
using Orchard.Owin; using Orchard.Owin;
@@ -18,16 +19,17 @@ namespace Orchard.OpenId.OwinMiddlewares {
} }
public IEnumerable<OwinMiddlewareRegistration> GetOwinMiddlewares() { public IEnumerable<OwinMiddlewareRegistration> GetOwinMiddlewares() {
var settings = _workContextAccessor.GetContext().CurrentSite.As<GoogleSettingsPart>(); var workContext = _workContextAccessor.GetContext();
var settings = workContext.CurrentSite.As<GoogleSettingsPart>();
if (settings == null || !settings.IsValid) { if (settings == null || !settings.IsValid()) {
return Enumerable.Empty<OwinMiddlewareRegistration>(); return Enumerable.Empty<OwinMiddlewareRegistration>();
} }
var authenticationOptions = new GoogleOAuth2AuthenticationOptions { var authenticationOptions = new GoogleOAuth2AuthenticationOptions {
ClientId = settings.ClientId, ClientId = settings.ClientId,
ClientSecret = settings.ClientSecret, ClientSecret = settings.ClientSecret,
CallbackPath = new PathString(settings.CallbackPath) CallbackPath = new PathString(GetCallbackPath(workContext, settings))
}; };
return new List<OwinMiddlewareRegistration> { return new List<OwinMiddlewareRegistration> {
@@ -39,5 +41,16 @@ namespace Orchard.OpenId.OwinMiddlewares {
} }
}; };
} }
private string GetCallbackPath(WorkContext workContext, GoogleSettingsPart settings) {
var shellSettings = workContext.Resolve<ShellSettings>();
var tenantPrefix = shellSettings.RequestUrlPrefix;
var callbackUrl = string.IsNullOrWhiteSpace(tenantPrefix) ?
settings.CallbackPath :
string.Format("/{0}{1}", tenantPrefix, settings.CallbackPath);
return callbackUrl;
}
} }
} }

View File

@@ -20,7 +20,7 @@ namespace Orchard.OpenId.OwinMiddlewares {
public IEnumerable<OwinMiddlewareRegistration> GetOwinMiddlewares() { public IEnumerable<OwinMiddlewareRegistration> GetOwinMiddlewares() {
var settings = _workContextAccessor.GetContext().CurrentSite.As<TwitterSettingsPart>(); var settings = _workContextAccessor.GetContext().CurrentSite.As<TwitterSettingsPart>();
if (settings == null || !settings.IsValid) { if (settings == null || !settings.IsValid()) {
return Enumerable.Empty<OwinMiddlewareRegistration>(); return Enumerable.Empty<OwinMiddlewareRegistration>();
} }

View File

@@ -42,7 +42,7 @@ namespace Orchard.OpenId.Providers {
site = scope.Resolve<ISiteService>().GetSiteSettings(); site = scope.Resolve<ISiteService>().GetSiteSettings();
settings = site.As<ActiveDirectoryFederationServicesSettingsPart>(); settings = site.As<ActiveDirectoryFederationServicesSettingsPart>();
return (settings != null && settings.IsValid); return (settings != null && settings.IsValid());
} }
catch (Exception) { catch (Exception) {
return false; return false;

View File

@@ -42,7 +42,7 @@ namespace Orchard.OpenId.Providers {
site = scope.Resolve<ISiteService>().GetSiteSettings(); site = scope.Resolve<ISiteService>().GetSiteSettings();
settings = site.As<AzureActiveDirectorySettingsPart>(); settings = site.As<AzureActiveDirectorySettingsPart>();
return (settings != null && settings.IsValid); return (settings != null && settings.IsValid());
} }
catch (Exception) { catch (Exception) {
return false; return false;

View File

@@ -42,7 +42,7 @@ namespace Orchard.OpenId.Providers {
site = scope.Resolve<ISiteService>().GetSiteSettings(); site = scope.Resolve<ISiteService>().GetSiteSettings();
settings = site.As<FacebookSettingsPart>(); settings = site.As<FacebookSettingsPart>();
return (settings != null && settings.IsValid); return (settings != null && settings.IsValid());
} }
catch (Exception) { catch (Exception) {
return false; return false;

View File

@@ -43,7 +43,7 @@ namespace Orchard.OpenId.Providers {
site = scope.Resolve<ISiteService>().GetSiteSettings(); site = scope.Resolve<ISiteService>().GetSiteSettings();
settings = site.As<GoogleSettingsPart>(); settings = site.As<GoogleSettingsPart>();
return (settings != null && settings.IsValid); return (settings != null && settings.IsValid());
} }
catch (Exception) { catch (Exception) {
return false; return false;

View File

@@ -42,7 +42,7 @@ namespace Orchard.OpenId.Providers {
site = scope.Resolve<ISiteService>().GetSiteSettings(); site = scope.Resolve<ISiteService>().GetSiteSettings();
settings = site.As<TwitterSettingsPart>(); settings = site.As<TwitterSettingsPart>();
return (settings != null && settings.IsValid); return (settings != null && settings.IsValid());
} }
catch (Exception) { catch (Exception) {
return false; return false;

View File

@@ -26,7 +26,7 @@ namespace Orchard.Azure.Authentication.Services.ActiveDirectoryFederationService
var workContext = _orchardServices.WorkContext; var workContext = _orchardServices.WorkContext;
var settings = workContext.CurrentSite.As<ActiveDirectoryFederationServicesSettingsPart>(); var settings = workContext.CurrentSite.As<ActiveDirectoryFederationServicesSettingsPart>();
if (settings == null || !settings.IsValid) { if (settings == null || !settings.IsValid()) {
var url = _urlHelper.Action("OpenId", "Admin", new { Area = "Settings" }); var url = _urlHelper.Action("OpenId", "Admin", new { Area = "Settings" });
yield return new NotifyEntry { Message = T("The <a href=\"{0}\">Active Directory Federation Services settings</a> need to be configured.", url), Type = NotifyType.Warning }; yield return new NotifyEntry { Message = T("The <a href=\"{0}\">Active Directory Federation Services settings</a> need to be configured.", url), Type = NotifyType.Warning };
} }

View File

@@ -27,7 +27,7 @@ namespace Orchard.Azure.Authentication.Services.AzureActiveDirectory {
var workContext = _orchardServices.WorkContext; var workContext = _orchardServices.WorkContext;
var azureSettings = workContext.CurrentSite.As<AzureActiveDirectorySettingsPart>(); var azureSettings = workContext.CurrentSite.As<AzureActiveDirectorySettingsPart>();
if (azureSettings == null || !azureSettings.IsValid) { if (azureSettings == null || !azureSettings.IsValid()) {
var url = _urlHelper.Action("OpenId", "Admin", new { Area = "Settings" }); var url = _urlHelper.Action("OpenId", "Admin", new { Area = "Settings" });
yield return new NotifyEntry { Message = T("The <a href=\"{0}\">Azure AD Authentication settings</a> need to be configured.", url), Type = NotifyType.Warning }; yield return new NotifyEntry { Message = T("The <a href=\"{0}\">Azure AD Authentication settings</a> need to be configured.", url), Type = NotifyType.Warning };
} }

View File

@@ -27,7 +27,7 @@ namespace Orchard.Azure.Authentication.Services.Facebook {
var workContext = _orchardServices.WorkContext; var workContext = _orchardServices.WorkContext;
var settings = workContext.CurrentSite.As<FacebookSettingsPart>(); var settings = workContext.CurrentSite.As<FacebookSettingsPart>();
if (settings == null || !settings.IsValid) { if (settings == null || !settings.IsValid()) {
var url = _urlHelper.Action("OpenId", "Admin", new { Area = "Settings" }); var url = _urlHelper.Action("OpenId", "Admin", new { Area = "Settings" });
yield return new NotifyEntry { Message = T("The <a href=\"{0}\">Facebook settings</a> need to be configured.", url), Type = NotifyType.Warning }; yield return new NotifyEntry { Message = T("The <a href=\"{0}\">Facebook settings</a> need to be configured.", url), Type = NotifyType.Warning };
} }

View File

@@ -27,7 +27,7 @@ namespace Orchard.Azure.Authentication.Services.Google {
var workContext = _orchardServices.WorkContext; var workContext = _orchardServices.WorkContext;
var settings = workContext.CurrentSite.As<GoogleSettingsPart>(); var settings = workContext.CurrentSite.As<GoogleSettingsPart>();
if (settings == null || !settings.IsValid) { if (settings == null || !settings.IsValid()) {
var url = _urlHelper.Action("OpenId", "Admin", new { Area = "Settings" }); var url = _urlHelper.Action("OpenId", "Admin", new { Area = "Settings" });
yield return new NotifyEntry { Message = T("The <a href=\"{0}\">Google settings</a> need to be configured.", url), Type = NotifyType.Warning }; yield return new NotifyEntry { Message = T("The <a href=\"{0}\">Google settings</a> need to be configured.", url), Type = NotifyType.Warning };
} }

View File

@@ -27,7 +27,7 @@ namespace Orchard.Azure.Authentication.Services.Twitter {
var workContext = _orchardServices.WorkContext; var workContext = _orchardServices.WorkContext;
var settings = workContext.CurrentSite.As<TwitterSettingsPart>(); var settings = workContext.CurrentSite.As<TwitterSettingsPart>();
if (settings == null || !settings.IsValid) { if (settings == null || !settings.IsValid()) {
var url = _urlHelper.Action("OpenId", "Admin", new { Area = "Settings" }); var url = _urlHelper.Action("OpenId", "Admin", new { Area = "Settings" });
yield return new NotifyEntry { Message = T("The <a href=\"{0}\">Twitter settings</a> need to be configured.", url), Type = NotifyType.Warning }; yield return new NotifyEntry { Message = T("The <a href=\"{0}\">Twitter settings</a> need to be configured.", url), Type = NotifyType.Warning };
} }

View File

@@ -3,17 +3,17 @@
<h2>Active Directory Federation Services Settings</h2> <h2>Active Directory Federation Services Settings</h2>
<fieldset> <fieldset>
@Html.LabelFor(m => m.ClientId, T("Client Id")) <label for="@Html.IdFor(m => m.ClientId)">@T("Client Id")</label>
@Html.TextBoxFor(m => m.ClientId, new { @class = "text large" }) @Html.TextBoxFor(m => m.ClientId, new { @class = "text large" })
<span class="hint">@T("ADFS's Client Id obtained from your ADFS configuration (e.g. {0})", ActiveDirectoryFederationServices.DefaultClientId)</span> <span class="hint">@T("ADFS's Client Id obtained from your ADFS configuration (e.g. {0})", ActiveDirectoryFederationServices.DefaultClientId)</span>
</fieldset> </fieldset>
<fieldset> <fieldset>
@Html.LabelFor(m => m.MetadataAddress, T("Metadata Address")) <label for="@Html.IdFor(m => m.MetadataAddress)">@T("Metadata Address")</label>
@Html.TextBoxFor(m => m.MetadataAddress, new { @class = "text large" }) @Html.TextBoxFor(m => m.MetadataAddress, new { @class = "text large" })
<span class="hint">@T("ADFS's Metadata Address url obtained from your ADFS configuration (e.g. {0})", ActiveDirectoryFederationServices.DefaultMetadataAddress)</span> <span class="hint">@T("ADFS's Metadata Address url obtained from your ADFS configuration (e.g. {0})", ActiveDirectoryFederationServices.DefaultMetadataAddress)</span>
</fieldset> </fieldset>
<fieldset> <fieldset>
@Html.LabelFor(m => m.PostLogoutRedirectUri, T("Post Logout Redirect Uri")) <label for="@Html.IdFor(m => m.PostLogoutRedirectUri)">@T("Post Logout Redirect Uri")</label>
@Html.TextBoxFor(m => m.PostLogoutRedirectUri, new { @class = "text large" }) @Html.TextBoxFor(m => m.PostLogoutRedirectUri, new { @class = "text large" })
<span class="hint">@T("ADFS's Post Logout Redirect url obtained from your ADFS configuration (e.g. {0})", ActiveDirectoryFederationServices.DefaultPostLogoutRedirectUri)</span> <span class="hint">@T("ADFS's Post Logout Redirect url obtained from your ADFS configuration (e.g. {0})", ActiveDirectoryFederationServices.DefaultPostLogoutRedirectUri)</span>
</fieldset> </fieldset>

View File

@@ -2,31 +2,31 @@
<h2>Azure Active Directory Settings</h2> <h2>Azure Active Directory Settings</h2>
<fieldset> <fieldset>
@Html.LabelFor(m => m.Tenant, T("Tenant")) <label for="@Html.IdFor(m => m.Tenant)">@T("Tenant")</label>
@Html.TextBoxFor(m => m.Tenant, new { @class = "text large" }) @Html.TextBoxFor(m => m.Tenant, new { @class = "text large" })
<span class="hint">@T("Azure Active Directory tenant (e.g. yoursite.onmicrosoft.com).")</span> <span class="hint">@T("Azure Active Directory tenant (e.g. yoursite.onmicrosoft.com).")</span>
</fieldset> </fieldset>
<fieldset> <fieldset>
@Html.LabelFor(m => m.ADInstance, T("Active Directory Instance")) <label for="@Html.IdFor(m => m.ADInstance)">@T("Active Directory Instance")</label>
@Html.TextBoxFor(m => m.ADInstance, new { @class = "text large" }) @Html.TextBoxFor(m => m.ADInstance, new { @class = "text large" })
<span class="hint">@T("Default instance is https://login.microsoftonline.com/{your-tenant-name}")</span> <span class="hint">@T("Default instance is https://login.microsoftonline.com/{your-tenant-name}")</span>
</fieldset> </fieldset>
<fieldset> <fieldset>
@Html.LabelFor(m => m.ClientId, T("App ID")) <label for="@Html.IdFor(m => m.ClientId)">@T("App ID")</label>
@Html.TextBoxFor(m => m.ClientId, new { @class = "text large" }) @Html.TextBoxFor(m => m.ClientId, new { @class = "text large" })
</fieldset> </fieldset>
<fieldset> <fieldset>
@Html.LabelFor(m => m.AppName, T("App Name")) <label for="@Html.IdFor(m => m.AppName)">@T("App Name")</label>
@Html.TextBoxFor(m => m.AppName, new { @class = "text large" }) @Html.TextBoxFor(m => m.AppName, new { @class = "text large" })
<span class="hint">@T("The application name you wish to give active directory login rights to.")</span> <span class="hint">@T("The application name you wish to give active directory login rights to.")</span>
</fieldset> </fieldset>
<fieldset> <fieldset>
@Html.LabelFor(m => m.LogoutRedirectUri, T("Logout Redirect")) <label for="@Html.IdFor(m => m.LogoutRedirectUri)">@T("Logout Redirect")</label>
@Html.TextBoxFor(m => m.LogoutRedirectUri, new { @class = "text large" }) @Html.TextBoxFor(m => m.LogoutRedirectUri, new { @class = "text large" })
<span class="hint">@T("Redirect url after azure logout, default is http://localhost:30321/OrchardLocal/")</span> <span class="hint">@T("Redirect url after azure logout, default is http://localhost:30321/OrchardLocal/")</span>
</fieldset> </fieldset>
<fieldset> <fieldset>
@Html.LabelFor(m => m.ServiceResourceID, T("Service Resource ID")) <label for="@Html.IdFor(m => m.ServiceResourceID)">@T("Service Resource ID")</label>
@Html.TextAreaFor(m => m.ServiceResourceID, new { @class = "text large" }) @Html.TextAreaFor(m => m.ServiceResourceID, new { @class = "text large" })
<span class="hint"> <span class="hint">
@T(@"If you have a single 'Service Resource ID' just write it down directly. @T(@"If you have a single 'Service Resource ID' just write it down directly.
@@ -35,32 +35,32 @@
</span> </span>
</fieldset> </fieldset>
<fieldset> <fieldset>
@Html.LabelFor(m => m.AppKey, T("App Key")) <label for="@Html.IdFor(m => m.AppKey)">@T("App Key")</label>
@Html.TextBoxFor(m => m.AppKey, new { @class = "text large" }) @Html.TextBoxFor(m => m.AppKey, new { @class = "text large" })
</fieldset> </fieldset>
<fieldset> <fieldset>
@Html.CheckBoxFor(m => m.BearerAuthEnabled) @Html.CheckBoxFor(m => m.BearerAuthEnabled)
<label class="forcheckbox" for="AzureActiveDirectorySettings_BearerAuthEnabled">@T("Enable Bearer Token Authentication")</label> <label class="forcheckbox" for="@Html.IdFor(m => m.BearerAuthEnabled)">@T("Enable Bearer Token Authentication")</label>
</fieldset> </fieldset>
<fieldset> <fieldset>
@Html.CheckBoxFor(m => m.SSLEnabled) @Html.CheckBoxFor(m => m.SSLEnabled)
<label class="forcheckbox" for="AzureActiveDirectorySettings_SSLEnabled">@T("Use SSL Protocol for valid audience")</label> <label class="forcheckbox" for="@Html.IdFor(m => m.SSLEnabled)">@T("Use SSL Protocol for valid audience")</label>
</fieldset> </fieldset>
<fieldset> <fieldset>
@Html.CheckBoxFor(m => m.AzureWebSiteProtectionEnabled) @Html.CheckBoxFor(m => m.AzureWebSiteProtectionEnabled)
<label class="forcheckbox" for="AzureActiveDirectorySettings_AzureWebSiteProtectionEnabled">@T("Enable Machine Key Data Protection for Azure Web Site")</label> <label class="forcheckbox" for="@Html.IdFor(m => m.AzureWebSiteProtectionEnabled)">@T("Enable Machine Key Data Protection for Azure Web Site")</label>
</fieldset> </fieldset>
<fieldset> <fieldset>
@Html.CheckBoxFor(m => m.UseAzureGraphApi) @Html.CheckBoxFor(m => m.UseAzureGraphApi)
<label class="forcheckbox" for="AzureActiveDirectorySettings_UseAzureGraphApi">@T("Enable Graph API")</label> <label class="forcheckbox" for="@Html.IdFor(m => m.UseAzureGraphApi)">@T("Enable Graph API")</label>
<span class="hint">@T("Check this box to enable syncing Orchard Role membership to Azure Graph API Group Membership. This module will not create new Orchard Roles for you, but it will sync up user membership of existing Orchard Roles with AD Group membership for Role names that match a group name")</span> <span class="hint">@T("Check this box to enable syncing Orchard Role membership to Azure Graph API Group Membership. This module will not create new Orchard Roles for you, but it will sync up user membership of existing Orchard Roles with AD Group membership for Role names that match a group name")</span>
</fieldset> </fieldset>
<fieldset> <fieldset>
@Html.LabelFor(m => m.GraphApiUrl, T("Graph API URL")) <label for="@Html.IdFor(m => m.GraphApiUrl)">@T("Graph Api Url")</label>
@Html.TextBoxFor(m => m.GraphApiUrl, new { @class = "text large" }) @Html.TextBoxFor(m => m.GraphApiUrl, new { @class = "text large" })
<span class="hint">@T("Typically https://graph.windows.net")</span> <span class="hint">@T("Typically https://graph.windows.net")</span>
@Html.LabelFor(m => m.GraphApiKey, T("Graph API Key")) <label for="@Html.IdFor(m => m.GraphApiKey)">@T("Graph Api Key")</label>
@Html.TextBoxFor(m => m.GraphApiKey, new { @class = "text large" }) @Html.TextBoxFor(m => m.GraphApiKey, new { @class = "text large" })
</fieldset> </fieldset>
<hr /> <hr />

View File

@@ -3,12 +3,12 @@
<h2>Facebook Settings</h2> <h2>Facebook Settings</h2>
<fieldset> <fieldset>
@Html.LabelFor(m => m.AppId, T("App Id")) <label for="@Html.IdFor(m => m.AppId)">@T("App Id")</label>
@Html.TextBoxFor(m => m.AppId, new { @class = "text large" }) @Html.TextBoxFor(m => m.AppId, new { @class = "text large" })
<span class="hint">@T("Facebook's App Id obtained from your facebook developer dashboard (e.g. {0})", Facebook.DefaultAppId)</span> <span class="hint">@T("Facebook's App Id obtained from your facebook developer dashboard (e.g. {0})", Facebook.DefaultAppId)</span>
</fieldset> </fieldset>
<fieldset> <fieldset>
@Html.LabelFor(m => m.AppSecret, T("App Secret")) <label for="@Html.IdFor(m => m.AppSecret)">@T("App Secret")</label>
@Html.TextBoxFor(m => m.AppSecret, new { @class = "text large" }) @Html.TextBoxFor(m => m.AppSecret, new { @class = "text large" })
<span class="hint">@T("Facebook's App Secret obtained from your facebook developer dashboard (e.g. {0})", Facebook.DefaultAppSecret)</span> <span class="hint">@T("Facebook's App Secret obtained from your facebook developer dashboard (e.g. {0})", Facebook.DefaultAppSecret)</span>
</fieldset> </fieldset>

View File

@@ -3,17 +3,17 @@
<h2>Google Settings</h2> <h2>Google Settings</h2>
<fieldset> <fieldset>
@Html.LabelFor(m => m.ClientId, T("Client Id")) <label for="@Html.IdFor(m => m.ClientId)">@T("Client Id")</label>
@Html.TextBoxFor(m => m.ClientId, new { @class = "text large" }) @Html.TextBoxFor(m => m.ClientId, new { @class = "text large" })
<span class="hint">@T("Google's Client Id obtained from your google dashboard (e.g. {0})", Google.DefaultClientId)</span> <span class="hint">@T("Google's Client Id obtained from your google dashboard (e.g. {0})", Google.DefaultClientId)</span>
</fieldset> </fieldset>
<fieldset> <fieldset>
@Html.LabelFor(m => m.ClientSecret, T("Client Secret")) <label for="@Html.IdFor(m => m.ClientSecret)">@T("Client Secret")</label>
@Html.TextBoxFor(m => m.ClientSecret, new { @class = "text large" }) @Html.TextBoxFor(m => m.ClientSecret, new { @class = "text large" })
<span class="hint">@T("Google's Client Secret obtained from your google dashboard (e.g. {0})", Google.DefaultClientSecret)</span> <span class="hint">@T("Google's Client Secret obtained from your google dashboard (e.g. {0})", Google.DefaultClientSecret)</span>
</fieldset> </fieldset>
<fieldset> <fieldset>
@Html.LabelFor(m => m.CallbackPath, T("Callback Path")) <label for="@Html.IdFor(m => m.CallbackPath)">@T("Callback Path")</label>
@Html.TextBoxFor(m => m.CallbackPath, new { @class = "text large" }) @Html.TextBoxFor(m => m.CallbackPath, new { @class = "text large" })
<span class="hint">@T("Google's Callback Path obtained from your google dashboard (case sensitive). Recommended: {0}", General.LogonCallbackUrl)</span> <span class="hint">@T("Google's Callback Path obtained from your google dashboard (case sensitive). Recommended: {0}", General.LogonCallbackUrl)</span>
</fieldset> </fieldset>

View File

@@ -9,12 +9,12 @@
<h2>@T("Twitter Settings")</h2> <h2>@T("Twitter Settings")</h2>
<fieldset> <fieldset>
@Html.LabelFor(m => m.ConsumerKey, T("Consumer Key")) <label for="@Html.IdFor(m => m.ConsumerKey)">@T("Consumer Key")</label>
@Html.TextBoxFor(m => m.ConsumerKey, new { @class = "text large" }) @Html.TextBoxFor(m => m.ConsumerKey, new { @class = "text large" })
<span class="hint">@T("Twitter's Consumer Key obtained from your twitter dashboard (e.g. {0})", Twitter.DefaultConsumerKey)</span> <span class="hint">@T("Twitter's Consumer Key obtained from your twitter dashboard (e.g. {0})", Twitter.DefaultConsumerKey)</span>
</fieldset> </fieldset>
<fieldset> <fieldset>
@Html.LabelFor(m => m.ConsumerSecret, T("Consumer Secret")) <label for="@Html.IdFor(m => m.ConsumerSecret)">@T("Consumer Secret")</label>
@Html.TextBoxFor(m => m.ConsumerSecret, new { @class = "text large" }) @Html.TextBoxFor(m => m.ConsumerSecret, new { @class = "text large" })
<span class="hint">@T("Twitter's Consumer Secret obtained from your twitter dashboard (e.g. {0})", Twitter.DefaultConsumerSecret)</span> <span class="hint">@T("Twitter's Consumer Secret obtained from your twitter dashboard (e.g. {0})", Twitter.DefaultConsumerSecret)</span>
</fieldset> </fieldset>
@@ -26,22 +26,22 @@
<div id="colExpArea" class="coll-exp-area"> <div id="colExpArea" class="coll-exp-area">
<span class="hint">@T("These settings rarely change, it is recommended to keep default values")</span> <span class="hint">@T("These settings rarely change, it is recommended to keep default values")</span>
@Html.LabelFor(m => m.VeriSignClass3SecureServerCA_G2, T("VeriSign Class3 Secure Server CA - G2")) <label for="@Html.IdFor(m => m.VeriSignClass3SecureServerCA_G2)">@T("VeriSign Class3 Secure Server CA - G2")</label>
@Html.TextBoxFor(m => m.VeriSignClass3SecureServerCA_G2, new { @class = "text large" }) @Html.TextBoxFor(m => m.VeriSignClass3SecureServerCA_G2, new { @class = "text large" })
@Html.LabelFor(m => m.VeriSignClass3SecureServerCA_G3, T("VeriSign Class3 Secure Server CA - G3")) <label for="@Html.IdFor(m => m.VeriSignClass3SecureServerCA_G3)">@T("VeriSign Class3 Secure Server CA - G3")</label>
@Html.TextBoxFor(m => m.VeriSignClass3SecureServerCA_G3, new { @class = "text large" }) @Html.TextBoxFor(m => m.VeriSignClass3SecureServerCA_G3, new { @class = "text large" })
@Html.LabelFor(m => m.VeriSignClass3PublicPrimaryCA_G5, T("VeriSign Class3 Secure Server CA - G5")) <label for="@Html.IdFor(m => m.VeriSignClass3PublicPrimaryCA_G5)">@T("VeriSign Class3 Secure Server CA - G5")</label>
@Html.TextBoxFor(m => m.VeriSignClass3PublicPrimaryCA_G5, new { @class = "text large" }) @Html.TextBoxFor(m => m.VeriSignClass3PublicPrimaryCA_G5, new { @class = "text large" })
@Html.LabelFor(m => m.SymantecClass3SecureServerCA_G4, T("Symantec Class3 Secure Server CA - G4")) <label for="@Html.IdFor(m => m.SymantecClass3SecureServerCA_G4)">@T("Symantec Class3 Secure Server CA - G4")</label>
@Html.TextBoxFor(m => m.SymantecClass3SecureServerCA_G4, new { @class = "text large" }) @Html.TextBoxFor(m => m.SymantecClass3SecureServerCA_G4, new { @class = "text large" })
@Html.LabelFor(m => m.DigiCertSHA2HighAssuranceServerCA, T("DigiCert SHA2 High Assurance Server CA")) <label for="@Html.IdFor(m => m.DigiCertSHA2HighAssuranceServerCA)">@T("DigiCert SHA2 High Assurance Server CA")</label>
@Html.TextBoxFor(m => m.DigiCertSHA2HighAssuranceServerCA, new { @class = "text large" }) @Html.TextBoxFor(m => m.DigiCertSHA2HighAssuranceServerCA, new { @class = "text large" })
@Html.LabelFor(m => m.DigiCertHighAssuranceEVRootCA, T("DigiCert High Assurance EV Root CA")) <label for="@Html.IdFor(m => m.DigiCertHighAssuranceEVRootCA)">@T("DigiCert High Assurance EV Root CA")</label>
@Html.TextBoxFor(m => m.DigiCertHighAssuranceEVRootCA, new { @class = "text large" }) @Html.TextBoxFor(m => m.DigiCertHighAssuranceEVRootCA, new { @class = "text large" })
</div> </div>
</fieldset> </fieldset>

View File

@@ -260,16 +260,7 @@
<VisualStudio> <VisualStudio>
<FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}"> <FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}">
<WebProjectProperties> <WebProjectProperties>
<UseIIS>True</UseIIS> <SaveServerSettingsInUserFile>True</SaveServerSettingsInUserFile>
<AutoAssignPort>False</AutoAssignPort>
<DevelopmentServerPort>30321</DevelopmentServerPort>
<DevelopmentServerVPath>/OrchardLocal</DevelopmentServerVPath>
<IISUrl>http://localhost:30321/OrchardLocal</IISUrl>
<NTLMAuthentication>False</NTLMAuthentication>
<UseCustomServer>False</UseCustomServer>
<CustomServerUrl>
</CustomServerUrl>
<SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>
</WebProjectProperties> </WebProjectProperties>
</FlavorProperties> </FlavorProperties>
</VisualStudio> </VisualStudio>