diff --git a/src/webpage/audio/page.ts b/src/webpage/audio/page.ts index 2f1945d..a118a4d 100644 --- a/src/webpage/audio/page.ts +++ b/src/webpage/audio/page.ts @@ -1,5 +1,5 @@ import {BinWrite} from "../utils/binaryUtils.js"; -import {setTheme} from "../utils/utils.js"; +import {saveFile, setTheme} from "../utils/utils.js"; import {Play} from "./play.js"; if (window.location.pathname.startsWith("/audio")) { await setTheme(); @@ -179,14 +179,7 @@ if(zip){ const download = document.getElementById("download"); if (download) { download.onclick = () => { - const blob = new Blob([buff], {type: "binary"}); - const downloadUrl = URL.createObjectURL(blob); - const a = document.createElement("a"); - a.href = downloadUrl; - a.download = "sounds.jasf"; - document.body.appendChild(a); - a.click(); - URL.revokeObjectURL(downloadUrl); + saveFile(buff, "sounds.jasf"); }; } } diff --git a/src/webpage/mainSettings.ts b/src/webpage/mainSettings.ts index 0bfeee3..4a2e41e 100644 --- a/src/webpage/mainSettings.ts +++ b/src/webpage/mainSettings.ts @@ -15,7 +15,7 @@ import { setPreferences, ThemeOption, } from "./utils/storage/userPreferences"; -import {createImg, getapiurls, installPGet, setTheme, SW} from "./utils/utils"; +import {createImg, getapiurls, installPGet, saveFile, setTheme, SW} from "./utils/utils"; export async function showusersettings(localuser: Localuser) { const prefs = getPreferences(); @@ -840,8 +840,14 @@ export async function showusersettings(localuser: Localuser) { break; } } else { - gen2FA(); + const codes = _.backup_codes as { + user_id: string; + code: string; + consumed: boolean; + }[]; + saveFile(new TextEncoder().encode(JSON.stringify(codes)).buffer, "codes.backup"); localuser.mfa_enabled = true; + gen2FA(); twofa.returnFromSub(); } }, diff --git a/src/webpage/utils/utils.ts b/src/webpage/utils/utils.ts index 2e4cc18..5d116cd 100644 --- a/src/webpage/utils/utils.ts +++ b/src/webpage/utils/utils.ts @@ -1012,3 +1012,13 @@ export function getInstances() { export function getStringURLMapPair() { return [stringURLMap, stringURLsMap] as const; } +export async function saveFile(buff: ArrayBuffer, name: string) { + const blob = new Blob([buff], {type: "binary"}); + const downloadUrl = URL.createObjectURL(blob); + const a = document.createElement("a"); + a.href = downloadUrl; + a.download = name; + document.body.appendChild(a); + a.click(); + URL.revokeObjectURL(downloadUrl); +}