diff options
author | Sebastian <sebasjm@gmail.com> | 2024-06-19 12:22:57 -0300 |
---|---|---|
committer | Sebastian <sebasjm@gmail.com> | 2024-06-19 12:22:57 -0300 |
commit | 0695533de2354a3681ccc1d0627cbdb44eed9a75 (patch) | |
tree | bd9652aa58ac7740db6e02e6318ddbf0227c4e08 /packages | |
parent | fdad16202750ef3bf5102870d66edb9b8383a8d4 (diff) | |
download | wallet-core-0695533de2354a3681ccc1d0627cbdb44eed9a75.tar.xz |
fix payto parsing
Diffstat (limited to 'packages')
-rw-r--r-- | packages/taler-util/src/payto.test.ts | 6 | ||||
-rw-r--r-- | packages/taler-util/src/payto.ts | 17 |
2 files changed, 18 insertions, 5 deletions
diff --git a/packages/taler-util/src/payto.test.ts b/packages/taler-util/src/payto.test.ts index 0802e1cd4..1b6907cbb 100644 --- a/packages/taler-util/src/payto.test.ts +++ b/packages/taler-util/src/payto.test.ts @@ -36,3 +36,9 @@ test("parsing payto and stringify again", (t) => { t.is(stringifyPaytoUri(parsePaytoUri(payto1)!), payto1); }); +test("parsing payto with % carh", (t) => { + const payto1 = + "payto://iban/DE7763544441436?receiver-name=Test%20123%2B-%24%25%5E%3Cem%3Ehi%3C%2Fem%3E" as PaytoString; + + t.is(stringifyPaytoUri(parsePaytoUri(payto1)!), payto1); +}); diff --git a/packages/taler-util/src/payto.ts b/packages/taler-util/src/payto.ts index 1d13fb502..2b55cdf64 100644 --- a/packages/taler-util/src/payto.ts +++ b/packages/taler-util/src/payto.ts @@ -23,7 +23,14 @@ import { codecForStringURL, renderContext, } from "./codec.js"; -import { AccessToken, bytesToString, codecForAccessToken, codecOptional, hashTruncate32, stringToBytes } from "./index.js"; +import { + AccessToken, + bytesToString, + codecForAccessToken, + codecOptional, + hashTruncate32, + stringToBytes, +} from "./index.js"; import { URLSearchParams } from "./url.js"; export type PaytoUri = @@ -164,7 +171,6 @@ export function addPaytoQueryParams( return paytoPfx + acct; } return paytoPfx + acct + "?" + createSearchParams(paramList); - } /** @@ -197,12 +203,12 @@ function createSearchParams(paramList: [string, string][]): string { export function stringifyPaytoUri(p: PaytoUri): PaytoString { const url = new URL(`${paytoPfx}${p.targetType}/${p.targetPath}`); const paramList = !p.params ? [] : Object.entries(p.params); - url.search = createSearchParams(paramList) + url.search = createSearchParams(paramList); return url.href as PaytoString; } export function hashPaytoUri(p: PaytoUri): string { - const paytoUri = stringifyPaytoUri(p) + const paytoUri = stringifyPaytoUri(p); return bytesToString(hashTruncate32(stringToBytes(paytoUri + "\0"))); } @@ -234,7 +240,8 @@ export function parsePaytoUri(s: string): PaytoUri | undefined { const searchParams = new URLSearchParams(search || ""); searchParams.forEach((v, k) => { - params[k] = decodeURIComponent(v); + // URLSearchParams already decodes uri components + params[k] = v; //decodeURIComponent(v); }); if (targetType === "x-taler-bank") { |