import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@components/UI/Dialog.tsx"; import { Button } from "@components/UI/Button"; import { DownloadIcon, PrinterIcon } from "lucide-react"; import React from "react"; import { useDevice } from "@app/core/stores/deviceStore"; import { fromByteArray } from "base64-js"; export interface PkiBackupDialogProps { open: boolean; onOpenChange: (open: boolean) => void; } export const PkiBackupDialog = ({ open, onOpenChange, }: PkiBackupDialogProps) => { const { config, setDialogOpen } = useDevice(); const privateKeyData = config.security?.privateKey // If the private data doesn't exist return null if (!privateKeyData) { return null } const getPrivateKey = React.useMemo(() => fromByteArray(config.security?.privateKey ?? new Uint8Array(0)), [config.security?.privateKey]); const closeDialog = React.useCallback(() => { setDialogOpen("pkiBackup", false) }, [setDialogOpen]) const renderPrintWindow = React.useCallback(() => { const printWindow = window.open("", "_blank"); if (printWindow) { printWindow.document.write(` Your Private Key

Your Private Key

${getPrivateKey}

`); printWindow.document.close(); printWindow.print(); closeDialog() } }, [getPrivateKey, closeDialog]); const createDownloadKeyFile = React.useCallback(() => { const blob = new Blob([getPrivateKey], { type: "text/plain" }); const url = URL.createObjectURL(blob); const link = document.createElement("a"); link.href = url; link.download = "meshtastic_private_key.txt"; link.style.display = "none"; document.body.appendChild(link); link.click(); document.body.removeChild(link); closeDialog() URL.revokeObjectURL(url); }, [getPrivateKey, closeDialog]); return ( Backup Key Its important to backup your private key and store your backup securely! If you lose your private key, you will need to reset your device. ); };