murph-skeleton/assets/js/admin/modules/password.js

83 lines
3 KiB
JavaScript

const $ = require('jquery')
const zxcvbn = require('zxcvbn')
const scoreColors = [
'danger',
'danger',
'warning',
'warning',
'success'
]
const scoreInfos = {
'This is a top-10 common password': 'Parmis le top 10 des mots de passes communs',
'This is a top-100 common password': 'Parmis le top 100 des mots de passes communs',
'This is a very common password': 'Mot de passe vraiment trop commun',
'This is similar to a commonly used password': 'Similaire à un mot de passe commun',
'A word by itself is easy to guess': 'Ce mot est trop simple à deviner',
'Names and surnames by themselves are easy to guess': 'Les noms ou les surnoms sont simples à deviner',
'Common names and surnames are easy to guess': 'Les noms ou les surnoms sont simples à deviner',
'Straight rows of keys are easy to guess': 'Combinaison de touches trop simple',
'Short keyboard patterns are easy to guess': 'Combinaison de touches trop simple',
"Repeats like \"aaa\" are easy to guess'": 'Les répétitions comme "aaa" sont simples à deviner',
'Repeats like "abcabcabc" are only slightly harder to guess than "abc"': 'Les répétitions comme "abcabcabc" sont simples à deviner',
'Sequences like abc or 6543 are easy to guess': 'Les séquences comme "abc" ou "6543" sont simples à deviner',
'Recent years are easy to guess': 'Les années sont simples à deviner',
'Dates are often easy to guess': 'Les dates sont souvent simples à deviner'
}
const checkPassword = function (password, confirmation, indicator, submit) {
const result = zxcvbn(password.val())
const score = result.score
const cols = indicator.children('.col-sm')
const info = indicator.children('.password-strenth-info')
info.text('')
cols.attr('class', 'col-sm')
for (let u = 0; u <= 5; u++) {
const col = cols.eq(u)
if (u <= score) {
col.addClass('bg-' + scoreColors[score])
} else {
col.addClass('bg-light')
}
}
console.log(result)
info.text(scoreInfos[result.feedback.warning])
info.attr('class', 'col-12 password-strenth-info text-' + scoreColors[score])
if (score < 4 || confirmation.val() !== password.val()) {
submit.attr('disabled', 'disabled')
} else {
submit.removeAttr('disabled')
}
}
module.exports = function () {
const passwordNew = $('#form-password-new')
const passwordConfirmation = $('#form-password-confirmation')
const passwordSubmit = $('#form-password-submit')
const passwordStrength = $('#form-password-strength')
if (passwordStrength.length) {
passwordNew.keyup(function () {
checkPassword(passwordNew, passwordConfirmation, passwordStrength, passwordSubmit)
})
passwordNew.change(function () {
checkPassword(passwordNew, passwordConfirmation, passwordStrength, passwordSubmit)
})
passwordConfirmation.keyup(function () {
checkPassword(passwordNew, passwordConfirmation, passwordStrength, passwordSubmit)
})
passwordConfirmation.change(function () {
checkPassword(passwordNew, passwordConfirmation, passwordStrength, passwordSubmit)
})
}
}