aboutsummaryrefslogtreecommitdiff
path: root/packages
diff options
context:
space:
mode:
authorSebastian <sebasjm@gmail.com>2024-06-19 12:22:57 -0300
committerSebastian <sebasjm@gmail.com>2024-06-19 12:22:57 -0300
commit0695533de2354a3681ccc1d0627cbdb44eed9a75 (patch)
treebd9652aa58ac7740db6e02e6318ddbf0227c4e08 /packages
parentfdad16202750ef3bf5102870d66edb9b8383a8d4 (diff)
downloadwallet-core-0695533de2354a3681ccc1d0627cbdb44eed9a75.tar.xz
fix payto parsing
Diffstat (limited to 'packages')
-rw-r--r--packages/taler-util/src/payto.test.ts6
-rw-r--r--packages/taler-util/src/payto.ts17
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") {