aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian <sebasjm@gmail.com>2023-03-15 09:54:31 -0300
committerSebastian <sebasjm@gmail.com>2023-03-15 09:54:31 -0300
commitae4d4647e988a6eb8e9fd87af3385371ba56ab43 (patch)
treef9a3dccebc4d809790819f6ab396297113c7d312
parent0bf92a44df14f1946df2b1cd58a6b0b92b5befa2 (diff)
downloadwallet-core-ae4d4647e988a6eb8e9fd87af3385371ba56ab43.tar.xz
better error handling
-rw-r--r--packages/merchant-backoffice-ui/src/components/exception/login.tsx4
-rw-r--r--packages/merchant-backoffice-ui/src/hooks/backend.ts17
2 files changed, 15 insertions, 6 deletions
diff --git a/packages/merchant-backoffice-ui/src/components/exception/login.tsx b/packages/merchant-backoffice-ui/src/components/exception/login.tsx
index 435ff1d6a..52b5b2a24 100644
--- a/packages/merchant-backoffice-ui/src/components/exception/login.tsx
+++ b/packages/merchant-backoffice-ui/src/components/exception/login.tsx
@@ -141,8 +141,8 @@ export function LoginModal({ onConfirm, withMessage }: Props): VNode {
class="button is-info"
onClick={async () => {
const secretToken = normalizeToken(token);
- const isOk = await testLogin(url, secretToken);
- if (isOk) {
+ const { valid, cause } = await testLogin(url, secretToken);
+ if (valid) {
onConfirm(url, secretToken);
} else {
onConfirm(url);
diff --git a/packages/merchant-backoffice-ui/src/hooks/backend.ts b/packages/merchant-backoffice-ui/src/hooks/backend.ts
index 93e95934e..3ab99b402 100644
--- a/packages/merchant-backoffice-ui/src/hooks/backend.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/backend.ts
@@ -25,8 +25,10 @@ import { useBackendContext } from "../context/backend.js";
import { useCallback, useEffect, useState } from "preact/hooks";
import { useInstanceContext } from "../context/instance.js";
import {
+ ErrorType,
HttpResponse,
HttpResponseOk,
+ RequestError,
RequestOptions,
} from "@gnu-taler/web-util/lib/index.browser";
import { useApiContext } from "@gnu-taler/web-util/lib/index.browser";
@@ -146,14 +148,21 @@ export function useCredentialsChecker() {
return async function testLogin(
instance: string,
token: string,
- ): Promise<boolean> {
+ ): Promise<{
+ valid: boolean;
+ cause?: ErrorType;
+ }> {
try {
const response = await request(instance, `/private/`, {
token,
});
- return true;
- } catch (e) {
- return false;
+ return { valid: true };
+ } catch (error) {
+ if (error instanceof RequestError) {
+ return { valid: false, cause: error.cause.type };
+ }
+
+ return { valid: false, cause: ErrorType.UNEXPECTED };
}
};
}