commit 0695533de2354a3681ccc1d0627cbdb44eed9a75
parent fdad16202750ef3bf5102870d66edb9b8383a8d4
Author: Sebastian <sebasjm@gmail.com>
Date: Wed, 19 Jun 2024 12:22:57 -0300
fix payto parsing
Diffstat:
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
@@ -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
@@ -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") {