2021-06-15 14:26:20 +02:00
|
|
|
const $ = require('jquery')
|
|
|
|
const zxcvbn = require('zxcvbn')
|
2021-03-24 19:10:26 +01:00
|
|
|
|
2021-06-15 14:26:20 +02:00
|
|
|
const scoreColors = [
|
|
|
|
'danger',
|
|
|
|
'danger',
|
|
|
|
'warning',
|
|
|
|
'warning',
|
|
|
|
'success'
|
|
|
|
]
|
2021-03-24 19:10:26 +01:00
|
|
|
|
2021-06-15 14:26:20 +02:00
|
|
|
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'
|
2021-03-24 19:10:26 +01:00
|
|
|
}
|
|
|
|
|
2021-06-15 14:26:20 +02:00
|
|
|
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')
|
2021-03-24 19:10:26 +01:00
|
|
|
|
2021-06-15 14:26:20 +02:00
|
|
|
info.text('')
|
|
|
|
cols.attr('class', 'col-sm')
|
2021-03-24 19:10:26 +01:00
|
|
|
|
2021-06-15 14:26:20 +02:00
|
|
|
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')
|
2021-03-24 19:10:26 +01:00
|
|
|
}
|
2021-06-15 14:26:20 +02:00
|
|
|
}
|
2021-03-24 19:10:26 +01:00
|
|
|
|
2021-06-15 14:26:20 +02:00
|
|
|
console.log(result)
|
2021-03-24 19:10:26 +01:00
|
|
|
|
2021-06-15 14:26:20 +02:00
|
|
|
info.text(scoreInfos[result.feedback.warning])
|
|
|
|
info.attr('class', 'col-12 password-strenth-info text-' + scoreColors[score])
|
2021-03-24 19:10:26 +01:00
|
|
|
|
2021-06-15 14:26:20 +02:00
|
|
|
if (score < 4 || confirmation.val() !== password.val()) {
|
|
|
|
submit.attr('disabled', 'disabled')
|
|
|
|
} else {
|
|
|
|
submit.removeAttr('disabled')
|
|
|
|
}
|
2021-03-24 19:10:26 +01:00
|
|
|
}
|
|
|
|
|
2021-06-15 14:26:20 +02:00
|
|
|
module.exports = function () {
|
|
|
|
const passwordNew = $('#form-password-new')
|
|
|
|
const passwordConfirmation = $('#form-password-confirmation')
|
|
|
|
const passwordSubmit = $('#form-password-submit')
|
|
|
|
const passwordStrength = $('#form-password-strength')
|
2021-03-24 19:10:26 +01:00
|
|
|
|
2021-06-15 14:26:20 +02:00
|
|
|
if (passwordStrength.length) {
|
|
|
|
passwordNew.keyup(function () {
|
|
|
|
checkPassword(passwordNew, passwordConfirmation, passwordStrength, passwordSubmit)
|
|
|
|
})
|
2021-03-24 19:10:26 +01:00
|
|
|
|
2021-06-15 14:26:20 +02:00
|
|
|
passwordNew.change(function () {
|
|
|
|
checkPassword(passwordNew, passwordConfirmation, passwordStrength, passwordSubmit)
|
|
|
|
})
|
2021-03-24 19:10:26 +01:00
|
|
|
|
2021-06-15 14:26:20 +02:00
|
|
|
passwordConfirmation.keyup(function () {
|
|
|
|
checkPassword(passwordNew, passwordConfirmation, passwordStrength, passwordSubmit)
|
|
|
|
})
|
2021-03-24 19:10:26 +01:00
|
|
|
|
2021-06-15 14:26:20 +02:00
|
|
|
passwordConfirmation.change(function () {
|
|
|
|
checkPassword(passwordNew, passwordConfirmation, passwordStrength, passwordSubmit)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|