summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Dold <florian@dold.me>2023-08-25 14:11:23 +0200
committerFlorian Dold <florian@dold.me>2023-08-25 14:11:23 +0200
commitc95740f1e845d1bb14b5e255b1d217dd30b3a7da (patch)
tree9e2a27875b0a83c9fe3228de9a4f6350bc0944a0
parent896841aec5dc3594d83cc300349d20ec2270f88e (diff)
downloadwallet-core-c95740f1e845d1bb14b5e255b1d217dd30b3a7da.tar.gz
wallet-core-c95740f1e845d1bb14b5e255b1d217dd30b3a7da.tar.bz2
wallet-core-c95740f1e845d1bb14b5e255b1d217dd30b3a7da.zip
taler-util: make config parsing more compliant with spec
-rw-r--r--packages/taler-harness/src/lint.ts4
-rw-r--r--packages/taler-util/src/talerconfig.ts36
2 files changed, 31 insertions, 9 deletions
diff --git a/packages/taler-harness/src/lint.ts b/packages/taler-harness/src/lint.ts
index 715227c7f..f13049710 100644
--- a/packages/taler-harness/src/lint.ts
+++ b/packages/taler-harness/src/lint.ts
@@ -136,13 +136,13 @@ function checkBasicConf(context: LintContext): BasicConf {
const currencyEntry = cfg.getString("taler", "currency");
let mainCurrency: string | undefined;
- if (!currencyEntry.value) {
+ if (!currencyEntry.isDefined()) {
context.numErr++;
console.log("error: currency not defined in section TALER option CURRENCY");
console.log("Aborting further checks.");
process.exit(1);
} else {
- mainCurrency = currencyEntry.value.toUpperCase();
+ mainCurrency = currencyEntry.required().toUpperCase();
}
if (mainCurrency === "KUDOS") {
diff --git a/packages/taler-util/src/talerconfig.ts b/packages/taler-util/src/talerconfig.ts
index d86c58678..098f5f9a4 100644
--- a/packages/taler-util/src/talerconfig.ts
+++ b/packages/taler-util/src/talerconfig.ts
@@ -25,11 +25,14 @@
*/
import { AmountJson } from "./amounts.js";
import { Amounts } from "./amounts.js";
+import { Logger } from "./logging.js";
import nodejs_path from "path";
import nodejs_os from "os";
import nodejs_fs from "fs";
+const logger = new Logger("talerconfig.ts");
+
export class ConfigError extends Error {
constructor(message: string) {
super();
@@ -77,7 +80,7 @@ export class ConfigValue<T> {
constructor(
private sectionName: string,
private optionName: string,
- public value: string | undefined,
+ private value: string | undefined,
private converter: (x: string) => T,
) {}
@@ -138,7 +141,7 @@ export function pathsub(
lookup: (s: string, depth: number) => string | undefined,
depth = 0,
): string {
- if (depth >= 10) {
+ if (depth >= 128) {
throw Error("recursion in path substitution");
}
let s = x;
@@ -624,15 +627,18 @@ export class Configuration {
lookupVariable(x: string, depth: number = 0): string | undefined {
// We loop up options in PATHS in upper case, as option names
// are case insensitive
- let val = this.findEntry("PATHS", x)?.value;
+ const val = this.findEntry("PATHS", x)?.value;
if (val !== undefined) {
return pathsub(val, (v, d) => this.lookupVariable(v, d), depth);
}
+
// Environment variables can be case sensitive, respect that.
const envVal = process.env[x];
if (envVal !== undefined) {
return envVal;
}
+
+ logger.warn(`unable to resolve variable '${x}'`);
return;
}
@@ -692,12 +698,28 @@ export class Configuration {
"DOCDIR",
`${installPrefix}/share/doc/taler/`,
);
- this.setStringSystemDefault("PATHS", "ICONDIR", `${installPrefix}/share/icons/`);
- this.setStringSystemDefault("PATHS", "LOCALEDIR", `${installPrefix}/share/locale/`);
+ this.setStringSystemDefault(
+ "PATHS",
+ "ICONDIR",
+ `${installPrefix}/share/icons/`,
+ );
+ this.setStringSystemDefault(
+ "PATHS",
+ "LOCALEDIR",
+ `${installPrefix}/share/locale/`,
+ );
this.setStringSystemDefault("PATHS", "PREFIX", `${installPrefix}/`);
this.setStringSystemDefault("PATHS", "BINDIR", `${installPrefix}/bin`);
- this.setStringSystemDefault("PATHS", "LIBDIR", `${installPrefix}/lib/taler/`);
- this.setStringSystemDefault("PATHS", "DATADIR", `${installPrefix}/share/taler/`);
+ this.setStringSystemDefault(
+ "PATHS",
+ "LIBDIR",
+ `${installPrefix}/lib/taler/`,
+ );
+ this.setStringSystemDefault(
+ "PATHS",
+ "DATADIR",
+ `${installPrefix}/share/taler/`,
+ );
this.loadDefaultsFromDir(baseConfigDir);
}