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

94 lines
3.9 KiB
JavaScript

document.addEventListener("DOMContentLoaded", function () {
const currentPasswordInput = document.getElementById("currentPasswordInput");
const oldPasswordMatchError = document.getElementById("oldPasswordMatchError");
const passwordForm = document.getElementById("settingsContainer");
const passwordInput1 = document.querySelector('input[name="new_password"]');
const passwordInput2 = document.querySelector('input[name="confirm_password"]');
const passwordMatchError = document.getElementById('passwordMatchError');
passwordForm.addEventListener("submit", function (e) {
e.preventDefault(); // Prevent the default form submission.
// Clear error messages.
oldPasswordMatchError.textContent = '';
passwordMatchError.textContent = '';
// Get the entered passwords.
const currentPassword = currentPasswordInput.value;
const newPassword1 = passwordInput1.value;
const newPassword2 = passwordInput2.value;
// Function to get the CSRF token from cookies.
function getCookie(name) {
var cookieValue = null;
if (document.cookie && document.cookie !== '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = cookies[i].trim();
if (cookie.substring(0, name.length + 1) === (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
// Function to check passwords and perform validation
function validatePasswords() {
// Password strength requirements
const isLengthValid = newPassword1.length >= 8;
if (newPassword1 && newPassword2) {
if (newPassword1 === newPassword2) {
let errorMessage = '';
if (!isLengthValid) {
errorMessage += '- At least 8 characters\n';
}
if (errorMessage) {
passwordMatchError.textContent = errorMessage;
passwordMatchError.style.whiteSpace = 'pre-line';
}
} else {
passwordMatchError.textContent = 'Passwords do not match';
}
}
}
// Check if the passwords match and perform validation
if (currentPassword && newPassword1 && newPassword2) {
// Send an AJAX request to check the current password.
fetch('/check_current_password/', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-CSRFToken': getCookie('csrftoken')
},
body: JSON.stringify({ current_password: currentPassword }),
})
.then(response => response.json())
.then(data => {
if (data.is_current_password_correct) {
// Current password is correct, now validate the new passwords.
validatePasswords();
// Check if there are any error messages.
if (!oldPasswordMatchError.textContent && !passwordMatchError.textContent) {
// Password checks passed, submit the form.
passwordForm.submit();
}
} else {
// Password is incorrect. Display an error message.
oldPasswordMatchError.textContent = 'Incorrect password';
}
})
.catch(error => {
console.error('Error:', error);
});
}
});
});