/* This file is part of GNU Taler (C) 2021-2024 Taler Systems S.A. GNU Taler is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Taler; see the file COPYING. If not, see */ /** * * @author Sebastian Javier Marchano (sebasjm) */ import { useTranslationContext } from "@gnu-taler/web-util/browser"; import { Fragment, h, VNode } from "preact"; import { useState } from "preact/hooks"; import { AsyncButton } from "../../../components/exception/AsyncButton.js"; import { FormProvider } from "../../../components/form/FormProvider.js"; import { Input } from "../../../components/form/Input.js"; import { NotificationCard } from "../../../components/menu/index.js"; import { useSessionContext } from "../../../context/session.js"; import { AccessToken } from "@gnu-taler/taler-util"; interface Props { hasToken: boolean | undefined; onClearToken: (c: AccessToken | undefined) => void; onNewToken: (c: AccessToken | undefined, s: AccessToken) => void; onBack?: () => void; } export function DetailPage({ hasToken, onBack, onNewToken, onClearToken, }: Props): VNode { type State = { old_token: string; new_token: string; repeat_token: string }; const [form, setValue] = useState>({ old_token: "", new_token: "", repeat_token: "", }); const { i18n } = useTranslationContext(); const errors = { old_token: hasToken && !form.old_token ? i18n.str`you need your access token to perform the operation` : undefined, new_token: !form.new_token ? i18n.str`cannot be empty` : form.new_token === form.old_token ? i18n.str`cannot be the same as the old token` : undefined, repeat_token: form.new_token !== form.repeat_token ? i18n.str`is not the same` : undefined, }; const hasErrors = Object.keys(errors).some( (k) => (errors as any)[k] !== undefined, ); const { state } = useSessionContext(); const text = i18n.str`You are updating the access token from instance with id "${state.instance}"`; async function submitForm() { if (hasErrors) return; const oldToken = hasToken ? (form.old_token as AccessToken) : undefined; const newToken = form.new_token as AccessToken; onNewToken(oldToken, newToken); } return (
{text}

{!hasToken && ( )}
{hasToken && ( name="old_token" label={i18n.str`Current access token`} tooltip={i18n.str`access token currently in use`} inputType="password" />

Clearing the access token will mean public access to the instance.

)} name="new_token" label={i18n.str`New access token`} tooltip={i18n.str`next access token to be used`} inputType="password" /> name="repeat_token" label={i18n.str`Repeat access token`} tooltip={i18n.str`confirm the same access token`} inputType="password" />
{onBack && ( )} Confirm change
); }