Goal
Extend User Properties form of Touch UI to enforce a simple password policy. The validation checks if user has entered atleast one number in password, while creating a new user or changing the password for existing user
For Classic UI, check this post
For product password validation provider, check this post
Demo | Package Install
New User
Change Password
Solution
1) Login to CRXDE Lite, create folder (nt:folder) /apps/touchui-enforce-password-policy
2) Create clientlib (type cq:ClientLibraryFolder) /apps/touchui-enforce-password-policy/clientlib and set a property categories of String type to granite.securityCUI
3) Create file ( type nt:file ) /apps/touchui-enforce-password-policy/clientlib/js.txt, add the following
policy.js
4) Create file ( type nt:file ) /apps/touchui-enforce-password-policy/clientlib/policy.js, add the following code
(function ($, $document) { //id added in /libs/granite/security/content/userEditor/items/page/items/contentWrapper/items/contentContainer/items/content/items/content/items/photoSettings/items/col1/items/accountSettings/items/changePassword var ADMIN_PASSWORD_DIV = "#admin_password", FIELD_CHANGE_PASSWORD = ".change-user-password", // change password form FIELD_NEW_USER_PASSWORD = ".user-password-fields", //new user form BUTTON_OK = ".user-admin-change-password", // change password form BUTTON_SAVE = ".user-admin-save-user", //new user form RE_TYPE_PASSWORD_FIELD = "[name='rep:re-password']"; var $policyText = $("<div/>").css('padding-bottom', '10px') .css('font-style', 'italic') .css('text-align', 'center') .html('New Password must contain a number'); $(ADMIN_PASSWORD_DIV).find(".coral-Modal-body") .prepend($policyText); $(ADMIN_PASSWORD_DIV).find(RE_TYPE_PASSWORD_FIELD).focusout(focusHandler); $(FIELD_NEW_USER_PASSWORD).find(RE_TYPE_PASSWORD_FIELD).focusout(focusHandler); //change password form $document.on("keyup", FIELD_CHANGE_PASSWORD, function(){ keyHandler($(FIELD_CHANGE_PASSWORD)); }); //new user form $document.on("keyup.user-admin change.user-admin selected.user-admin", ".save-button-enabler", function(){ keyHandler( $(FIELD_NEW_USER_PASSWORD).find("[type=password]")); }); function keyHandler($fields){ if(!$fields || $fields.length != 2){ return; } var one = $($fields[0]).val(), two = $($fields[1]).val(); if(isValidPassword(one) && isValidPassword(two) && (one == two)){ return; } $(BUTTON_OK).attr("disabled", "disabled"); // change password form $(BUTTON_SAVE).attr("disabled", "disabled"); //new user form } function focusHandler(event){ clearErrors(); var val = $(event.currentTarget).val(); if(isValidPassword(val)){ return; } var message = "Password must contain a number"; showErrorAlert(message); } function clearErrors(){ $(BUTTON_OK).removeAttr("disabled"); // change password form $(BUTTON_SAVE).removeAttr("disabled"); //new user form } function isValidPassword(text){ if(!text){ return true; } //check for number in text return /\d/.test(text); } function showErrorAlert(message, title){ var fui = $(window).adaptTo("foundation-ui"), options = [{ text: "OK", warning: true }]; title = title || "Error"; fui.prompt(title, message, "notice", options); $(BUTTON_OK).attr("disabled", "disabled"); // change password form $(BUTTON_SAVE).attr("disabled", "disabled"); //new user form } })(jQuery, jQuery(document));
No comments:
Post a Comment