import { encodeCrock, stringToBytes } from "@gnu-taler/taler-util"; import { h, VNode } from "preact"; import { useState } from "preact/hooks"; import { useAnastasisContext } from "../../context/anastasis"; import { AnastasisClientFrame } from "./index"; import { TextInput } from "../../components/fields/TextInput"; import { FileInput, FileTypeContent } from "../../components/fields/FileInput"; export function SecretEditorScreen(): VNode { const reducer = useAnastasisContext(); const [secretValue, setSecretValue] = useState(""); const [secretFile, _setSecretFile] = useState( undefined, ); function setSecretFile(v: FileTypeContent | undefined): void { setSecretValue(""); // reset secret value when uploading a file _setSecretFile(v); } const currentSecretName = reducer?.currentReducerState && "secret_name" in reducer.currentReducerState && reducer.currentReducerState.secret_name; const [secretName, setSecretName] = useState(currentSecretName || ""); if (!reducer) { return
no reducer in context
; } if ( !reducer.currentReducerState || reducer.currentReducerState.backup_state === undefined ) { return
invalid state
; } const secretNext = async (): Promise => { const secret = secretFile ? { value: encodeCrock(stringToBytes(secretValue)), filename: secretFile.name, mime: secretFile.type, } : { value: encodeCrock(stringToBytes(secretValue)), mime: "text/plain", }; return reducer.runTransaction(async (tx) => { await tx.transition("enter_secret_name", { name: secretName, }); await tx.transition("enter_secret", { secret, expiration: { t_s: new Date().getTime() + 60 * 60 * 24 * 365 * 5, }, }); await tx.transition("next", {}); }); }; const errors = !secretName ? "Add a secret name" : !secretValue && !secretFile ? "Add a secret value or a choose a file to upload" : undefined; function goNextIfNoErrors(): void { if (!errors) secretNext(); } return ( secretNext()} >
Names should be unique, so that you can easily identify your secret later.
Or upload a secret file {secretFile && (
Uploading secret file {secretFile.name}{" "} setSecretFile(undefined)}>cancel
)}
); }