/* This file is part of GNU Taler (C) 2021-2023 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 { ComponentChildren, h, VNode } from "preact"; import { useCallback, useEffect, useState } from "preact/hooks"; import { useBackendContext } from "../../context/backend.js"; import { useInstanceContext } from "../../context/instance.js"; import { AccessToken, LoginToken } from "../../declaration.js"; import { useCredentialsChecker } from "../../hooks/backend.js"; interface Props { onConfirm: (token: LoginToken | undefined) => void; } function normalizeToken(r: string): AccessToken { return `secret-token:${r}` as AccessToken; } export function LoginPage({ onConfirm }: Props): VNode { const { url: backendURL } = useBackendContext(); const { admin, id } = useInstanceContext(); const { requestNewLoginToken } = useCredentialsChecker(); const [token, setToken] = useState(""); const { i18n } = useTranslationContext(); const doLogin = useCallback(async function doLoginImpl() { const secretToken = normalizeToken(token); const baseUrl = id === undefined ? backendURL : `${backendURL}/instances/${id}` const result = await requestNewLoginToken(baseUrl, secretToken); if (result.valid) { const { token, expiration } = result onConfirm({ token, expiration }); } else { onConfirm(undefined); } }, [id, token]) if (admin && id !== "default") { //admin trying to access another instance return (
) } return (
); } function AsyncButton({ onClick, disabled, type = "", children }: { type?: string, disabled?: boolean, onClick: () => Promise, children: ComponentChildren }): VNode { const [running, setRunning] = useState(false) return }