commit 13facb53b38a9434e217288e11a4f3a41a7e587c
parent fb5a6ea285bd03d05e4a99083d940452911ec6e7
Author: Sebastian <sebasjm@gmail.com>
Date: Wed, 5 Nov 2025 12:06:43 -0300
fix #10543
Diffstat:
4 files changed, 33 insertions(+), 15 deletions(-)
diff --git a/packages/bank-ui/src/pages/LoginForm.tsx b/packages/bank-ui/src/pages/LoginForm.tsx
@@ -23,6 +23,7 @@ import {
createRFC8959AccessTokenEncoded,
} from "@gnu-taler/taler-util";
import {
+ Attention,
ButtonBetter,
LocalNotificationBanner,
RouteDefinition,
@@ -154,16 +155,20 @@ export function LoginForm({
/>
);
}
-
+ const onlyThisUser = fixedUser || session.state.status !== "loggedOut";
return (
<div class="flex min-h-full flex-col justify-center ">
<LocalNotificationBanner notification={notification} />
- <div class="mt-10 sm:mx-auto sm:w-full sm:max-w-sm">
+ <div class="sm:mx-auto sm:w-full sm:max-w-sm">
+ {session.state.status !== "expired" ? undefined : (
+ <Attention title={i18n.str`Session expired`} type="warning" />
+ )}
<form
- class="space-y-6"
+ class="mt-10 space-y-6"
noValidate
onSubmit={(e) => {
e.preventDefault();
+ e.stopPropagation();
}}
autoCapitalize="none"
autoCorrect="off"
@@ -177,13 +182,13 @@ export function LoginForm({
</label>
<div class="mt-2">
<input
- ref={doAutoFocus}
+ ref={onlyThisUser ? undefined : doAutoFocus}
type="text"
name="username"
id="username"
class="block w-full disabled:bg-gray-200 rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6"
value={username ?? ""}
- disabled={fixedUser}
+ disabled={onlyThisUser}
enterkeyhint="next"
placeholder="identification"
autocomplete="username"
@@ -215,6 +220,7 @@ export function LoginForm({
name="password"
id="password"
autocomplete="current-password"
+ ref={!onlyThisUser ? undefined : doAutoFocus}
class="block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6"
enterkeyhint="send"
value={password ?? ""}
@@ -235,12 +241,12 @@ export function LoginForm({
{session.state.status !== "loggedOut" ? (
<div class="flex justify-between">
<ButtonBetter
- type="submit"
+ type="button"
name="cancel"
class="rounded-md bg-white-600 px-3 py-1.5 text-sm font-semibold leading-6 text-black shadow-sm hover:bg-gray-100 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gray-600"
onClick={logout}
>
- <i18n.Translate>Cancel</i18n.Translate>
+ <i18n.Translate>Forget</i18n.Translate>
</ButtonBetter>
<ButtonBetter
@@ -249,7 +255,7 @@ export function LoginForm({
class="rounded-md bg-indigo-600 disabled:bg-gray-300 px-3 py-1.5 text-sm font-semibold leading-6 text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600"
onClick={login}
>
- <i18n.Translate>Check</i18n.Translate>
+ <i18n.Translate>Verify</i18n.Translate>
</ButtonBetter>
</div>
) : (
diff --git a/packages/bank-ui/src/pages/WithdrawalConfirmationQuestion.tsx b/packages/bank-ui/src/pages/WithdrawalConfirmationQuestion.tsx
@@ -31,7 +31,7 @@ import {
useBankCoreApiContext,
useChallengeHandler,
useLocalNotificationBetter,
- useTranslationContext
+ useTranslationContext,
} from "@gnu-taler/web-util/browser";
import { ComponentChildren, Fragment, VNode, h } from "preact";
import { mutate } from "swr";
@@ -86,7 +86,7 @@ function useComponentState(opid: string) {
});
const abort = safeFunctionHandler(
- api.abortWithdrawalById,
+ api.abortWithdrawalById.bind(api),
!creds ? undefined : [creds, opid],
);
@@ -172,7 +172,7 @@ export function WithdrawalConfirmationQuestion({
</h3>
<div class="mt-3 text-sm leading-6">
<ShouldBeSameUser username={details.username}>
- <div class="grid grid-cols-1 gap-x-8 gap-y-8 pt-10 md:grid-cols-2 bg-gray-100 my-4 px-4 pb-4 rounded-lg">
+ <div class="grid grid-cols-1 gap-x-8 gap-y-8 pt-4 md:grid-cols-2 bg-gray-100 my-4 px-4 pb-4 rounded-lg">
<form
class="bg-white shadow-sm ring-1 ring-gray-900/5 sm:rounded-xl md:col-span-2"
autoCapitalize="none"
@@ -416,18 +416,30 @@ export function ShouldBeSameUser({
if (credentials.status === "loggedOut") {
return (
<Fragment>
- <Attention type="info" title={i18n.str`Authentication required`} />
+ <Attention type="info" title={i18n.str`Authentication required`} ></Attention>
<LoginForm currentUser={username} fixedUser />
</Fragment>
);
}
+ if (credentials.status === "expired") {
+ return (
+ <LoginForm currentUser={username} fixedUser />
+ );
+ }
if (credentials.username !== username) {
return (
<Fragment>
<Attention
type="warning"
title={i18n.str`This operation was created with another username`}
- />
+ >
+ <p>
+ <i18n.Translate>
+ You are currently logged in with user "{credentials.username}" and
+ the operation was made with user "{username}"
+ </i18n.Translate>
+ </p>
+ </Attention>
<LoginForm currentUser={username} fixedUser />
</Fragment>
);
diff --git a/packages/bank-ui/src/pages/admin/CreateNewAccount.tsx b/packages/bank-ui/src/pages/admin/CreateNewAccount.tsx
@@ -60,7 +60,7 @@ export function CreateNewAccount({
const [notification, safeFunctionHandler] = useLocalNotificationBetter();
const create = safeFunctionHandler(
- api.createAccount,
+ api.createAccount.bind(api),
!submitAccount || !token ? undefined : [token, submitAccount],
);
create.onSuccess = (success, token, account) => {
diff --git a/packages/bank-ui/src/pages/regional/ConversionConfig.tsx b/packages/bank-ui/src/pages/regional/ConversionConfig.tsx
@@ -227,7 +227,7 @@ function useComponentState({
const cashoutCalc = calculationResult?.cashout;
const update = safeFunctionHandler(
- conversion.updateConversionRate,
+ conversion.updateConversionRate.bind(conversion),
!creds || status.status === "fail"
? undefined
: [creds.token, status.result.conv],