gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-wallet-core] 01/03: check credetials on login


From: gnunet
Subject: [taler-wallet-core] 01/03: check credetials on login
Date: Wed, 15 Mar 2023 13:25:38 +0100

This is an automated email from the git hooks/post-receive script.

sebasjm pushed a commit to branch master
in repository wallet-core.

commit 41339c1db25306d8135084d24b1452a3ddd75dbb
Author: Sebastian <sebasjm@gmail.com>
AuthorDate: Wed Mar 15 07:21:26 2023 -0300

    check credetials on login
---
 .../src/components/exception/login.tsx             | 22 +++++++++++++++-------
 .../merchant-backoffice-ui/src/hooks/backend.ts    | 19 +++++++++++++++++++
 packages/merchant-backoffice-ui/src/hooks/index.ts |  3 ---
 3 files changed, 34 insertions(+), 10 deletions(-)

diff --git a/packages/merchant-backoffice-ui/src/components/exception/login.tsx 
b/packages/merchant-backoffice-ui/src/components/exception/login.tsx
index 9a0411642..435ff1d6a 100644
--- a/packages/merchant-backoffice-ui/src/components/exception/login.tsx
+++ b/packages/merchant-backoffice-ui/src/components/exception/login.tsx
@@ -24,6 +24,7 @@ import { h, VNode } from "preact";
 import { useState } from "preact/hooks";
 import { useBackendContext } from "../../context/backend.js";
 import { useInstanceContext } from "../../context/instance.js";
+import { useCredentialsChecker } from "../../hooks/backend.js";
 import { Notification } from "../../utils/types.js";
 
 interface Props {
@@ -31,15 +32,15 @@ interface Props {
   onConfirm: (backend: string, token?: string) => void;
 }
 
-function getTokenValuePart(t?: string): string | undefined {
+function getTokenValuePart(t: string): string {
   if (!t) return t;
   const match = /secret-token:(.*)/.exec(t);
-  if (!match || !match[1]) return undefined;
+  if (!match || !match[1]) return "";
   return match[1];
 }
 
-function normalizeToken(r: string | undefined): string | undefined {
-  return r ? `secret-token:${encodeURIComponent(r)}` : undefined;
+function normalizeToken(r: string): string {
+  return `secret-token:${encodeURIComponent(r)}`;
 }
 
 function cleanUp(s: string): string {
@@ -53,8 +54,9 @@ function cleanUp(s: string): string {
 export function LoginModal({ onConfirm, withMessage }: Props): VNode {
   const { url: backendUrl, token: baseToken } = useBackendContext();
   const { admin, token: instanceToken } = useInstanceContext();
+  const testLogin = useCredentialsChecker();
   const currentToken = getTokenValuePart(
-    !admin ? baseToken : instanceToken || "",
+    (!admin ? baseToken : instanceToken) ?? "",
   );
   const [token, setToken] = useState(currentToken);
 
@@ -137,8 +139,14 @@ export function LoginModal({ onConfirm, withMessage }: 
Props): VNode {
           >
             <button
               class="button is-info"
-              onClick={(): void => {
-                onConfirm(url, normalizeToken(token));
+              onClick={async () => {
+                const secretToken = normalizeToken(token);
+                const isOk = await testLogin(url, secretToken);
+                if (isOk) {
+                  onConfirm(url, secretToken);
+                } else {
+                  onConfirm(url);
+                }
               }}
             >
               <i18n.Translate>Confirm</i18n.Translate>
diff --git a/packages/merchant-backoffice-ui/src/hooks/backend.ts 
b/packages/merchant-backoffice-ui/src/hooks/backend.ts
index 6c4e5c176..93e95934e 100644
--- a/packages/merchant-backoffice-ui/src/hooks/backend.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/backend.ts
@@ -139,6 +139,25 @@ interface useBackendBaseRequestType {
 
 type YesOrNo = "yes" | "no";
 
+export function useCredentialsChecker() {
+  const { request } = useApiContext();
+  //check against instance details endpoint
+  //while merchant backend doesn't have a login endpoint
+  return async function testLogin(
+    instance: string,
+    token: string,
+  ): Promise<boolean> {
+    try {
+      const response = await request(instance, `/private/`, {
+        token,
+      });
+      return true;
+    } catch (e) {
+      return false;
+    }
+  };
+}
+
 /**
  *
  * @param root the request is intended to the base URL and no the instance URL
diff --git a/packages/merchant-backoffice-ui/src/hooks/index.ts 
b/packages/merchant-backoffice-ui/src/hooks/index.ts
index bb210c9ba..316620cf7 100644
--- a/packages/merchant-backoffice-ui/src/hooks/index.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/index.ts
@@ -59,7 +59,6 @@ export function useBackendDefaultToken(
 export function useBackendInstanceToken(
   id: string,
 ): [string | undefined, StateUpdater<string | undefined>] {
-  const [random, setRandom] = useState(0);
   const [token, setToken] = useLocalStorage(`backend-token-${id}`);
   const [defaultToken, defaultSetToken] = useBackendDefaultToken();
 
@@ -74,8 +73,6 @@ export function useBackendInstanceToken(
   ): void {
     setToken((p) => {
       const toStore = value instanceof Function ? value(p) : value;
-      // setToken(value)
-      setRandom(new Date().getTime());
       return toStore;
     });
   }

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]