gnunet-svn
[Top][All Lists]
Advanced

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

[taler-wallet-core] branch master updated: fix #7828


From: gnunet
Subject: [taler-wallet-core] branch master updated: fix #7828
Date: Tue, 02 May 2023 15:18:22 +0200

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

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

The following commit(s) were added to refs/heads/master by this push:
     new a957e61a9 fix #7828
a957e61a9 is described below

commit a957e61a9ca05c35e6f40697a343f8c815b6edea
Author: Sebastian <sebasjm@gmail.com>
AuthorDate: Tue May 2 09:56:44 2023 -0300

    fix #7828
---
 .../taler-wallet-webextension/src/platform/api.ts  |  8 ++-
 .../src/platform/chrome.ts                         | 17 ++----
 .../taler-wallet-webextension/src/platform/dev.ts  |  4 +-
 .../src/popup/TalerActionFound.tsx                 | 61 +++++++++++-----------
 .../src/wallet/AddNewActionView.tsx                | 26 +++++----
 .../src/wallet/Application.tsx                     |  4 +-
 .../src/wallet/QrReader.tsx                        | 26 ++++-----
 7 files changed, 72 insertions(+), 74 deletions(-)

diff --git a/packages/taler-wallet-webextension/src/platform/api.ts 
b/packages/taler-wallet-webextension/src/platform/api.ts
index f8fa0a848..f985cc4f8 100644
--- a/packages/taler-wallet-webextension/src/platform/api.ts
+++ b/packages/taler-wallet-webextension/src/platform/api.ts
@@ -14,7 +14,11 @@
  GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
-import { CoreApiResponse, NotificationType } from "@gnu-taler/taler-util";
+import {
+  CoreApiResponse,
+  NotificationType,
+  TalerUri,
+} from "@gnu-taler/taler-util";
 import {
   WalletConfig,
   WalletConfigParameter,
@@ -229,7 +233,7 @@ export interface ForegroundPlatformAPI {
    *
    * @param talerUri
    */
-  openWalletURIFromPopup(talerUri: string): void;
+  openWalletURIFromPopup(talerUri: TalerUri): void;
 
   /**
    * Popup API
diff --git a/packages/taler-wallet-webextension/src/platform/chrome.ts 
b/packages/taler-wallet-webextension/src/platform/chrome.ts
index 51cf2f64e..0f6b5fb0d 100644
--- a/packages/taler-wallet-webextension/src/platform/chrome.ts
+++ b/packages/taler-wallet-webextension/src/platform/chrome.ts
@@ -20,6 +20,8 @@ import {
   TalerUriAction,
   TalerError,
   parseTalerUri,
+  TalerUri,
+  stringifyTalerUri,
 } from "@gnu-taler/taler-util";
 import { WalletOperations } from "@gnu-taler/taler-wallet-core";
 import { BackgroundOperations } from "../wxApi.js";
@@ -247,17 +249,8 @@ function notifyWhenAppIsReady(): Promise<void> {
   });
 }
 
-function openWalletURIFromPopup(maybeTalerUri: string): void {
-  const talerUri = maybeTalerUri.startsWith("ext+")
-    ? maybeTalerUri.substring(4)
-    : maybeTalerUri;
-  const uri = parseTalerUri(talerUri);
-  if (!uri) {
-    logger.warn(
-      `Response with HTTP 402 the Taler header but could not classify 
${talerUri}`,
-    );
-    return;
-  }
+function openWalletURIFromPopup(uri: TalerUri): void {
+  const talerUri = stringifyTalerUri(uri);
   //FIXME: this should redirect to just one place
   // the target pathname should handle what happens if the endpoint is not 
there
   // like "trying to open from popup but this uri is not handled"
@@ -335,7 +328,7 @@ function openWalletURIFromPopup(maybeTalerUri: string): 
void {
     }
   }
 
-  chrome.tabs.create({ active: true, url }, () => {
+  chrome.tabs.update({ active: true, url }, () => {
     window.close();
   });
 }
diff --git a/packages/taler-wallet-webextension/src/platform/dev.ts 
b/packages/taler-wallet-webextension/src/platform/dev.ts
index 1a4183bec..1d43ad549 100644
--- a/packages/taler-wallet-webextension/src/platform/dev.ts
+++ b/packages/taler-wallet-webextension/src/platform/dev.ts
@@ -14,7 +14,7 @@
  GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
-import { CoreApiResponse } from "@gnu-taler/taler-util";
+import { CoreApiResponse, TalerUri } from "@gnu-taler/taler-util";
 import { WalletOperations } from "@gnu-taler/taler-wallet-core";
 import { BackgroundOperations } from "../wxApi.js";
 import {
@@ -73,7 +73,7 @@ const api: BackgroundPlatformAPI & ForegroundPlatformAPI = {
     window.parent.frames["wallet" as any].location = `/wallet.html#${page}`;
     window.location.href = "about:blank";
   },
-  openWalletURIFromPopup: (page: string) => {
+  openWalletURIFromPopup: (page: TalerUri) => {
     alert("openWalletURIFromPopup not implemented yet");
   },
   redirectTabToWalletPage: (tabId: number, page: string) => {
diff --git a/packages/taler-wallet-webextension/src/popup/TalerActionFound.tsx 
b/packages/taler-wallet-webextension/src/popup/TalerActionFound.tsx
index b7984e4b8..ffd883098 100644
--- a/packages/taler-wallet-webextension/src/popup/TalerActionFound.tsx
+++ b/packages/taler-wallet-webextension/src/popup/TalerActionFound.tsx
@@ -19,10 +19,10 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
-import { classifyTalerUri, TalerUriType } from "@gnu-taler/taler-util";
+import { parseTalerUri, TalerUri, TalerUriAction } from 
"@gnu-taler/taler-util";
+import { useTranslationContext } from "@gnu-taler/web-util/lib/index.browser";
 import { Fragment, h, VNode } from "preact";
 import { Title } from "../components/styled/index.js";
-import { useTranslationContext } from "@gnu-taler/web-util/lib/index.browser";
 import { Button } from "../mui/Button.js";
 import { platform } from "../platform/foreground.js";
 
@@ -32,15 +32,15 @@ export interface Props {
 }
 
 function ContentByUriType({
-  type,
+  uri,
   onConfirm,
 }: {
-  type: TalerUriType;
+  uri: TalerUri;
   onConfirm: () => Promise<void>;
 }) {
   const { i18n } = useTranslationContext();
-  switch (type) {
-    case TalerUriType.TalerWithdraw:
+  switch (uri.type) {
+    case TalerUriAction.Withdraw:
       return (
         <div>
           <p>
@@ -52,8 +52,8 @@ function ContentByUriType({
         </div>
       );
 
-    case TalerUriType.TalerPayTemplate:
-    case TalerUriType.TalerPay:
+    case TalerUriAction.PayTemplate:
+    case TalerUriAction.Pay:
       return (
         <div>
           <p>
@@ -64,7 +64,7 @@ function ContentByUriType({
           </Button>
         </div>
       );
-    case TalerUriType.TalerTip:
+    case TalerUriAction.Tip:
       return (
         <div>
           <p>
@@ -76,7 +76,7 @@ function ContentByUriType({
         </div>
       );
 
-    case TalerUriType.TalerRefund:
+    case TalerUriAction.Refund:
       return (
         <div>
           <p>
@@ -88,34 +88,25 @@ function ContentByUriType({
         </div>
       );
 
-    case TalerUriType.TalerDevExperiment:
-    case TalerUriType.TalerTemplate:
-    case TalerUriType.TalerPayPull:
-    case TalerUriType.TalerPayPush:
-    case TalerUriType.TalerRecovery:
-    case TalerUriType.Unknown:
-      return (
-        <div>
-          <p>
-            <i18n.Translate>
-              This page has a malformed taler uri.
-            </i18n.Translate>
-          </p>
-        </div>
-      );
-
+    case TalerUriAction.DevExperiment:
+    case TalerUriAction.PayPull:
+    case TalerUriAction.PayPush:
+    case TalerUriAction.Restore:
+    case TalerUriAction.Auditor:
+    case TalerUriAction.Exchange:
+      return null;
     default: {
-      const error: never = type;
+      const error: never = uri;
       return null;
     }
   }
 }
 
 export function TalerActionFound({ url, onDismiss }: Props): VNode {
-  const uriType = classifyTalerUri(url);
+  const talerUri = parseTalerUri(url);
   const { i18n } = useTranslationContext();
   async function redirectToWallet(): Promise<void> {
-    platform.openWalletURIFromPopup(url);
+    platform.openWalletURIFromPopup(talerUri!);
   }
   return (
     <Fragment>
@@ -123,7 +114,17 @@ export function TalerActionFound({ url, onDismiss }: 
Props): VNode {
         <Title>
           <i18n.Translate>Taler Action</i18n.Translate>
         </Title>
-        <ContentByUriType type={uriType} onConfirm={redirectToWallet} />
+        {!talerUri ? (
+          <div>
+            <p>
+              <i18n.Translate>
+                This page has a malformed taler uri.
+              </i18n.Translate>
+            </p>
+          </div>
+        ) : (
+          <ContentByUriType uri={talerUri} onConfirm={redirectToWallet} />
+        )}
       </section>
       <footer>
         <div />
diff --git a/packages/taler-wallet-webextension/src/wallet/AddNewActionView.tsx 
b/packages/taler-wallet-webextension/src/wallet/AddNewActionView.tsx
index 68a90f8b5..7f142f58b 100644
--- a/packages/taler-wallet-webextension/src/wallet/AddNewActionView.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/AddNewActionView.tsx
@@ -13,13 +13,13 @@
  You should have received a copy of the GNU General Public License along with
  GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
-import { classifyTalerUri, TalerUriType } from "@gnu-taler/taler-util";
+import { parseTalerUri, TalerUriAction } from "@gnu-taler/taler-util";
+import { useTranslationContext } from "@gnu-taler/web-util/lib/index.browser";
 import { Fragment, h, VNode } from "preact";
 import { useState } from "preact/hooks";
-import { platform } from "../platform/foreground.js";
 import { InputWithLabel } from "../components/styled/index.js";
-import { useTranslationContext } from "@gnu-taler/web-util/lib/index.browser";
 import { Button } from "../mui/Button.js";
+import { platform } from "../platform/foreground.js";
 
 export interface Props {
   onCancel: () => Promise<void>;
@@ -27,19 +27,17 @@ export interface Props {
 
 export function AddNewActionView({ onCancel }: Props): VNode {
   const [url, setUrl] = useState("");
-  const uriType = classifyTalerUri(url);
+  const uri = parseTalerUri(url);
   const { i18n } = useTranslationContext();
 
   async function redirectToWallet(): Promise<void> {
-    platform.openWalletURIFromPopup(url);
+    platform.openWalletURIFromPopup(uri!);
   }
 
   return (
     <Fragment>
       <section>
-        <InputWithLabel
-          invalid={url !== "" && uriType === TalerUriType.Unknown}
-        >
+        <InputWithLabel invalid={url !== "" && !uri}>
           <label>GNU Taler URI</label>
           <div>
             <input
@@ -56,21 +54,21 @@ export function AddNewActionView({ onCancel }: Props): 
VNode {
         <Button variant="contained" color="secondary" onClick={onCancel}>
           <i18n.Translate>Cancel</i18n.Translate>
         </Button>
-        {uriType !== TalerUriType.Unknown && (
+        {uri && (
           <Button
             variant="contained"
             color="success"
             onClick={redirectToWallet}
           >
             {(() => {
-              switch (uriType) {
-                case TalerUriType.TalerPay:
+              switch (uri.type) {
+                case TalerUriAction.Pay:
                   return <i18n.Translate>Open pay page</i18n.Translate>;
-                case TalerUriType.TalerRefund:
+                case TalerUriAction.Refund:
                   return <i18n.Translate>Open refund page</i18n.Translate>;
-                case TalerUriType.TalerTip:
+                case TalerUriAction.Tip:
                   return <i18n.Translate>Open tip page</i18n.Translate>;
-                case TalerUriType.TalerWithdraw:
+                case TalerUriAction.Withdraw:
                   return <i18n.Translate>Open withdraw page</i18n.Translate>;
               }
               return <Fragment />;
diff --git a/packages/taler-wallet-webextension/src/wallet/Application.tsx 
b/packages/taler-wallet-webextension/src/wallet/Application.tsx
index 5c75b734b..6541625c5 100644
--- a/packages/taler-wallet-webextension/src/wallet/Application.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/Application.tsx
@@ -20,7 +20,7 @@
  * @author sebasjm
  */
 
-import { TranslatedString } from "@gnu-taler/taler-util";
+import { TalerUri, TranslatedString } from "@gnu-taler/taler-util";
 import {
   TranslationProvider,
   useTranslationContext,
@@ -102,7 +102,7 @@ export function Application(): VNode {
             component={() => (
               <WalletTemplate goToTransaction={redirectToTxInfo}>
                 <QrReaderPage
-                  onDetected={(talerActionUrl: string) => {
+                  onDetected={(talerActionUrl: TalerUri) => {
                     platform.openWalletURIFromPopup(talerActionUrl);
                   }}
                 />
diff --git a/packages/taler-wallet-webextension/src/wallet/QrReader.tsx 
b/packages/taler-wallet-webextension/src/wallet/QrReader.tsx
index 10916496c..81f879a62 100644
--- a/packages/taler-wallet-webextension/src/wallet/QrReader.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/QrReader.tsx
@@ -15,22 +15,21 @@
  */
 
 import {
-  classifyTalerUri,
-  TalerUriType,
+  parseTalerUri,
+  TalerUri,
   TranslatedString,
 } from "@gnu-taler/taler-util";
-import { styled } from "@linaria/react";
+import { useTranslationContext } from "@gnu-taler/web-util/lib/index.browser";
 import { css } from "@linaria/core";
+import { styled } from "@linaria/react";
+import jsQR, * as pr from "jsqr";
 import { Fragment, h, VNode } from "preact";
-import { Ref, useEffect, useMemo, useRef, useState } from "preact/hooks";
-import { useTranslationContext } from "@gnu-taler/web-util/lib/index.browser";
+import { useRef, useState } from "preact/hooks";
 import { Alert } from "../mui/Alert.js";
 import { Button } from "../mui/Button.js";
-import { TextField } from "../mui/TextField.js";
-import jsQR, * as pr from "jsqr";
-import { InputFile } from "../mui/InputFile.js";
 import { Grid } from "../mui/Grid.js";
-import { notDeepEqual } from "assert";
+import { InputFile } from "../mui/InputFile.js";
+import { TextField } from "../mui/TextField.js";
 
 const QrCanvas = css`
   width: 80%;
@@ -51,7 +50,7 @@ const Container = styled.div`
 `;
 
 export interface Props {
-  onDetected: (url: string) => void;
+  onDetected: (url: TalerUri) => void;
 }
 
 type XY = { x: number; y: number };
@@ -214,7 +213,7 @@ export function QrReaderPage({ onDetected }: Props): VNode {
 
   function onChange(str: string) {
     if (!!str) {
-      if (classifyTalerUri(str) === TalerUriType.Unknown) {
+      if (!parseTalerUri(str)) {
         setError(
           i18n.str`URI is not valid. Taler URI should start with "taler://"`,
         );
@@ -318,7 +317,10 @@ export function QrReaderPage({ onDetected }: Props): VNode 
{
                 disabled={!!error}
                 variant="contained"
                 color="success"
-                onClick={async () => onDetected(value)}
+                onClick={async () => {
+                  const uri = parseTalerUri(value);
+                  if (uri) onDetected(uri);
+                }}
               >
                 <i18n.Translate>Open</i18n.Translate>
               </Button>

-- 
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]