implement debug flag for allowing late withdrawal
This commit is contained in:
parent
14f13250a0
commit
f4b5f3cff8
@ -4,4 +4,4 @@ try {
|
|||||||
} catch (e) {
|
} catch (e) {
|
||||||
// Do nothing.
|
// 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 * as clk from "./clk.js";
|
||||||
import { deepStrictEqual } from "assert";
|
import { deepStrictEqual } from "assert";
|
||||||
import { getTestInfo, runTests } from "./integrationtests/testrunner.js";
|
import { getTestInfo, runTests } from "./integrationtests/testrunner.js";
|
||||||
import { PreparePayResultType, setDangerousTimetravel, classifyTalerUri, TalerUriType, RecoveryMergeStrategy, Amounts, addPaytoQueryParams, codecForList, codecForString } from "@gnu-taler/taler-util";
|
import {
|
||||||
import { Logger, Wallet, NodeHttpLib, getDefaultNodeWallet, OperationFailedAndReportedError, OperationFailedError, decodeCrock, rsaBlind, NodeThreadCryptoWorkerFactory, CryptoApi } from "@gnu-taler/taler-wallet-core";
|
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
|
// This module also serves as the entry point for the crypto
|
||||||
// thread worker, and thus must expose these two handlers.
|
// thread worker, and thus must expose these two handlers.
|
||||||
@ -780,10 +802,10 @@ testCli
|
|||||||
help: "Glob pattern to select which tests to run",
|
help: "Glob pattern to select which tests to run",
|
||||||
})
|
})
|
||||||
.maybeOption("suites", ["--suites"], clk.STRING, {
|
.maybeOption("suites", ["--suites"], clk.STRING, {
|
||||||
help: "Only run selected suites (string-separated list)"
|
help: "Only run selected suites (string-separated list)",
|
||||||
})
|
})
|
||||||
.flag("dryRun", ["--dry"], {
|
.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) => {
|
.action(async (args) => {
|
||||||
await runTests({
|
await runTests({
|
||||||
@ -793,7 +815,6 @@ testCli
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
async function read(stream: NodeJS.ReadStream) {
|
async function read(stream: NodeJS.ReadStream) {
|
||||||
const chunks = [];
|
const chunks = [];
|
||||||
for await (const chunk of stream) chunks.push(chunk);
|
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");
|
const res = await cryptoApi.hashString("foo");
|
||||||
console.log(res);
|
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();
|
||||||
|
}
|
||||||
|
@ -51,4 +51,6 @@ export * from "./util/promiseUtils";
|
|||||||
export * from "./util/query";
|
export * from "./util/query";
|
||||||
export * from "./util/http";
|
export * from "./util/http";
|
||||||
|
|
||||||
export * from "./pending-types";
|
export * from "./pending-types";
|
||||||
|
|
||||||
|
export * from "./util/debugFlags";
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
import {
|
import {
|
||||||
AmountJson,
|
AmountJson,
|
||||||
Amounts,
|
Amounts,
|
||||||
|
durationFromSpec,
|
||||||
parseWithdrawUri,
|
parseWithdrawUri,
|
||||||
Timestamp,
|
Timestamp,
|
||||||
} from "@gnu-taler/taler-util";
|
} from "@gnu-taler/taler-util";
|
||||||
@ -74,6 +75,7 @@ import { URL } from "../util/url";
|
|||||||
import { TalerErrorCode } from "@gnu-taler/taler-util";
|
import { TalerErrorCode } from "@gnu-taler/taler-util";
|
||||||
import { updateRetryInfoTimeout, initRetryInfo } from "../util/retries";
|
import { updateRetryInfoTimeout, initRetryInfo } from "../util/retries";
|
||||||
import { compare } from "@gnu-taler/taler-util";
|
import { compare } from "@gnu-taler/taler-util";
|
||||||
|
import { walletCoreDebugFlags } from "../util/debugFlags.js";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Logger for this file.
|
* Logger for this file.
|
||||||
@ -174,10 +176,15 @@ interface ExchangeWithdrawDetails {
|
|||||||
export function isWithdrawableDenom(d: DenominationRecord): boolean {
|
export function isWithdrawableDenom(d: DenominationRecord): boolean {
|
||||||
const now = getTimestampNow();
|
const now = getTimestampNow();
|
||||||
const started = timestampCmp(now, d.stampStart) >= 0;
|
const started = timestampCmp(now, d.stampStart) >= 0;
|
||||||
const lastPossibleWithdraw = timestampSubtractDuraction(
|
let lastPossibleWithdraw: Timestamp;
|
||||||
d.stampExpireWithdraw,
|
if (walletCoreDebugFlags.denomselAllowLate) {
|
||||||
{ d_ms: 50 * 1000 },
|
lastPossibleWithdraw = d.stampExpireWithdraw;
|
||||||
);
|
} else {
|
||||||
|
lastPossibleWithdraw = timestampSubtractDuraction(
|
||||||
|
d.stampExpireWithdraw,
|
||||||
|
durationFromSpec({ minutes: 5 }),
|
||||||
|
);
|
||||||
|
}
|
||||||
const remaining = getDurationRemaining(lastPossibleWithdraw, now);
|
const remaining = getDurationRemaining(lastPossibleWithdraw, now);
|
||||||
const stillOkay = remaining.d_ms !== 0;
|
const stillOkay = remaining.d_ms !== 0;
|
||||||
return started && stillOkay && !d.isRevoked;
|
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