/* This file is part of GNU Taler (C) 2022-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 */ import { HttpStatusCode, TalerError, assertUnreachable, } from "@gnu-taler/taler-util"; import { Attention, Loading, useTranslationContext, } from "@gnu-taler/web-util/browser"; import { ComponentChildren, Fragment, VNode, h } from "preact"; import { useChallengeSession } from "../hooks/challenge.js"; import { SessionId, useSessionState } from "../hooks/session.js"; interface Props { nonce: string; children: ComponentChildren; sessionId?: SessionId; onCompleted?: () => void; onChangeLeft?: () => void; onNoMoreChanges?: () => void; onNoInfo: () => void; } export function CheckChallengeIsUpToDate({ sessionId: sessionFromParam, nonce, children, onCompleted, onChangeLeft, onNoMoreChanges, onNoInfo, }: Props): VNode { const { state, updateStatus } = useSessionState(); const { i18n } = useTranslationContext(); const sessionId = sessionFromParam ? sessionFromParam : !state ? undefined : { clientId: state.clientId, redirectURL: state.redirectURL, state: state.state, }; const result = useChallengeSession(nonce, sessionId); console.log("asd"); if (!sessionId) { onNoInfo(); return ; } if (!result) { return ; } if (result instanceof TalerError) { return
{JSON.stringify(result, undefined, 2)}
; } if (result.type === "fail") { switch (result.case) { case HttpStatusCode.BadRequest: { return ( Could not start the challenge, check configuration. ); } case HttpStatusCode.NotFound: { return ( Nonce not found ); } case HttpStatusCode.NotAcceptable: { return ( Server has wrong template configuration ); } case HttpStatusCode.InternalServerError: { return ( Check logs ); } default: assertUnreachable(result); } } updateStatus(result.body); if (onCompleted && "redirectURL" in result.body) { onCompleted(); return ; } if (onNoMoreChanges && !result.body.changes_left) { onNoMoreChanges(); return ; } if (onChangeLeft && !result.body.changes_left) { onChangeLeft(); return ; } return {children}; }