UNPKG

keycloakify

Version:

Framework to create custom Keycloak UIs

139 lines (123 loc) 6.62 kB
import { useEffect } from "react"; import { useInsertScriptTags } from "../../tools/useInsertScriptTags"; import { waitForElementMountedOnDom } from "../../tools/waitForElementMountedOnDom"; export function useScript(params) { const { olRecoveryCodesListId, i18n } = params; const { msgStr, isFetchingTranslations } = i18n; const { insertScriptTags } = useInsertScriptTags({ componentOrHookName: "LoginRecoveryAuthnCodeConfig", scriptTags: [ { type: "text/javascript", textContent: () => ` /* copy recovery codes */ function copyRecoveryCodes() { var tmpTextarea = document.createElement("textarea"); var codes = document.querySelectorAll("#${olRecoveryCodesListId} li"); for (i = 0; i < codes.length; i++) { tmpTextarea.value = tmpTextarea.value + codes[i].innerText + "\\n"; } document.body.appendChild(tmpTextarea); tmpTextarea.select(); document.execCommand("copy"); document.body.removeChild(tmpTextarea); } var copyButton = document.getElementById("copyRecoveryCodes"); copyButton && copyButton.addEventListener("click", function () { copyRecoveryCodes(); }); /* download recovery codes */ function formatCurrentDateTime() { var dt = new Date(); var options = { month: 'long', day: 'numeric', year: 'numeric', hour: 'numeric', minute: 'numeric', timeZoneName: 'short' }; return dt.toLocaleString('en-US', options); } function parseRecoveryCodeList() { var recoveryCodes = document.querySelectorAll("#${olRecoveryCodesListId} li"); var recoveryCodeList = ""; for (var i = 0; i < recoveryCodes.length; i++) { var recoveryCodeLiElement = recoveryCodes[i].innerText; recoveryCodeList += recoveryCodeLiElement + "\\r\\n"; } return recoveryCodeList; } function buildDownloadContent() { var recoveryCodeList = parseRecoveryCodeList(); var dt = new Date(); var options = { month: 'long', day: 'numeric', year: 'numeric', hour: 'numeric', minute: 'numeric', timeZoneName: 'short' }; return fileBodyContent = ${JSON.stringify(msgStr("recovery-codes-download-file-header"))} + "\\n\\n" + recoveryCodeList + "\\n" + ${JSON.stringify(msgStr("recovery-codes-download-file-description"))} + "\\n\\n" + ${JSON.stringify(msgStr("recovery-codes-download-file-date"))} + " " + formatCurrentDateTime(); } function setUpDownloadLinkAndDownload(filename, text) { var el = document.createElement('a'); el.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text)); el.setAttribute('download', filename); el.style.display = 'none'; document.body.appendChild(el); el.click(); document.body.removeChild(el); } function downloadRecoveryCodes() { setUpDownloadLinkAndDownload('kc-download-recovery-codes.txt', buildDownloadContent()); } var downloadButton = document.getElementById("downloadRecoveryCodes"); downloadButton && downloadButton.addEventListener("click", downloadRecoveryCodes); /* print recovery codes */ function buildPrintContent() { var recoveryCodeListHTML = document.getElementById('${olRecoveryCodesListId}').innerHTML; var styles = \`@page { size: auto; margin-top: 0; } body { width: 480px; } div { list-style-type: none; font-family: monospace } p:first-of-type { margin-top: 48px }\`; return printFileContent = "<html><style>" + styles + "</style><body>" + "<title>kc-download-recovery-codes</title>" + "<p>" + ${JSON.stringify(msgStr("recovery-codes-download-file-header"))} + "</p>" + "<div>" + recoveryCodeListHTML + "</div>" + "<p>" + ${JSON.stringify(msgStr("recovery-codes-download-file-description"))} + "</p>" + "<p>" + ${JSON.stringify(msgStr("recovery-codes-download-file-date"))} + " " + formatCurrentDateTime() + "</p>" + "</body></html>"; } function printRecoveryCodes() { var w = window.open(); w.document.write(buildPrintContent()); w.print(); w.close(); } var printButton = document.getElementById("printRecoveryCodes"); printButton && printButton.addEventListener("click", printRecoveryCodes); ` } ] }); useEffect(() => { if (isFetchingTranslations) { return; } (async () => { await waitForElementMountedOnDom({ elementId: olRecoveryCodesListId }); insertScriptTags(); })(); }, [isFetchingTranslations]); } //# sourceMappingURL=LoginRecoveryAuthnCodeConfig.useScript.js.map