diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/application/umblogin.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/application/umblogin.directive.js index 0fa36ca46e..94ad0e360d 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/application/umblogin.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/application/umblogin.directive.js @@ -46,8 +46,9 @@ vm.allowPasswordReset = Umbraco.Sys.ServerVariables.umbracoSettings.canSendRequiredEmail && Umbraco.Sys.ServerVariables.umbracoSettings.allowPasswordReset; vm.errorMsg = ""; vm.externalLoginFormAction = Umbraco.Sys.ServerVariables.umbracoUrls.externalLoginsUrl; - vm.externalLoginProviders = externalLoginInfo.providers; + vm.externalLoginProviders = externalLoginInfoService.getLoginProviders(); vm.denyLocalLogin = externalLoginInfoService.hasDenyLocalLogin(); + vm.externalLoginProviderView = externalLoginInfo.errorProvider ? externalLoginInfoService.getExternalLoginProviderViewForErrors(externalLoginInfo.errorProvider) : null; vm.externalLoginInfo = externalLoginInfo; vm.resetPasswordCodeInfo = resetPasswordCodeInfo; vm.backgroundImage = Umbraco.Sys.ServerVariables.umbracoSettings.loginBackgroundImage; diff --git a/src/Umbraco.Web.UI.Client/src/common/services/externallogininfo.service.js b/src/Umbraco.Web.UI.Client/src/common/services/externallogininfo.service.js index 5baa54506d..fe9d1f1f8a 100644 --- a/src/Umbraco.Web.UI.Client/src/common/services/externallogininfo.service.js +++ b/src/Umbraco.Web.UI.Client/src/common/services/externallogininfo.service.js @@ -3,7 +3,31 @@ * @name umbraco.services.externalLoginInfoService * @description A service for working with external login providers **/ -function externalLoginInfoService(externalLoginInfo) { +function externalLoginInfoService(externalLoginInfo, umbRequestHelper) { + + function getExternalLoginProvider(provider) { + if (provider) { + var found = _.filter(externalLoginInfo.providers, x => x.authType == provider); + return found; + } + return null; + } + + function getExternalLoginProviderView(provider) { + var found = getExternalLoginProvider(provider); + if (found) { + return umbRequestHelper.convertVirtualToAbsolutePath(found.properties.UmbracoBackOfficeExternalLoginOptions.BackOfficeCustomLoginView); + } + return null; + } + + function getExternalLoginProviderViewForErrors(provider) { + var found = getExternalLoginProvider(provider); + if (found && found.properties.UmbracoBackOfficeExternalLoginOptions.BackOfficeCustomLoginViewHandlesErrors) { + return umbRequestHelper.convertVirtualToAbsolutePath(found.properties.UmbracoBackOfficeExternalLoginOptions.BackOfficeCustomLoginView); + } + return null; + } /** * Returns true if any provider denies local login if `provider` is null, else whether the passed @@ -49,7 +73,9 @@ function externalLoginInfoService(externalLoginInfo) { return { hasDenyLocalLogin: hasDenyLocalLogin, getLoginProviders: getLoginProviders, - getUserInviteLink: getUserInviteLink + getUserInviteLink: getUserInviteLink, + getExternalLoginProviderView: getExternalLoginProviderView, + getExternalLoginProviderViewForErrors: getExternalLoginProviderViewForErrors }; } angular.module('umbraco.services').factory('externalLoginInfoService', externalLoginInfoService); diff --git a/src/Umbraco.Web.UI.Client/src/views/components/application/umb-login.html b/src/Umbraco.Web.UI.Client/src/views/components/application/umb-login.html index b77236d84f..385977fdc5 100644 --- a/src/Umbraco.Web.UI.Client/src/views/components/application/umb-login.html +++ b/src/Umbraco.Web.UI.Client/src/views/components/application/umb-login.html @@ -125,8 +125,13 @@