Use Promise.all in TOTPView.
This commit is contained in:
parent
234f735870
commit
36ee4708e6
|
@ -1,6 +1,7 @@
|
||||||
import { CopyableInputBox } from "../../elements/CopyableInputBox.js";
|
import { CopyableInputBox } from "../../elements/CopyableInputBox.js";
|
||||||
import { DoesNotExistError } from "../../types/internalErrors.js";
|
import { DoesNotExistError } from "../../types/internalErrors.js";
|
||||||
import { Page } from "../../types/Page.js";
|
import { Page } from "../../types/Page.js";
|
||||||
|
import { objectToMap } from "../../utils.js";
|
||||||
import { changePage, setErrorText, setPageContent, setTitleElement } from "../../pageUtils.js";
|
import { changePage, setErrorText, setPageContent, setTitleElement } from "../../pageUtils.js";
|
||||||
import { getTOTPCode } from "../../api/getTOTPCode";
|
import { getTOTPCode } from "../../api/getTOTPCode";
|
||||||
import { getTOTPKeys } from "../../api/getTOTPKeys";
|
import { getTOTPKeys } from "../../api/getTOTPKeys";
|
||||||
|
@ -11,9 +12,10 @@ import i18next from 'i18next';
|
||||||
export class TOTPViewPage extends Page {
|
export class TOTPViewPage extends Page {
|
||||||
constructor() {
|
constructor() {
|
||||||
super();
|
super();
|
||||||
this.refreshers = [];
|
this.refresher = undefined;
|
||||||
|
this.totpListElements = {};
|
||||||
}
|
}
|
||||||
render() {
|
async render() {
|
||||||
setTitleElement(pageState);
|
setTitleElement(pageState);
|
||||||
let totpList = makeElement({ tag: "div" });
|
let totpList = makeElement({ tag: "div" });
|
||||||
setPageContent(makeElement({
|
setPageContent(makeElement({
|
||||||
|
@ -37,14 +39,11 @@ export class TOTPViewPage extends Page {
|
||||||
|
|
||||||
|
|
||||||
getTOTPKeys(pageState.currentBaseMount, pageState.currentSecretPath).then(res => {
|
getTOTPKeys(pageState.currentBaseMount, pageState.currentSecretPath).then(res => {
|
||||||
res.forEach(function (totpKeyName) {
|
res.forEach(async function (totpKeyName) {
|
||||||
let totpListElement = this.makeTOTPListElement(totpKeyName);
|
let totpListElement = this.makeTOTPListElement(totpKeyName);
|
||||||
totpList.appendChild(totpListElement);
|
totpList.appendChild(totpListElement);
|
||||||
let totpRefresher = async function (totpKeyName, totpListElement) {
|
this.totpListElements[totpKeyName] = totpListElement;
|
||||||
totpListElement.setCode(await getTOTPCode(pageState.currentBaseMount, totpKeyName));
|
await this.updateTOTPElement(totpKeyName, totpListElement);
|
||||||
};
|
|
||||||
totpRefresher(totpKeyName, totpListElement);
|
|
||||||
this.refreshers.push(setInterval(totpRefresher, 3000, totpKeyName, totpListElement));
|
|
||||||
}, this);
|
}, this);
|
||||||
document.getElementById("loadingText").remove();
|
document.getElementById("loadingText").remove();
|
||||||
}).catch(e => {
|
}).catch(e => {
|
||||||
|
@ -56,10 +55,22 @@ export class TOTPViewPage extends Page {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
let totpRefresher = async () => {
|
||||||
|
await Promise.all(Array.from(objectToMap(this.totpListElements)).map((kv) => {
|
||||||
|
return this.updateTOTPElement(...kv);
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
await totpRefresher();
|
||||||
|
this.refresher = setInterval(totpRefresher, 3000);
|
||||||
}
|
}
|
||||||
|
|
||||||
cleanup() {
|
cleanup() {
|
||||||
this.refreshers.forEach(refresher => clearInterval(refresher));
|
clearInterval(this.refresher);
|
||||||
|
this.totpListElements = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
async updateTOTPElement(totpKeyName, totpListElement) {
|
||||||
|
totpListElement.setCode(await getTOTPCode(pageState.currentBaseMount, totpKeyName));
|
||||||
}
|
}
|
||||||
|
|
||||||
makeTOTPListElement(totpKeyName) {
|
makeTOTPListElement(totpKeyName) {
|
||||||
|
|
|
@ -3,6 +3,7 @@ export function removeDoubleSlash(str) {
|
||||||
}
|
}
|
||||||
|
|
||||||
export const getObjectKeys = (obj) => Object.getOwnPropertyNames(obj);
|
export const getObjectKeys = (obj) => Object.getOwnPropertyNames(obj);
|
||||||
|
export const objectToMap = (obj) => new Map(Object.entries(obj));
|
||||||
|
|
||||||
export function getKeyByObjectPropertyValue(map, searchValue) {
|
export function getKeyByObjectPropertyValue(map, searchValue) {
|
||||||
for (let key of getObjectKeys(map)) {
|
for (let key of getObjectKeys(map)) {
|
||||||
|
|
Loading…
Reference in a new issue