implement debug flag for allowing late withdrawal
This commit is contained in:
parent
14f13250a0
commit
f4b5f3cff8
@ -4,4 +4,4 @@ try {
|
||||
} catch (e) {
|
||||
// Do nothing.
|
||||
}
|
||||
require('../dist/taler-wallet-cli.js').walletCli.run();
|
||||
require('../dist/taler-wallet-cli.js').main();
|
||||
|
@ -22,8 +22,30 @@ import fs from "fs";
|
||||
import * as clk from "./clk.js";
|
||||
import { deepStrictEqual } from "assert";
|
||||
import { getTestInfo, runTests } from "./integrationtests/testrunner.js";
|
||||
import { PreparePayResultType, setDangerousTimetravel, classifyTalerUri, TalerUriType, RecoveryMergeStrategy, Amounts, addPaytoQueryParams, codecForList, codecForString } from "@gnu-taler/taler-util";
|
||||
import { Logger, Wallet, NodeHttpLib, getDefaultNodeWallet, OperationFailedAndReportedError, OperationFailedError, decodeCrock, rsaBlind, NodeThreadCryptoWorkerFactory, CryptoApi } from "@gnu-taler/taler-wallet-core";
|
||||
import {
|
||||
PreparePayResultType,
|
||||
setDangerousTimetravel,
|
||||
classifyTalerUri,
|
||||
TalerUriType,
|
||||
RecoveryMergeStrategy,
|
||||
Amounts,
|
||||
addPaytoQueryParams,
|
||||
codecForList,
|
||||
codecForString,
|
||||
} from "@gnu-taler/taler-util";
|
||||
import {
|
||||
Logger,
|
||||
Wallet,
|
||||
NodeHttpLib,
|
||||
getDefaultNodeWallet,
|
||||
OperationFailedAndReportedError,
|
||||
OperationFailedError,
|
||||
decodeCrock,
|
||||
rsaBlind,
|
||||
NodeThreadCryptoWorkerFactory,
|
||||
CryptoApi,
|
||||
walletCoreDebugFlags,
|
||||
} from "@gnu-taler/taler-wallet-core";
|
||||
|
||||
// This module also serves as the entry point for the crypto
|
||||
// thread worker, and thus must expose these two handlers.
|
||||
@ -780,10 +802,10 @@ testCli
|
||||
help: "Glob pattern to select which tests to run",
|
||||
})
|
||||
.maybeOption("suites", ["--suites"], clk.STRING, {
|
||||
help: "Only run selected suites (string-separated list)"
|
||||
help: "Only run selected suites (string-separated list)",
|
||||
})
|
||||
.flag("dryRun", ["--dry"], {
|
||||
help: "Only print tests that will be selected to run."
|
||||
help: "Only print tests that will be selected to run.",
|
||||
})
|
||||
.action(async (args) => {
|
||||
await runTests({
|
||||
@ -793,7 +815,6 @@ testCli
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
async function read(stream: NodeJS.ReadStream) {
|
||||
const chunks = [];
|
||||
for await (const chunk of stream) chunks.push(chunk);
|
||||
@ -858,3 +879,11 @@ testCli.subcommand("cryptoworker", "cryptoworker").action(async (args) => {
|
||||
const res = await cryptoApi.hashString("foo");
|
||||
console.log(res);
|
||||
});
|
||||
|
||||
export function main() {
|
||||
if (process.env["TALER_WALLET_DEBUG_DENOMSEL_ALLOW_LATE"]) {
|
||||
logger.warn("Allowing withdrawal of late denominations for debugging");
|
||||
walletCoreDebugFlags.denomselAllowLate = true;
|
||||
}
|
||||
walletCli.run();
|
||||
}
|
||||
|
@ -52,3 +52,5 @@ export * from "./util/query";
|
||||
export * from "./util/http";
|
||||
|
||||
export * from "./pending-types";
|
||||
|
||||
export * from "./util/debugFlags";
|
||||
|
@ -20,6 +20,7 @@
|
||||
import {
|
||||
AmountJson,
|
||||
Amounts,
|
||||
durationFromSpec,
|
||||
parseWithdrawUri,
|
||||
Timestamp,
|
||||
} from "@gnu-taler/taler-util";
|
||||
@ -74,6 +75,7 @@ import { URL } from "../util/url";
|
||||
import { TalerErrorCode } from "@gnu-taler/taler-util";
|
||||
import { updateRetryInfoTimeout, initRetryInfo } from "../util/retries";
|
||||
import { compare } from "@gnu-taler/taler-util";
|
||||
import { walletCoreDebugFlags } from "../util/debugFlags.js";
|
||||
|
||||
/**
|
||||
* Logger for this file.
|
||||
@ -174,10 +176,15 @@ interface ExchangeWithdrawDetails {
|
||||
export function isWithdrawableDenom(d: DenominationRecord): boolean {
|
||||
const now = getTimestampNow();
|
||||
const started = timestampCmp(now, d.stampStart) >= 0;
|
||||
const lastPossibleWithdraw = timestampSubtractDuraction(
|
||||
let lastPossibleWithdraw: Timestamp;
|
||||
if (walletCoreDebugFlags.denomselAllowLate) {
|
||||
lastPossibleWithdraw = d.stampExpireWithdraw;
|
||||
} else {
|
||||
lastPossibleWithdraw = timestampSubtractDuraction(
|
||||
d.stampExpireWithdraw,
|
||||
{ d_ms: 50 * 1000 },
|
||||
durationFromSpec({ minutes: 5 }),
|
||||
);
|
||||
}
|
||||
const remaining = getDurationRemaining(lastPossibleWithdraw, now);
|
||||
const stillOkay = remaining.d_ms !== 0;
|
||||
return started && stillOkay && !d.isRevoked;
|
||||
|
32
packages/taler-wallet-core/src/util/debugFlags.ts
Normal file
32
packages/taler-wallet-core/src/util/debugFlags.ts
Normal file
@ -0,0 +1,32 @@
|
||||
/*
|
||||
This file is part of GNU Taler
|
||||
(C) 2021 Taler Systems S.A.
|
||||
|
||||
GNU Taler is free software; you can redistribute it and/or modify it under the
|
||||
terms of the GNU General Public License as published by the Free Software
|
||||
Foundation; either version 3, or (at your option) any later version.
|
||||
|
||||
GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along with
|
||||
GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
/**
|
||||
* Debug flags for wallet-core.
|
||||
*
|
||||
* @author Florian Dold
|
||||
*/
|
||||
|
||||
export interface WalletCoreDebugFlags {
|
||||
/**
|
||||
* Allow withdrawal of denominations even though they are about to expire.
|
||||
*/
|
||||
denomselAllowLate: boolean;
|
||||
}
|
||||
|
||||
export const walletCoreDebugFlags: WalletCoreDebugFlags = {
|
||||
denomselAllowLate: false,
|
||||
};
|
Loading…
Reference in New Issue
Block a user