aboutsummaryrefslogtreecommitdiff
path: root/packages/taler-util/src
diff options
context:
space:
mode:
authorFlorian Dold <florian@dold.me>2024-05-15 23:47:00 +0200
committerFlorian Dold <florian@dold.me>2024-05-15 23:47:00 +0200
commitca3234b53f8d28ff9cc41af68a0057eaecf69df2 (patch)
tree4f35eef59ed65a0b4daf4dcae5876b1d008b4e30 /packages/taler-util/src
parent6529421a5c09dec082f33ea80b1df2861e0bf5c9 (diff)
downloadwallet-core-ca3234b53f8d28ff9cc41af68a0057eaecf69df2.tar.xz
wallet-core: phase out support for public key in taler://withdraw-exchange URI
Diffstat (limited to 'packages/taler-util/src')
-rw-r--r--packages/taler-util/src/taleruri.test.ts52
-rw-r--r--packages/taler-util/src/taleruri.ts18
-rw-r--r--packages/taler-util/src/wallet-types.ts3
3 files changed, 28 insertions, 45 deletions
diff --git a/packages/taler-util/src/taleruri.test.ts b/packages/taler-util/src/taleruri.test.ts
index 7f10d21fd..b751efa34 100644
--- a/packages/taler-util/src/taleruri.test.ts
+++ b/packages/taler-util/src/taleruri.test.ts
@@ -423,24 +423,27 @@ test("taler dev exp URI (stringify)", (t) => {
*/
test("taler withdraw exchange URI (parse)", (t) => {
+ // Pubkey has been phased out, may no longer be specified.
{
- const r1 = parseWithdrawExchangeUri(
+ const rx1 = parseWithdrawExchangeUri(
"taler://withdraw-exchange/exchange.demo.taler.net/someroot/GJKG23V4ZBHEH45YRK7TWQE8ZTY7JWTY5094TQJSRZN5DSDBX8E0?a=KUDOS%3A2",
);
- if (!r1) {
+ if (rx1) {
t.fail();
return;
}
- t.deepEqual(
- r1.exchangePub,
- "GJKG23V4ZBHEH45YRK7TWQE8ZTY7JWTY5094TQJSRZN5DSDBX8E0",
- );
- t.deepEqual(
- r1.exchangeBaseUrl,
- "https://exchange.demo.taler.net/someroot/",
+ }
+ {
+ const rx2 = parseWithdrawExchangeUri(
+ "taler://withdraw-exchange/exchange.demo.taler.net/GJKG23V4ZBHEH45YRK7TWQE8ZTY7JWTY5094TQJSRZN5DSDBX8E0",
);
- t.deepEqual(r1.amount, "KUDOS:2");
+ if (rx2) {
+ t.fail();
+ return;
+ }
}
+
+ // Now test well-formed URIs
{
const r2 = parseWithdrawExchangeUri(
"taler://withdraw-exchange/exchange.demo.taler.net/someroot/",
@@ -449,7 +452,6 @@ test("taler withdraw exchange URI (parse)", (t) => {
t.fail();
return;
}
- t.deepEqual(r2.exchangePub, undefined);
t.deepEqual(r2.amount, undefined);
t.deepEqual(
r2.exchangeBaseUrl,
@@ -465,7 +467,6 @@ test("taler withdraw exchange URI (parse)", (t) => {
t.fail();
return;
}
- t.deepEqual(r3.exchangePub, undefined);
t.deepEqual(r3.amount, undefined);
t.deepEqual(r3.exchangeBaseUrl, "https://exchange.demo.taler.net/");
}
@@ -479,7 +480,6 @@ test("taler withdraw exchange URI (parse)", (t) => {
t.fail();
return;
}
- t.deepEqual(r4.exchangePub, undefined);
t.deepEqual(r4.amount, undefined);
t.deepEqual(r4.exchangeBaseUrl, "https://exchange.demo.taler.net/");
}
@@ -488,27 +488,21 @@ test("taler withdraw exchange URI (parse)", (t) => {
test("taler withdraw exchange URI (stringify)", (t) => {
const url = stringifyWithdrawExchange({
exchangeBaseUrl: "https://exchange.demo.taler.net",
- exchangePub: "GJKG23V4ZBHEH45YRK7TWQE8ZTY7JWTY5094TQJSRZN5DSDBX8E0",
});
- t.deepEqual(
- url,
- "taler://withdraw-exchange/exchange.demo.taler.net/GJKG23V4ZBHEH45YRK7TWQE8ZTY7JWTY5094TQJSRZN5DSDBX8E0",
- );
+ t.deepEqual(url, "taler://withdraw-exchange/exchange.demo.taler.net/");
});
test("taler withdraw exchange URI with amount (stringify)", (t) => {
const url = stringifyWithdrawExchange({
exchangeBaseUrl: "https://exchange.demo.taler.net",
- exchangePub: "GJKG23V4ZBHEH45YRK7TWQE8ZTY7JWTY5094TQJSRZN5DSDBX8E0",
amount: "KUDOS:19" as AmountString,
});
t.deepEqual(
url,
- "taler://withdraw-exchange/exchange.demo.taler.net/GJKG23V4ZBHEH45YRK7TWQE8ZTY7JWTY5094TQJSRZN5DSDBX8E0?a=KUDOS%3A19",
+ "taler://withdraw-exchange/exchange.demo.taler.net/?a=KUDOS%3A19",
);
});
-
/**
* 5.13 action: add-exchange https://lsd.gnunet.org/lsd0006/#name-action-add-exchange
*/
@@ -522,10 +516,7 @@ test("taler add exchange URI (parse)", (t) => {
t.fail();
return;
}
- t.deepEqual(
- r1.exchangeBaseUrl,
- "https://exchange.example.com/",
- );
+ t.deepEqual(r1.exchangeBaseUrl, "https://exchange.example.com/");
}
{
const r2 = parseAddExchangeUri(
@@ -535,22 +526,15 @@ test("taler add exchange URI (parse)", (t) => {
t.fail();
return;
}
- t.deepEqual(
- r2.exchangeBaseUrl,
- "https://exchanges.example.com/api/",
- );
+ t.deepEqual(r2.exchangeBaseUrl, "https://exchanges.example.com/api/");
}
-
});
test("taler add exchange URI (stringify)", (t) => {
const url = stringifyAddExchange({
exchangeBaseUrl: "https://exchange.demo.taler.net",
});
- t.deepEqual(
- url,
- "taler://add-exchange/exchange.demo.taler.net/",
- );
+ t.deepEqual(url, "taler://add-exchange/exchange.demo.taler.net/");
});
/**
diff --git a/packages/taler-util/src/taleruri.ts b/packages/taler-util/src/taleruri.ts
index b4f9db6ef..576736503 100644
--- a/packages/taler-util/src/taleruri.ts
+++ b/packages/taler-util/src/taleruri.ts
@@ -124,7 +124,6 @@ export interface BackupRestoreUri {
export interface WithdrawExchangeUri {
type: TalerUriAction.WithdrawExchange;
exchangeBaseUrl: string;
- exchangePub?: string;
amount?: AmountString;
}
@@ -212,9 +211,7 @@ export function parseAddExchangeUriWithError(s: string) {
const result: AddExchangeUri = {
type: TalerUriAction.AddExchange,
- exchangeBaseUrl: canonicalizeBaseUrl(
- `${pi.body.innerProto}://${p}/`,
- ),
+ exchangeBaseUrl: canonicalizeBaseUrl(`${pi.body.innerProto}://${p}/`),
};
return opFixedSuccess(result);
}
@@ -507,7 +504,14 @@ export function parseWithdrawExchangeUri(
return undefined;
}
const host = parts[0].toLowerCase();
- const exchangePub = parts.length > 1 ? parts[parts.length - 1] : undefined;
+ // Used to be the reserve public key, now it's empty!
+ const lastPathComponent =
+ parts.length > 1 ? parts[parts.length - 1] : undefined;
+
+ if (lastPathComponent) {
+ // invalid taler://withdraw-exchange URI, must end with a slash
+ return undefined;
+ }
const pathSegments = parts.slice(1, parts.length - 1);
const hostAndSegments = [host, ...pathSegments].join("/");
const exchangeBaseUrl = canonicalizeBaseUrl(
@@ -519,7 +523,6 @@ export function parseWithdrawExchangeUri(
return {
type: TalerUriAction.WithdrawExchange,
exchangeBaseUrl,
- exchangePub: exchangePub != "" ? exchangePub : undefined,
amount,
};
}
@@ -641,13 +644,12 @@ export function stringifyRestoreUri({
export function stringifyWithdrawExchange({
exchangeBaseUrl,
- exchangePub,
amount,
}: Omit<WithdrawExchangeUri, "type">): string {
const { proto, path, query } = getUrlInfo(exchangeBaseUrl, {
a: amount,
});
- return `${proto}://withdraw-exchange/${path}${exchangePub ?? ""}${query}`;
+ return `${proto}://withdraw-exchange/${path}${query}`;
}
export function stringifyAddExchange({
diff --git a/packages/taler-util/src/wallet-types.ts b/packages/taler-util/src/wallet-types.ts
index b9fd24754..5e8320f33 100644
--- a/packages/taler-util/src/wallet-types.ts
+++ b/packages/taler-util/src/wallet-types.ts
@@ -1721,15 +1721,12 @@ export interface AddExchangeRequest {
* @deprecated use a separate API call to start a forced exchange update instead
*/
forceUpdate?: boolean;
-
- masterPub?: string;
}
export const codecForAddExchangeRequest = (): Codec<AddExchangeRequest> =>
buildCodecForObject<AddExchangeRequest>()
.property("exchangeBaseUrl", codecForCanonBaseUrl())
.property("forceUpdate", codecOptional(codecForBoolean()))
- .property("masterPub", codecOptional(codecForString()))
.build("AddExchangeRequest");
export interface UpdateExchangeEntryRequest {