deployment helpers

This commit is contained in:
Florian Dold 2021-08-02 15:20:00 +02:00
parent a8a4f76ed8
commit fc2be33e32
No known key found for this signature in database
GPG Key ID: D2E4F00F29D02A4B
2 changed files with 54 additions and 10 deletions

View File

@ -98,37 +98,37 @@ export class ConfigValue<T> {
constructor( constructor(
private sectionName: string, private sectionName: string,
private optionName: string, private optionName: string,
private val: string | undefined, public value: string | undefined,
private converter: (x: string) => T, private converter: (x: string) => T,
) {} ) {}
required(): T { required(): T {
if (!this.val) { if (!this.value) {
throw new ConfigError( throw new ConfigError(
`required option [${this.sectionName}]/${this.optionName} not found`, `required option [${this.sectionName}]/${this.optionName} not found`,
); );
} }
return this.converter(this.val); return this.converter(this.value);
} }
orUndefined(): T | undefined { orUndefined(): T | undefined {
if (this.val !== undefined) { if (this.value !== undefined) {
return this.converter(this.val); return this.converter(this.value);
} else { } else {
return undefined; return undefined;
} }
} }
orDefault(v: T): T | undefined { orDefault(v: T): T | undefined {
if (this.val !== undefined) { if (this.value !== undefined) {
return this.converter(this.val); return this.converter(this.value);
} else { } else {
return v; return v;
} }
} }
isDefined(): boolean { isDefined(): boolean {
return this.val !== undefined; return this.value !== undefined;
} }
} }
@ -303,7 +303,7 @@ export class Configuration {
private nestLevel = 0; private nestLevel = 0;
loadFromFilename(filename: string, opts: LoadOptions = {}): void { private loadFromFilename(filename: string, opts: LoadOptions = {}): void {
filename = expandPath(filename); filename = expandPath(filename);
const checkCycle = () => { const checkCycle = () => {
@ -339,7 +339,7 @@ export class Configuration {
} }
} }
loadGlob(parentFilename: string, fileglob: string): void { private loadGlob(parentFilename: string, fileglob: string): void {
const resolvedParent = nodejs_fs().realpathSync(parentFilename); const resolvedParent = nodejs_fs().realpathSync(parentFilename);
const parentDir = nodejs_path().dirname(resolvedParent); const parentDir = nodejs_path().dirname(resolvedParent);

View File

@ -55,6 +55,7 @@ import {
WalletCoreApiClient, WalletCoreApiClient,
Wallet, Wallet,
} from "@gnu-taler/taler-wallet-core"; } from "@gnu-taler/taler-wallet-core";
import { lintDeployment } from "./lint.js";
// 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.
@ -869,6 +870,49 @@ const deploymentCli = walletCli.subcommand("deploymentArgs", "deployment", {
help: "Subcommands for handling GNU Taler deployments.", help: "Subcommands for handling GNU Taler deployments.",
}); });
deploymentCli.subcommand("lint", "lint").action(async (args) => {
lintDeployment();
});
deploymentCli
.subcommand("coincfg", "gen-coin-config", {
help: "Generate a coin/denomination configuration for the exchange.",
})
.requiredOption("currency", ["--currency"], clk.STRING, {
help: "Currency to use",
})
.action(async (args) => {
let out = "";
const currency = args.coincfg.currency;
const min = Amounts.parseOrThrow(`${currency}:0.01`);
const max = Amounts.parseOrThrow(`${currency}:100`);
let x = min;
let n = 1;
out += "# Coin configuration for the exchange.\n";
out += '# Should be placed in "/etc/taler/conf.d/exchange-coins.conf".\n';
out += "\n";
while (Amounts.cmp(x, max) < 0) {
out += `[COIN_${currency}_${n}]\n`;
out += `VALUE = ${Amounts.stringify(x)}\n`;
out += `DURATION_WITHDRAW = 7 days\n`;
out += `DURATION_SPEND = 2 years\n`;
out += `DURATION_LEGAL = 6 years\n`;
out += `FEE_WITHDRAW = ${currency}:0\n`;
out += `FEE_DEPOSIT = ${currency}:0\n`;
out += `FEE_REFRESH = ${currency}:0\n`;
out += `FEE_REFUND = ${currency}:0\n`;
out += `RSA_KEYSIZE = 2048\n`;
out += "\n";
x = Amounts.add(x, x).amount;
n++;
}
console.log(out);
});
const deploymentConfigCli = deploymentCli.subcommand("configArgs", "config", { const deploymentConfigCli = deploymentCli.subcommand("configArgs", "config", {
help: "Subcommands the Taler configuration.", help: "Subcommands the Taler configuration.",
}); });