tracman-server/static/js/password.js

114 lines
4.2 KiB
JavaScript
Executable File

'use strict'
/* global $ zxcvbn */
function checkMatch () {
$('#submit')
.prop('title', 'You need to type your password again before you can save it. ')
// They match
if ($('#p1').val() === $('#p2').val()) {
$('#submit')
.prop('disabled', false)
.prop('title', 'Click here to save your password. ')
// User has retyped, but they don't match yet
} else if ($('#p2').val() !== '') {
$('#password-help')
.text("Those passwords don't match... ")
.css({'color': '#fb6e3d'})
$('#submit')
.prop('disabled', true)
.prop('title', 'You need to type the same password twice before you can save it. ')
}
}
// On page load
$(function () {
// On typing password
$('.password').keyup(function () {
// Nothing entered
if ($('#p1').val() === '' && $('#p2').val() === '') {
$('#password-help').hide()
$('#submit')
.prop('disabled', true)
.prop('title', 'You need to enter a password first. ')
// Only second password entered
} else if ($('#p1').val() === '') {
$('#password-help').show()
.text("Those passwords don't match... ")
$('#submit')
.prop('disabled', true)
.prop('title', 'You need to type the same password twice correctly before you can save it. ')
// At least first password entered
} else {
$('#password-help').show()
// Check first password
let zxcvbnResult = zxcvbn($('#p1').val())
// Less than an hour
if (zxcvbnResult.crack_times_seconds.online_no_throttling_10_per_second < 3600) {
$('#password-help')
.text('That password is way too common or simple. \
You may not use it for Tracman and should not use it anywhere. ')
.css({'color': '#fb6e3d'})
$('#submit')
.prop('disabled', true)
.prop('title', 'You need to come up with a better password. ')
// Less than a day
} else if (zxcvbnResult.crack_times_seconds.online_no_throttling_10_per_second < 86400) {
$('#password-help')
.text('That password is pretty bad. It could be cracked in ' +
zxcvbnResult.crack_times_display.online_no_throttling_10_per_second +
'. Try adding more words, numbers, or symbols. ')
.css({'color': '#fb6e3d'})
$('#submit')
.prop('disabled', true)
.prop('title', 'You need to come up with a better password. ')
// Less than ten days
} else if (zxcvbnResult.crack_times_seconds.online_no_throttling_10_per_second < 864000) {
$('#password-help')
.text("That password isn't good enough. It could be cracked in " +
zxcvbnResult.crack_times_display.online_no_throttling_10_per_second +
'. Try adding another word, number, or symbol. ')
.css({'color': '#fb6e3d'})
$('#submit')
.prop('disabled', true)
.prop('title', 'You need to come up with a better password. ')
// Less than thirty days, but good enough
} else if (zxcvbnResult.crack_times_seconds.online_no_throttling_10_per_second <= 2592000) {
$('#password-help')
.text('That password is good enough, but it could still be cracked in ' +
zxcvbnResult.crack_times_display.online_no_throttling_10_per_second + '. ')
.css({'color': '#eee'})
checkMatch()
// Less than a year
} else if (zxcvbnResult.crack_times_seconds.online_no_throttling_10_per_second <= 1314000) {
$('#password-help')
.text('That password is good. It would take ' +
zxcvbnResult.crack_times_display.online_no_throttling_10_per_second +
' to crack. ')
.css({'color': '#8ae137'})
checkMatch()
// Long-ass time
} else {
$('#password-help')
.text('That password is great! It could take ' +
zxcvbnResult.crack_times_display.online_no_throttling_10_per_second +
' to crack!')
.css({'color': '#8ae137'})
checkMatch()
}
}
})
// On checking 'show'
$('#show').click(function () {
if ($(this).is(':checked')) $('.password').attr('type', 'text')
else $('.password').attr('type', 'password')
})
})