From 1ba940b03df18215e4f28b8a0de24c22f42450f4 Mon Sep 17 00:00:00 2001 From: Shannon Date: Wed, 6 May 2020 18:53:13 +1000 Subject: [PATCH 01/38] Updates UI to not show user options when there is a provider with deny local login --- .../application/umblogin.directive.js | 6 ++- .../services/externallogininfo.service.js | 38 ++++++++++++++++ .../common/overlays/user/user.controller.js | 12 ++++- .../src/views/common/overlays/user/user.html | 42 +++++++++-------- .../components/application/umb-login.html | 14 +++--- .../src/views/users/user.controller.js | 6 ++- .../users/views/user/details.controller.js | 13 ++++++ .../src/views/users/views/user/details.html | 6 +-- .../users/views/users/users.controller.js | 45 ++++++++++--------- .../AuthenticationOptionsExtensions.cs | 5 +++ 10 files changed, 134 insertions(+), 53 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/common/services/externallogininfo.service.js create mode 100644 src/Umbraco.Web.UI.Client/src/views/users/views/user/details.controller.js 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 541cc647fb..0fa36ca46e 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 @@ -13,7 +13,10 @@ } }); - function UmbLoginController($scope, $location, currentUserResource, formHelper, mediaHelper, umbRequestHelper, Upload, localizationService, userService, externalLoginInfo, resetPasswordCodeInfo, $timeout, authResource, $q, $route) { + function UmbLoginController($scope, $location, currentUserResource, formHelper, + mediaHelper, umbRequestHelper, Upload, localizationService, + userService, externalLoginInfo, externalLoginInfoService, + resetPasswordCodeInfo, $timeout, authResource, $q, $route) { const vm = this; @@ -44,6 +47,7 @@ vm.errorMsg = ""; vm.externalLoginFormAction = Umbraco.Sys.ServerVariables.umbracoUrls.externalLoginsUrl; vm.externalLoginProviders = externalLoginInfo.providers; + vm.denyLocalLogin = externalLoginInfoService.hasDenyLocalLogin(); 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 new file mode 100644 index 0000000000..f292c45ed4 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/common/services/externallogininfo.service.js @@ -0,0 +1,38 @@ +/** + * @ngdoc service + * @name umbraco.services.externalLoginInfoService + * @description A service for working with external login providers + **/ +function externalLoginInfoService(externalLoginInfo) { + + /** + * Returns true if any provider denies local login if `provider` is null, else whether the passed + * @param {any} provider + */ + function hasDenyLocalLogin(provider) { + if (!provider) { + return _.some(externalLoginInfo.providers, x => x.properties.UmbracoBackOffice_DenyLocalLogin === true); + } + else { + return provider.properties.UmbracoBackOffice_DenyLocalLogin; + } + } + + /** + * Returns all login providers + * @param {any} excludeDenyLocalLogin true to exclude providers the deny local login + */ + function getLoginProviders(excludeDenyLocalLogin) { + if (excludeDenyLocalLogin) { + return _.filter(externalLoginInfo.providers, x => !x.properties.UmbracoBackOffice_DenyLocalLogin); + } + else { + return externalLoginInfo.providers; + } + } + + return { + hasDenyLocalLogin: hasDenyLocalLogin + }; +} +angular.module('umbraco.services').factory('externalLoginInfoService', externalLoginInfoService); diff --git a/src/Umbraco.Web.UI.Client/src/views/common/overlays/user/user.controller.js b/src/Umbraco.Web.UI.Client/src/views/common/overlays/user/user.controller.js index 8248d11863..91fc3babda 100644 --- a/src/Umbraco.Web.UI.Client/src/views/common/overlays/user/user.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/common/overlays/user/user.controller.js @@ -1,5 +1,8 @@ angular.module("umbraco") - .controller("Umbraco.Overlays.UserController", function ($scope, $location, $timeout, dashboardResource, userService, historyService, eventsService, externalLoginInfo, authResource, currentUserResource, formHelper, localizationService) { + .controller("Umbraco.Overlays.UserController", function ($scope, $location, $timeout, + dashboardResource, userService, historyService, eventsService, + externalLoginInfo, externalLoginInfoService, authResource, + currentUserResource, formHelper, localizationService) { $scope.history = historyService.getCurrent(); //$scope.version = Umbraco.Sys.ServerVariables.application.version + " assembly: " + Umbraco.Sys.ServerVariables.application.assemblyVersion; @@ -14,7 +17,12 @@ angular.module("umbraco") }); } */ - $scope.externalLoginProviders = externalLoginInfo.providers; + + // Set flag if any have deny local login, in which case we must disable all password functionality + $scope.denyLocalLogin = externalLoginInfoService.hasDenyLocalLogin(); + // Only include login providers that don't deny local login + $scope.externalLoginProviders = externalLoginInfoService.getLoginProviders(true); + $scope.externalLinkLoginFormAction = Umbraco.Sys.ServerVariables.umbracoUrls.externalLinkLoginsUrl; var evts = []; evts.push(eventsService.on("historyService.add", function (e, args) { diff --git a/src/Umbraco.Web.UI.Client/src/views/common/overlays/user/user.html b/src/Umbraco.Web.UI.Client/src/views/common/overlays/user/user.html index 8b12d061f3..2199250faa 100644 --- a/src/Umbraco.Web.UI.Client/src/views/common/overlays/user/user.html +++ b/src/Umbraco.Web.UI.Client/src/views/common/overlays/user/user.html @@ -21,6 +21,7 @@ -
- - +
+ + - - - + + @@ -86,7 +90,7 @@ -
+
Change password 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 2e81395643..b77236d84f 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 @@ -8,7 +8,7 @@
-