deployment helpers
This commit is contained in:
parent
a8a4f76ed8
commit
fc2be33e32
@ -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);
|
||||||
|
|
||||||
|
@ -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.",
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user