OpoTests/Public/ecma/Views/UserView.ecma.js

133 lines
3.6 KiB
JavaScript

"use strict";
import {Utils} from "../Utils/Utils.ecma.js";
/**
* @typedef {import("../OpoTests.ecma.js").OpoTests} OpoTests
*/
/**
* @class UserView
* @constructor
* @param {!OpoTests} ot
* @returns {void}
* @access public
* @static
*/
export const UserView = (function(){
/**
* @constructs UserView
* @param {!OpoTests} ot
* @returns {void}
* @access private
* @static
*/
const UserView = function(ot){
/** @type {Object.<string, string>} */
const data = {},
/** @type {Object.<string, integer|string|boolean|null>} */
session = {
/** @type {number} */
i : 0,
/** @type {string|null} */
user : null,
/** @type {boolean} */
ok : false
};
/** @type {number} */
let maximum = 5,
/** @type {boolean} */
started = false;
/**
* @returns {void}
* @access private
*/
const constructor = () => {
Object.entries(Utils.decrypt_data(UserView.DATA)).forEach(([key, value]) => {
data[key] = value;
});
};
/**
* @returns {Array.<any|null>}
* @access public
*/
this.build_login = callback => {
/** @type {HTMLMainElement} */
const main = document.querySelector("main");
if(!started){
started = true;
maximum = ot.settings.get("maximum_sessions_tries", null, maximum);
if(ot.cookies.has("ot")){
Object.entries(Utils.decrypt_data(ot.cookies.get("ot"))).forEach(([key, value]) => {
session[key] = value;
});
if(session.ok){
Utils.execute(callback);
return;
};
}else
ot.cookies.set("ot", Utils.encrypt_data(session));
};
Utils.html(main, ot.comp.form("login", [
["text", "username"],
["password", "password"]
], (item, event) => {
event.preventDefault();
if(session.i < maximum){
/** @type {Object.<string, string|number|boolean|Array.<string|number|boolean>>} */
const subdata = ot.comp.get_form_data(item);
if(data[subdata.username] && data[subdata.username] == subdata.password){
session.user = subdata.username;
session.ok = true;
}else
session.i ++;
ot.cookies.set("ot", Utils.encrypt_data(session));
};
if(session.ok)
Utils.execute(callback);
else{
/** @type {HTMLUListElement} */
const errors_box = document.querySelector(".form-errors");
errors_box.innerHTML = ``;
Utils.html(errors_box, ot.comp.i18n("login_error", "li"));
};
return false;
}));
};
/**
* @returns {boolean}
* @access public
*/
this.is_ok = () => !!session.ok;
constructor();
};
/** @type {string} */
UserView.DATA = "rqRBrhEHg0/t/VTQvcDpXjoE/0A0SZa8rX/t/Z+qFg/AkOh0BMRTGPa8Smu0x0RqSP2Q1JCqGj/AkOh0Lvzz";
return UserView;
})();