Goal
Extend User Properties of Classic 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 password of existing user
For Touch UI check this post
For product password validation provider, check this post
Demo | Package Install
Create User
Change Password
Solution
1) Login to CRXDE Lite, create folder (nt:folder) /apps/classic-ui-password-policy
2) Create clientlib (type cq:ClientLibraryFolder) /apps/classic-ui-password-policy/clientlib and set a property categories of String type to cq.widgets
3) Create file ( type nt:file ) /apps/classic-ui-password-policy/clientlib/js.txt, add the following
policy.js
4) Create file (type nt:file) /apps/classic-ui-password-policy/clientlib/policy.js, add the following code
(function(){
if(window.location.pathname != "/useradmin"){
return;
}
//password validation text
var POLICY_TEXT = "New Password must contain atleast one number";
//add your policy implementation logic in the below function returning true/false
function isValidPassword(text){
if(!text){
return false;
}
//check for number in text
return /\d/.test(text);
}
var UA_INTERVAL = setInterval(function(){
var userAdmin = CQ.Ext.getCmp("cq-useradmin");
if(userAdmin && userAdmin.userProperties){
clearInterval(UA_INTERVAL);
var pwdButton = userAdmin.userProperties.pwdButtons.get(0);
pwdButton.on("click", function(){
findDialog("Set Password");
});
addPolicyToCreateUser(userAdmin);
}
}, 250);
function addPolicyToCreateUser(userAdmin){
var menu = null;
try{
menu = userAdmin.list.actions.edit.menu;
}catch(err){
console.log("Error reading menu");
}
var createMenu = menu.findBy(function(comp){
return comp.text === "Create";
})[0];
var createUserItem = createMenu.menu.findBy(function(comp){
return comp.text === "Create User";
})[0];
createUserItem.on("click", function(){
findDialog("Create User");
});
}
function findDialog(title){
var wMgr = CQ.Ext.WindowMgr;
//get the set password dialog from window manager; could not find dialog reference in userAdmin.userProperties
var W_INTERVAL = setInterval(function () {
wMgr.each(function (win) {
if (win.title !== title) {
return;
}
clearInterval(W_INTERVAL);
addPolicyText(win);
addValidationHandler(win);
});
}, 250);
}
function addPolicyText(passwordWin){
if(!passwordWin){
return;
}
var panel = passwordWin.items.get(0);
panel.body.insertHtml("afterBegin", "<div style='text-align:center; font-style: italic'>"
+ POLICY_TEXT + "</div>");
}
function addValidationHandler(passwordWin){
passwordWin.on("beforesubmit", function(){
var passField = this.findBy(function(comp){
return comp.name == "rep:password";
})[0];
if(!isValidPassword(passField.getValue())){
CQ.Ext.Msg.show({ title: "Error", msg: POLICY_TEXT,
buttons: CQ.Ext.Msg.OK, icon: CQ.Ext.Msg.ERROR});
return false;
}
return true;
})
}
}());


No comments:
Post a Comment