mirror of https://github.com/hrfee/jfa-go
For #103. Enable in Settings > Password Resets. Also changes the user's ombi password.mautrix
parent
0014db44f0
commit
0a71d5b216
@ -0,0 +1,23 @@
|
||||
import { toClipboard, notificationBox } from "./modules/common.js";
|
||||
|
||||
const pin = document.getElementById("pin") as HTMLSpanElement;
|
||||
|
||||
if (pin) {
|
||||
// Load this individual string into the DOM, so we don't have to load the whole language file.
|
||||
const copy = document.getElementById("copy-notification");
|
||||
const copyString = copy.textContent;
|
||||
copy.remove();
|
||||
|
||||
window.notifications = new notificationBox(document.getElementById("notification-box") as HTMLDivElement, 5);
|
||||
|
||||
pin.onclick = () => {
|
||||
toClipboard(pin.textContent);
|
||||
window.notifications.customPositive("copied", "", copyString);
|
||||
pin.classList.add("~positive");
|
||||
pin.classList.remove("~urge");
|
||||
setTimeout(() => {
|
||||
pin.classList.add("~urge");
|
||||
pin.classList.remove("~positive");
|
||||
}, 5000);
|
||||
};
|
||||
}
|
@ -1,24 +1,80 @@
|
||||
import { toClipboard, notificationBox } from "./modules/common.js";
|
||||
import { Modal } from "./modules/modal.js";
|
||||
import { initValidator } from "./modules/validator.js";
|
||||
import { _post, addLoader, removeLoader } from "./modules/common.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;
|
||||
}
|
||||
|
||||
const pin = document.getElementById("pin") as HTMLSpanElement;
|
||||
declare var window: formWindow;
|
||||
|
||||
if (pin) {
|
||||
// Load this individual string into the DOM, so we don't have to load the whole language file.
|
||||
const copy = document.getElementById("copy-notification");
|
||||
const copyString = copy.textContent;
|
||||
copy.remove();
|
||||
const form = document.getElementById("form-create") as HTMLFormElement;
|
||||
const submitButton = 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.notifications = new notificationBox(document.getElementById("notification-box") as HTMLDivElement, 5);
|
||||
window.successModal = new Modal(document.getElementById("modal-success"), true);
|
||||
|
||||
pin.onclick = () => {
|
||||
toClipboard(pin.textContent);
|
||||
window.notifications.customPositive("copied", "", copyString);
|
||||
pin.classList.add("~positive");
|
||||
pin.classList.remove("~urge");
|
||||
setTimeout(() => {
|
||||
pin.classList.add("~urge");
|
||||
pin.classList.remove("~positive");
|
||||
}, 5000);
|
||||
};
|
||||
var requirements = initValidator(passwordField, rePasswordField, submitButton, submitSpan)
|
||||
|
||||
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);
|
||||
};
|
||||
|
Loading…
Reference in new issue