92 lines
2.2 KiB
JavaScript
92 lines
2.2 KiB
JavaScript
/**
|
|
* Contains user management methods for the User Interface.
|
|
*/
|
|
class Users {
|
|
/**
|
|
* Creates an instance of the Users class.
|
|
* @param {string} signInForm - The name of the sign-in form calling these methods.
|
|
*/
|
|
constructor(signInForm) {
|
|
this.name = 'login';
|
|
this.signInForm = signInForm;
|
|
}
|
|
|
|
/**
|
|
* Toggles the login popup.
|
|
*/
|
|
toggleLogin() {
|
|
document.getElementById('login_popup').classList.toggle('logon_active');
|
|
}
|
|
|
|
/**
|
|
* Executes the logout operation.
|
|
*/
|
|
logout() {
|
|
window.location.href = '/signout';
|
|
}
|
|
|
|
/**
|
|
* Validates the input fields of a standard login form.
|
|
* @param {Object} elements - The input elements of the form.
|
|
*/
|
|
validateInput(elements) {
|
|
/* Validate a standard login form */
|
|
const isValid = this.checkRequiredFields(elements) && this.checkPasswordStrength(elements.password);
|
|
|
|
if (isValid) {
|
|
document.forms[this.signInForm].submit();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Checks if the required fields of the form are filled.
|
|
* @param {Object} elements - The input elements of the form.
|
|
* @returns {boolean} - True if all required fields are filled, false otherwise.
|
|
*/
|
|
checkRequiredFields(elements) {
|
|
const keys = Object.keys(elements);
|
|
|
|
for (let i = 0; i < keys.length; i++) {
|
|
const el = elements[keys[i]];
|
|
if (el.value.length < 1) {
|
|
alert(`Must enter ${el.name}`);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Checks the strength of the password.
|
|
* @param {Object} passwordElement - The password input element.
|
|
* @returns {boolean} - True if the password meets the strength requirements, false otherwise.
|
|
*/
|
|
checkPasswordStrength(passwordElement) {
|
|
const password = passwordElement.value;
|
|
|
|
if (password.length < 6) {
|
|
alert('Password must be at least 6 characters.');
|
|
return false;
|
|
}
|
|
|
|
if (!/\d/.test(password)) {
|
|
alert('Password must contain at least 1 number.');
|
|
return false;
|
|
}
|
|
|
|
if (!/[A-Z]/.test(password)) {
|
|
alert('Password must contain at least 1 uppercase letter.');
|
|
return false;
|
|
}
|
|
|
|
if (!/[a-z]/.test(password)) {
|
|
alert('Password must contain at least 1 lowercase letter.');
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
}
|
|
|