aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2019-12-06 00:56:31 +0100
committerFlorian Dold <florian.dold@gmail.com>2019-12-06 00:56:31 +0100
commitc8c84911ce4f69900ffbbf5accff827c78d9e13b (patch)
treef47d7e020c2bf64673ae2afa1652d18a0075bab9 /src
parent65bccbd139c53a2baccec442a680373125488102 (diff)
downloadwallet-core-c8c84911ce4f69900ffbbf5accff827c78d9e13b.tar.xz
fix re-purchase detection
Diffstat (limited to 'src')
-rw-r--r--src/headless/taler-wallet-cli.ts18
-rw-r--r--src/wallet-impl/pay.ts6
2 files changed, 22 insertions, 2 deletions
diff --git a/src/headless/taler-wallet-cli.ts b/src/headless/taler-wallet-cli.ts
index 71bccadef..2073c2573 100644
--- a/src/headless/taler-wallet-cli.ts
+++ b/src/headless/taler-wallet-cli.ts
@@ -27,6 +27,7 @@ import { Logger } from "../util/logging";
import * as Amounts from "../util/amounts";
import { decodeCrock } from "../crypto/talerCrypto";
import { OperationFailedAndReportedError } from "../wallet-impl/errors";
+import { Bank } from "./bank";
const logger = new Logger("taler-wallet-cli.ts");
@@ -435,6 +436,23 @@ testCli
});
testCli
+ .subcommand("genWithdrawUri", "gen-withdraw-uri", {
+ help: "Generate a taler://withdraw URI.",
+ })
+ .requiredOption("amount", ["-a", "--amount"], clk.STRING, {
+ default: "TESTKUDOS:20",
+ })
+ .requiredOption("bank", ["-b", "--bank"], clk.STRING, {
+ default: "https://bank.test.taler.net/",
+ })
+ .action(async (args) => {
+ const b = new Bank(args.genWithdrawUri.bank);
+ const user = await b.registerRandomUser();
+ const url = await b.generateWithdrawUri(user, args.genWithdrawUri.amount);
+ console.log(url);
+ });
+
+testCli
.subcommand("genRefundUri", "gen-refund-uri", {
help: "Generate a taler://refund URI.",
})
diff --git a/src/wallet-impl/pay.ts b/src/wallet-impl/pay.ts
index cec1b6bc5..1375a22ca 100644
--- a/src/wallet-impl/pay.ts
+++ b/src/wallet-impl/pay.ts
@@ -593,6 +593,7 @@ async function processDownloadProposalImpl(
fulfillmentUrl,
);
if (differentPurchase) {
+ console.log("repurchase detected");
p.proposalStatus = ProposalStatus.REPURCHASE;
p.repurchaseProposalId = differentPurchase.proposalId;
await tx.put(Stores.proposals, p);
@@ -756,7 +757,7 @@ export async function preparePay(
};
}
- const proposalId = await startDownloadProposal(
+ let proposalId = await startDownloadProposal(
ws,
uriResult.downloadUrl,
uriResult.sessionId,
@@ -771,6 +772,7 @@ export async function preparePay(
if (!existingProposalId) {
throw Error("invalid proposal state");
}
+ console.log("using existing purchase for same product");
proposal = await oneShotGet(ws.db, Stores.proposals, existingProposalId);
if (!proposal) {
throw Error("existing proposal is in wrong state");
@@ -787,7 +789,7 @@ export async function preparePay(
throw Error("BUG: proposal is in invalid state");
}
- console.log("proposal", proposal);
+ proposalId = proposal.proposalId;
// First check if we already payed for it.
const purchase = await oneShotGet(ws.db, Stores.purchases, proposalId);