You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

135 lines
5.0 KiB

/** @odoo-module **/
/*Extending the public widget of the reset form for checking the user
password strength conditions on password input function of the password field in
the reset form,Based on the conditions from configuration settings.*/
import { jsonrpc } from "@web/core/network/rpc_service";
import publicWidget from "@web/legacy/js/public/public_widget";
publicWidget.registry.SignUpFormInputPasswordChange = publicWidget.Widget.extend({
selector: '.oe_signup_form',
events: {
'input input[type="password"]': '_onPasswordInput', // Listening for input event on password field
},
start() {
this._super.apply(this, arguments);
},
_onPasswordInput: function (ev) {
var passwordInput = ev.currentTarget; // Get the password input field
var current_pwd = passwordInput.value; // Get the current password value
// Reset the progress bar if the password field is empty
if (current_pwd.length === 0) {
var progressBar = document.getElementById("progress");
if (progressBar) {
progressBar.value = "0";
progressBar.style.backgroundColor = "#FF0000"; // Reset to red
}
return;
}
// Fetch configuration settings via jsonrpc
jsonrpc('/web/config_params', {}).then(function (data) {
var conditions = [];
for (let key in data) {
conditions.push(data[key]);
}
var flag = conditions.filter(cond => cond === 'True').length;
// Evaluate password strength based on specific conditions
var prog = [/[$@$!%*#?&]/, /[A-Z]/, /[0-9]/, /[a-z]/]
.reduce((memo, test) => memo + test.test(current_pwd), 0);
if (prog > 2 && current_pwd.length > 7) {
prog++;
}
var progress = "0";
var colors = ['#FF0000', '#00FF00', '#0000FF']; // Red, Green, Blue for progress levels
var currentColor = colors[0];
// Adjust progress based on conditions enabled
switch (flag) {
case 5:
switch (prog) {
case 0:
case 1:
progress = "20";
break;
case 2:
progress = "25";
break;
case 3:
progress = "50";
currentColor = colors[1]; // Green
break;
case 4:
progress = "75";
currentColor = colors[1]; // Green
break;
case 5:
progress = "100";
currentColor = colors[1]; // Green
break;
}
break;
case 4:
switch (prog) {
case 0:
case 1:
case 2:
progress = "25";
break;
case 3:
progress = "50";
currentColor = colors[0]; // Red
break;
case 4:
progress = "75";
currentColor = colors[1]; // Green
break;
case 5:
progress = "100";
currentColor = colors[1]; // Green
break;
}
break;
case 3:
switch (prog) {
case 0:
case 1:
case 2:
case 3:
progress = "33.33";
break;
case 4:
progress = "66.66";
currentColor = colors[1]; // Green
break;
case 5:
progress = "100";
currentColor = colors[1]; // Green
break;
}
break;
case 2:
progress = (prog !== 5) ? "50" : "100";
currentColor = (prog !== 5) ? colors[0] : colors[1]; // Red or Green
break;
case 1:
progress = "100";
currentColor = colors[1]; // Green
break;
}
// Update progress bar
var progressBar = document.getElementById("progress");
if (progressBar) {
progressBar.value = progress;
progressBar.style.backgroundColor = currentColor;
}
});
},
});