From dc002f99a96752d3f0a10efe44a8a4d0503e8529 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Thu, 22 Dec 2022 18:42:18 -0300 Subject: support for ext+taler:// while taler:// is not yet allowed as scheme --- .../taler-wallet-webextension/manifest-v2.json | 7 +++ .../taler-wallet-webextension/manifest-v3.json | 12 +++++ .../src/cta/Withdraw/state.ts | 7 ++- .../src/platform/chrome.ts | 5 +- .../src/wallet/DeveloperPage.tsx | 60 +++++++++++++++++++++- .../taler-wallet-webextension/src/wxBackend.ts | 5 +- 6 files changed, 91 insertions(+), 5 deletions(-) diff --git a/packages/taler-wallet-webextension/manifest-v2.json b/packages/taler-wallet-webextension/manifest-v2.json index 8c336da25..6adadad98 100644 --- a/packages/taler-wallet-webextension/manifest-v2.json +++ b/packages/taler-wallet-webextension/manifest-v2.json @@ -26,6 +26,13 @@ "https://*/*", "webRequest" ], + "protocol_handlers": [ + { + "protocol": "ext+taler", + "name": "Taler Wallet WebExtension", + "uriTemplate": "/static/wallet.html#/cta/withdraw?d=1&talerWithdrawUri=%s" + } + ], "browser_action": { "default_icon": { "16": "static/img/taler-logo-16.png", diff --git a/packages/taler-wallet-webextension/manifest-v3.json b/packages/taler-wallet-webextension/manifest-v3.json index fe9b75375..4e18125b3 100644 --- a/packages/taler-wallet-webextension/manifest-v3.json +++ b/packages/taler-wallet-webextension/manifest-v3.json @@ -29,6 +29,18 @@ "optional_permissions": [ "webRequest" ], + "web_accessible_resources": [ + { + "resources": [ + "static/wallet.html" + ], + "matches": [ + "https://*/*", + "http://*/*", + "file://*/*" + ] + } + ], "host_permissions": [ "http://*/*", "https://*/*" diff --git a/packages/taler-wallet-webextension/src/cta/Withdraw/state.ts b/packages/taler-wallet-webextension/src/cta/Withdraw/state.ts index 1ecf05eca..d1853442b 100644 --- a/packages/taler-wallet-webextension/src/cta/Withdraw/state.ts +++ b/packages/taler-wallet-webextension/src/cta/Withdraw/state.ts @@ -90,7 +90,7 @@ export function useComponentStateFromParams({ } export function useComponentStateFromURI({ - talerWithdrawUri, + talerWithdrawUri: maybeTalerUri, cancel, onSuccess, }: PropsFromURI): RecursiveState { @@ -99,7 +99,10 @@ export function useComponentStateFromURI({ * Ask the wallet about the withdraw URI */ const uriInfoHook = useAsyncAsHook(async () => { - if (!talerWithdrawUri) throw Error("ERROR_NO-URI-FOR-WITHDRAWAL"); + if (!maybeTalerUri) throw Error("ERROR_NO-URI-FOR-WITHDRAWAL"); + const talerWithdrawUri = maybeTalerUri.startsWith("ext+") + ? maybeTalerUri.substring(4) + : maybeTalerUri; const uriInfo = await api.wallet.call( WalletApiOperation.GetWithdrawalDetailsForUri, diff --git a/packages/taler-wallet-webextension/src/platform/chrome.ts b/packages/taler-wallet-webextension/src/platform/chrome.ts index b7b0c6640..744283913 100644 --- a/packages/taler-wallet-webextension/src/platform/chrome.ts +++ b/packages/taler-wallet-webextension/src/platform/chrome.ts @@ -233,7 +233,10 @@ function notifyWhenAppIsReady(callback: () => void): void { } } -function openWalletURIFromPopup(talerUri: string): void { +function openWalletURIFromPopup(maybeTalerUri: string): void { + const talerUri = maybeTalerUri.startsWith("ext+") + ? maybeTalerUri.substring(4) + : maybeTalerUri; const uriType = classifyTalerUri(talerUri); let url: string | undefined = undefined; diff --git a/packages/taler-wallet-webextension/src/wallet/DeveloperPage.tsx b/packages/taler-wallet-webextension/src/wallet/DeveloperPage.tsx index 0916f4f43..4805c03ca 100644 --- a/packages/taler-wallet-webextension/src/wallet/DeveloperPage.tsx +++ b/packages/taler-wallet-webextension/src/wallet/DeveloperPage.tsx @@ -170,7 +170,7 @@ export function View({

Debug tools:

- + + + + + + + {" "} + + + + + + {" "} {downloadedDatabase && (
diff --git a/packages/taler-wallet-webextension/src/wxBackend.ts b/packages/taler-wallet-webextension/src/wxBackend.ts index dca239de6..0f0beb41f 100644 --- a/packages/taler-wallet-webextension/src/wxBackend.ts +++ b/packages/taler-wallet-webextension/src/wxBackend.ts @@ -298,7 +298,10 @@ async function reinitWallet(): Promise { return walletInit.resolve(); } -function parseTalerUriAndRedirect(tabId: number, talerUri: string): void { +function parseTalerUriAndRedirect(tabId: number, maybeTalerUri: string): void { + const talerUri = maybeTalerUri.startsWith("ext+") + ? maybeTalerUri.substring(4) + : maybeTalerUri; const uriType = classifyTalerUri(talerUri); switch (uriType) { case TalerUriType.TalerWithdraw: -- cgit v1.2.3