Add js code to check ppolicy (#2249)

This commit is contained in:
Maxime Besson 2020-08-21 16:35:33 +02:00
parent cdafab6bfe
commit 3bec9351f0
4 changed files with 247 additions and 22 deletions

View File

@ -381,6 +381,111 @@ $(window).on 'load', () ->
setCookie 'llnglanguage', lang
translatePage lang
isAlphaNumeric = (chr) ->
code = chr.charCodeAt(0)
if code > 47 and code < 58 or code > 64 and code < 91 or code > 96 and code < 123
return true
false
# Password policy
checkpassword = (password) ->
result = true
if window.datas.ppolicy.minsize > 0
if password.length >= window.datas.ppolicy.minsize
$('#ppolicy-minsize-feedback').addClass 'fa-check text-success'
$('#ppolicy-minsize-feedback').removeClass 'fa-times text-danger'
else
$('#ppolicy-minsize-feedback').removeClass 'fa-check text-success'
$('#ppolicy-minsize-feedback').addClass 'fa-times text-danger'
result = false
if window.datas.ppolicy.minupper > 0
upper = password.match(/[A-Z]/g)
if upper and upper.length >= window.datas.ppolicy.minupper
$('#ppolicy-minupper-feedback').addClass 'fa-check text-success'
$('#ppolicy-minupper-feedback').removeClass 'fa-times text-danger'
else
$('#ppolicy-minupper-feedback').removeClass 'fa-check text-success'
$('#ppolicy-minupper-feedback').addClass 'fa-times text-danger'
result = false
if window.datas.ppolicy.minlower > 0
lower = password.match(/[a-z]/g)
if lower and lower.length >= window.datas.ppolicy.minlower
$('#ppolicy-minlower-feedback').addClass 'fa-check text-success'
$('#ppolicy-minlower-feedback').removeClass 'fa-times text-danger'
else
$('#ppolicy-minlower-feedback').removeClass 'fa-check text-success'
$('#ppolicy-minlower-feedback').addClass 'fa-times text-danger'
result = false
if window.datas.ppolicy.mindigit > 0
digit = password.match(/[0-9]/g)
if digit and digit.length >= window.datas.ppolicy.mindigit
$('#ppolicy-mindigit-feedback').addClass 'fa-check text-success'
$('#ppolicy-mindigit-feedback').removeClass 'fa-times text-danger'
else
$('#ppolicy-mindigit-feedback').removeClass 'fa-check text-success'
$('#ppolicy-mindigit-feedback').addClass 'fa-times text-danger'
result = false
if window.datas.ppolicy.allowedspechar
nonwhitespechar = window.datas.ppolicy.allowedspechar.replace(/\s/g, '')
hasforbidden = false
i = 0
len = password.length
while i < len
if !isAlphaNumeric(password.charAt(i))
if nonwhitespechar.indexOf(password.charAt(i)) < 0
hasforbidden = true
i++
if hasforbidden == false
$('#ppolicy-allowedspechar-feedback').addClass 'fa-check text-success'
$('#ppolicy-allowedspechar-feedback').removeClass 'fa-times text-danger'
else
$('#ppolicy-allowedspechar-feedback').removeClass 'fa-check text-success'
$('#ppolicy-allowedspechar-feedback').addClass 'fa-times text-danger'
result = false
if window.datas.ppolicy.minspechar > 0 and window.datas.ppolicy.allowedspechar
numspechar = 0
nonwhitespechar = window.datas.ppolicy.allowedspechar.replace(/\s/g, '')
i = 0
while i < password.length
if nonwhitespechar.indexOf(password.charAt(i)) >= 0
numspechar++
i++
if numspechar >= window.datas.ppolicy.minspechar
$('#ppolicy-minspechar-feedback').addClass 'fa-check text-success'
$('#ppolicy-minspechar-feedback').removeClass 'fa-times text-danger'
else
$('#ppolicy-minspechar-feedback').removeClass 'fa-check text-success'
$('#ppolicy-minspechar-feedback').addClass 'fa-times text-danger'
result = false
if result
$('.ppolicy').removeClass('border-danger').addClass 'border-success'
$('#newpassword')[0].setCustomValidity('')
else
$('.ppolicy').removeClass('border-success').addClass 'border-danger'
$('#newpassword')[0].setCustomValidity(translate('PE28'))
return
if window.datas.ppolicy?
# Initialize display
checkpassword ''
$('#newpassword').keyup (e) ->
checkpassword e.target.value
return
checksamepass = () ->
if $('#confirmpassword')[0].value == $('#newpassword')[0].value
$('#confirmpassword')[0].setCustomValidity('')
return true
else
$('#confirmpassword')[0].setCustomValidity(translate('PE34'))
return false
$('#newpassword').change checksamepass
$('#confirmpassword').change checksamepass
# Ping if asked
if datas['pingInterval'] and datas['pingInterval'] > 0
window.setTimeout ping, datas['pingInterval']

View File

@ -27,11 +27,11 @@ LemonLDAP::NG Portal jQuery scripts
}
}
$("[trspan]").each(function() {
var args, i, len, txt;
var args, l, len1, txt;
args = $(this).attr('trspan').split(',');
txt = translate(args.shift());
for (i = 0, len = args.length; i < len; i++) {
v = args[i];
for (l = 0, len1 = args.length; l < len1; l++) {
v = args[l];
txt = txt.replace(/%[sd]/, v);
}
return $(this).html(txt);
@ -156,7 +156,7 @@ LemonLDAP::NG Portal jQuery scripts
};
restoreOrder = function() {
var IDs, child, i, item, itemID, items, l, len, len1, list, rebuild, savedOrd, v;
var IDs, child, item, itemID, items, l, len1, len2, list, m, rebuild, savedOrd, v;
list = $(setSelector);
if (!((list != null) && datas['appslistorder'])) {
return null;
@ -164,12 +164,12 @@ LemonLDAP::NG Portal jQuery scripts
IDs = datas['appslistorder'].split(',');
items = list.sortable("toArray");
rebuild = [];
for (i = 0, len = items.length; i < len; i++) {
v = items[i];
for (l = 0, len1 = items.length; l < len1; l++) {
v = items[l];
rebuild[v] = v;
}
for (l = 0, len1 = IDs.length; l < len1; l++) {
itemID = IDs[l];
for (m = 0, len2 = IDs.length; m < len2; m++) {
itemID = IDs[m];
if (rebuild[itemID]) {
item = rebuild[itemID];
child = $(setSelector + ".ui-sortable").children("#" + item);
@ -209,12 +209,12 @@ LemonLDAP::NG Portal jQuery scripts
window.ping = ping;
getCookie = function(cname) {
var c, ca, i, len, name, re;
var c, ca, l, len1, name, re;
name = cname + "=";
ca = decodeURIComponent(document.cookie).split(';');
re = new RegExp('^ *' + cname + '=');
for (i = 0, len = ca.length; i < len; i++) {
c = ca[i];
for (l = 0, len1 = ca.length; l < len1; l++) {
c = ca[l];
if (c.match(re)) {
c = c.replace(re, '');
return c;
@ -233,7 +233,7 @@ LemonLDAP::NG Portal jQuery scripts
datas = {};
$(window).on('load', function() {
var action, al, authMenuIndex, authMenuTabs, back_url, hiddenParams, i, l, lang, langdiv, langs, langs2, len, len1, len2, len3, link, m, menuIndex, menuTabs, method, n, nl, nlangs, queryLang, re, ref, ref1, ref2, setCookieLang;
var action, al, authMenuIndex, authMenuTabs, back_url, checkpassword, checksamepass, hiddenParams, isAlphaNumeric, l, lang, langdiv, langs, langs2, len1, len2, len3, len4, link, m, menuIndex, menuTabs, method, n, nl, nlangs, o, queryLang, re, ref, ref1, ref2, setCookieLang;
datas = getValues();
if ("datas" in window && "choicetab" in window.datas) {
datas.choicetab = window.datas.choicetab;
@ -335,16 +335,16 @@ LemonLDAP::NG Portal jQuery scripts
nlangs = navigator.languages;
}
ref = window.availableLanguages;
for (i = 0, len = ref.length; i < len; i++) {
al = ref[i];
for (l = 0, len1 = ref.length; l < len1; l++) {
al = ref[l];
langdiv += "<img class=\"langicon\" src=\"" + window.staticPrefix + "common/" + al + ".png\" title=\"" + al + "\" alt=\"[" + al + "]\"> ";
}
for (l = 0, len1 = nlangs.length; l < len1; l++) {
nl = nlangs[l];
for (m = 0, len2 = nlangs.length; m < len2; m++) {
nl = nlangs[m];
console.log('Navigator lang', nl);
ref1 = window.availableLanguages;
for (m = 0, len2 = ref1.length; m < len2; m++) {
al = ref1[m];
for (n = 0, len3 = ref1.length; n < len3; n++) {
al = ref1[n];
console.log(' Available lang', al);
re = new RegExp('^' + al + '-?');
if (nl.match(re)) {
@ -389,8 +389,8 @@ LemonLDAP::NG Portal jQuery scripts
}
langdiv = '';
ref2 = window.availableLanguages;
for (n = 0, len3 = ref2.length; n < len3; n++) {
al = ref2[n];
for (o = 0, len4 = ref2.length; o < len4; o++) {
al = ref2[o];
langdiv += "<img class=\"langicon\" src=\"" + window.staticPrefix + "common/" + al + ".png\" title=\"" + al + "\" alt=\"[" + al + "]\"> ";
}
$('#languages').html(langdiv);
@ -399,6 +399,126 @@ LemonLDAP::NG Portal jQuery scripts
setCookie('llnglanguage', lang);
return translatePage(lang);
});
isAlphaNumeric = function(chr) {
var code;
code = chr.charCodeAt(0);
if (code > 47 && code < 58 || code > 64 && code < 91 || code > 96 && code < 123) {
return true;
}
return false;
};
checkpassword = function(password) {
var digit, hasforbidden, i, len, lower, nonwhitespechar, numspechar, result, upper;
result = true;
if (window.datas.ppolicy.minsize > 0) {
if (password.length >= window.datas.ppolicy.minsize) {
$('#ppolicy-minsize-feedback').addClass('fa-check text-success');
$('#ppolicy-minsize-feedback').removeClass('fa-times text-danger');
} else {
$('#ppolicy-minsize-feedback').removeClass('fa-check text-success');
$('#ppolicy-minsize-feedback').addClass('fa-times text-danger');
result = false;
}
}
if (window.datas.ppolicy.minupper > 0) {
upper = password.match(/[A-Z]/g);
if (upper && upper.length >= window.datas.ppolicy.minupper) {
$('#ppolicy-minupper-feedback').addClass('fa-check text-success');
$('#ppolicy-minupper-feedback').removeClass('fa-times text-danger');
} else {
$('#ppolicy-minupper-feedback').removeClass('fa-check text-success');
$('#ppolicy-minupper-feedback').addClass('fa-times text-danger');
result = false;
}
}
if (window.datas.ppolicy.minlower > 0) {
lower = password.match(/[a-z]/g);
if (lower && lower.length >= window.datas.ppolicy.minlower) {
$('#ppolicy-minlower-feedback').addClass('fa-check text-success');
$('#ppolicy-minlower-feedback').removeClass('fa-times text-danger');
} else {
$('#ppolicy-minlower-feedback').removeClass('fa-check text-success');
$('#ppolicy-minlower-feedback').addClass('fa-times text-danger');
result = false;
}
}
if (window.datas.ppolicy.mindigit > 0) {
digit = password.match(/[0-9]/g);
if (digit && digit.length >= window.datas.ppolicy.mindigit) {
$('#ppolicy-mindigit-feedback').addClass('fa-check text-success');
$('#ppolicy-mindigit-feedback').removeClass('fa-times text-danger');
} else {
$('#ppolicy-mindigit-feedback').removeClass('fa-check text-success');
$('#ppolicy-mindigit-feedback').addClass('fa-times text-danger');
result = false;
}
}
if (window.datas.ppolicy.allowedspechar) {
nonwhitespechar = window.datas.ppolicy.allowedspechar.replace(/\s/g, '');
hasforbidden = false;
i = 0;
len = password.length;
while (i < len) {
if (!isAlphaNumeric(password.charAt(i))) {
if (nonwhitespechar.indexOf(password.charAt(i)) < 0) {
hasforbidden = true;
}
}
i++;
}
if (hasforbidden === false) {
$('#ppolicy-allowedspechar-feedback').addClass('fa-check text-success');
$('#ppolicy-allowedspechar-feedback').removeClass('fa-times text-danger');
} else {
$('#ppolicy-allowedspechar-feedback').removeClass('fa-check text-success');
$('#ppolicy-allowedspechar-feedback').addClass('fa-times text-danger');
result = false;
}
}
if (window.datas.ppolicy.minspechar > 0 && window.datas.ppolicy.allowedspechar) {
numspechar = 0;
nonwhitespechar = window.datas.ppolicy.allowedspechar.replace(/\s/g, '');
i = 0;
while (i < password.length) {
if (nonwhitespechar.indexOf(password.charAt(i)) >= 0) {
numspechar++;
}
i++;
}
if (numspechar >= window.datas.ppolicy.minspechar) {
$('#ppolicy-minspechar-feedback').addClass('fa-check text-success');
$('#ppolicy-minspechar-feedback').removeClass('fa-times text-danger');
} else {
$('#ppolicy-minspechar-feedback').removeClass('fa-check text-success');
$('#ppolicy-minspechar-feedback').addClass('fa-times text-danger');
result = false;
}
}
if (result) {
$('.ppolicy').removeClass('border-danger').addClass('border-success');
$('#newpassword')[0].setCustomValidity('');
} else {
$('.ppolicy').removeClass('border-success').addClass('border-danger');
$('#newpassword')[0].setCustomValidity(translate('PE28'));
}
};
if (window.datas.ppolicy != null) {
checkpassword('');
$('#newpassword').keyup(function(e) {
checkpassword(e.target.value);
});
}
checksamepass = function() {
if ($('#confirmpassword')[0].value === $('#newpassword')[0].value) {
$('#confirmpassword')[0].setCustomValidity('');
return true;
} else {
$('#confirmpassword')[0].setCustomValidity(translate('PE34'));
return false;
}
};
$('#newpassword').change(checksamepass);
$('#confirmpassword').change(checksamepass);
if (datas['pingInterval'] && datas['pingInterval'] > 0) {
window.setTimeout(ping, datas['pingInterval']);
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long