|
|
|
import { Modal } from "./modules/modal.js";
|
|
|
|
import { Validator, ValidatorConf } from "./modules/validator.js";
|
|
|
|
import { _post, addLoader, removeLoader } from "./modules/common.js";
|
|
|
|
import { loadLangSelector } from "./modules/lang.js";
|
|
|
|
|
|
|
|
interface formWindow extends Window {
|
|
|
|
invalidPassword: string;
|
|
|
|
successModal: Modal;
|
|
|
|
telegramModal: Modal;
|
|
|
|
discordModal: Modal;
|
|
|
|
matrixModal: Modal;
|
|
|
|
confirmationModal: Modal
|
|
|
|
code: string;
|
|
|
|
messages: { [key: string]: string };
|
|
|
|
confirmation: boolean;
|
|
|
|
telegramRequired: boolean;
|
|
|
|
telegramPIN: string;
|
|
|
|
discordRequired: boolean;
|
|
|
|
discordPIN: string;
|
|
|
|
discordStartCommand: string;
|
|
|
|
discordInviteLink: boolean;
|
|
|
|
discordServerName: string;
|
|
|
|
matrixRequired: boolean;
|
|
|
|
matrixUserID: string;
|
|
|
|
userExpiryEnabled: boolean;
|
|
|
|
userExpiryMonths: number;
|
|
|
|
userExpiryDays: number;
|
|
|
|
userExpiryHours: number;
|
|
|
|
userExpiryMinutes: number;
|
|
|
|
userExpiryMessage: string;
|
|
|
|
captcha: boolean;
|
|
|
|
reCAPTCHA: boolean;
|
|
|
|
reCAPTCHASiteKey: string;
|
|
|
|
}
|
|
|
|
|
|
|
|
loadLangSelector("pwr");
|
|
|
|
|
|
|
|
declare var window: formWindow;
|
|
|
|
|
|
|
|
const form = document.getElementById("form-create") as HTMLFormElement;
|
|
|
|
const submitInput = form.querySelector("input[type=submit]") as HTMLInputElement;
|
|
|
|
const submitSpan = form.querySelector("span.submit") as HTMLSpanElement;
|
|
|
|
const passwordField = document.getElementById("create-password") as HTMLInputElement;
|
|
|
|
const rePasswordField = document.getElementById("create-reenter-password") as HTMLInputElement;
|
|
|
|
|
|
|
|
window.successModal = new Modal(document.getElementById("modal-success"), true);
|
|
|
|
|
|
|
|
let validatorConf: ValidatorConf = {
|
|
|
|
passwordField: passwordField,
|
|
|
|
rePasswordField: rePasswordField,
|
|
|
|
submitInput: submitInput,
|
|
|
|
submitButton: submitSpan
|
|
|
|
};
|
|
|
|
|
|
|
|
var validator = new Validator(validatorConf);
|
|
|
|
var requirements = validator.requirements;
|
|
|
|
|
|
|
|
interface sendDTO {
|
|
|
|
pin: string;
|
|
|
|
password: string;
|
|
|
|
}
|
|
|
|
|
|
|
|
form.onsubmit = (event: Event) => {
|
|
|
|
event.preventDefault();
|
|
|
|
addLoader(submitSpan);
|
|
|
|
const params = new URLSearchParams(window.location.search);
|
|
|
|
let send: sendDTO = {
|
|
|
|
pin: params.get("pin"),
|
|
|
|
password: passwordField.value
|
|
|
|
};
|
|
|
|
_post("/reset", send, (req: XMLHttpRequest) => {
|
|
|
|
if (req.readyState == 4) {
|
|
|
|
removeLoader(submitSpan);
|
|
|
|
if (req.status == 400) {
|
|
|
|
for (let type in req.response) {
|
|
|
|
if (requirements[type]) { requirements[type].valid = req.response[type] as boolean; }
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
} else if (req.status != 200) {
|
|
|
|
const old = submitSpan.textContent;
|
|
|
|
submitSpan.textContent = window.messages["errorUnknown"];
|
|
|
|
submitSpan.classList.add("~critical");
|
|
|
|
submitSpan.classList.remove("~urge");
|
|
|
|
setTimeout(() => {
|
|
|
|
submitSpan.classList.add("~urge");
|
|
|
|
submitSpan.classList.remove("~critical");
|
|
|
|
submitSpan.textContent = old;
|
|
|
|
}, 2000);
|
|
|
|
} else {
|
|
|
|
window.successModal.show();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}, true);
|
|
|
|
};
|
|
|
|
|
|
|
|
validator.validate();
|