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

127 lines
3.4 KiB

class Authenticate {
constructor() {
this._form = document.querySelector("#login-form");
this._inputUser = document.querySelector("#input-username");
this._inputPass = document.querySelector("#input-password");
this._input_eye = document.querySelector("#pass-eye");
this._username = "";
this._password = "";
this._init();
}
_setForm() {
this._form.addEventListener("submit", (ev) => {
ev.preventDefault();
var inputs = this._form.querySelectorAll("input");
var data = getArrayForm(inputs);
if (!data) return false;
this._username = data.username;
this._password = data.password;
this._respond();
});
}
_setPasswordEye() {
this._input_eye.addEventListener("click", () => {
if (this._inputPass.type === "password") {
this._inputPass.type = "text";
} else {
this._inputPass.type = "password";
}
});
}
async _respond() {
this._inputUser.blur();
this._inputUser.disabled = true;
this._inputPass.blur();
this._inputPass.disabled = true;
lightdm.cancel_authentication();
lightdm.authenticate(String(this._username));
await wait(1000);
lightdm.respond(this._password);
}
_showMessage(msg) {
let message = document.querySelector("#auth-message");
message.innerText = msg;
message.classList.remove("hide");
}
_hideMessage() {
let message = document.querySelector("#auth-message");
message.classList.add("hide");
}
async _authentication_done() {
let body = document.querySelector("body");
body.classList.add("success");
this._showMessage("Welcome!");
let form = document.querySelector("#pass-form");
let topbar = document.querySelector("#top-bar");
let bottombar = document.querySelector("#bottom-bar");
form.style.transition = "0ms";
form.classList.add("hide");
topbar.classList.add("hide");
bottombar.classList.add("hide");
await wait(1000);
let defSession = String(sessions.getDefaultSession());
document.querySelector("body").style.opacity = 0;
await wait(1000);
console.log("Session started with", defSession);
lightdm.start_session(defSession);
}
async _authentication_failed() {
lightdm.cancel_authentication();
let body = document.querySelector("body");
body.classList.add("failed");
this._showMessage("Try again");
let form = document.querySelector("#pass-form");
let topbar = document.querySelector("#top-bar");
let bottombar = document.querySelector("#bottom-bar");
form.style.transition = "0ms";
form.classList.add("hide");
topbar.classList.add("hide");
bottombar.classList.add("hide");
await wait(1500);
this._hideMessage();
form.style.transition = "";
form.classList.remove("hide");
topbar.classList.remove("hide");
bottombar.classList.remove("hide");
this._inputUser.blur();
this._inputUser.disabled = false;
this._inputPass.blur();
this._inputPass.disabled = false;
this._inputPass.value = "";
body.classList.remove("failed");
}
_setAuthentication_done() {
window.authentication_done = () => {
if (lightdm.is_authenticated) {
this._authentication_done();
} else {
this._authentication_failed();
}
};
}
_init() {
this._setForm();
this._setAuthentication_done();
this._setPasswordEye();
}
}