summaryrefslogtreecommitdiff
path: root/packages/taler-util/src/talerconfig.ts
diff options
context:
space:
mode:
authorFlorian Dold <florian@dold.me>2021-08-04 12:21:05 +0200
committerFlorian Dold <florian@dold.me>2021-08-04 12:21:05 +0200
commitf92cbdbf476d4b51e1315ae26679008ae6889f60 (patch)
treeb18834dc724a03834862a7e323e5998a5863bb9f /packages/taler-util/src/talerconfig.ts
parenta1235696778e2d1a3714fec2eeca9a1e628e333e (diff)
downloadwallet-core-f92cbdbf476d4b51e1315ae26679008ae6889f60.tar.gz
wallet-core-f92cbdbf476d4b51e1315ae26679008ae6889f60.tar.bz2
wallet-core-f92cbdbf476d4b51e1315ae26679008ae6889f60.zip
better default config location detection
Diffstat (limited to 'packages/taler-util/src/talerconfig.ts')
-rw-r--r--packages/taler-util/src/talerconfig.ts30
1 files changed, 30 insertions, 0 deletions
diff --git a/packages/taler-util/src/talerconfig.ts b/packages/taler-util/src/talerconfig.ts
index 624d4ff3d..ebc418859 100644
--- a/packages/taler-util/src/talerconfig.ts
+++ b/packages/taler-util/src/talerconfig.ts
@@ -294,6 +294,26 @@ function normalizeInlineFilename(parentFile: string, f: string): string {
return nodejs_path().join(resolvedParentDir, f);
}
+/**
+ * Crude implementation of the which(1) shell command.
+ *
+ * Tries to locate the location of an executable based on the
+ * "PATH" environment variable.
+ */
+function which(name: string): string | undefined {
+ const paths = process.env["PATH"]?.split(":");
+ if (!paths) {
+ return undefined;
+ }
+ for (const path of paths) {
+ const filename = nodejs_path().join(path, name);
+ if (nodejs_fs().existsSync(filename)) {
+ return filename;
+ }
+ }
+ return undefined;
+}
+
export class Configuration {
private sectionMap: SectionMap = {};
@@ -614,6 +634,16 @@ export class Configuration {
private loadDefaults(): void {
let bc = process.env["TALER_BASE_CONFIG"];
if (!bc) {
+ /* Try to locate the configuration based on the location
+ * of the taler-config binary. */
+ const path = which("taler-config");
+ if (path) {
+ bc = nodejs_fs().realpathSync(
+ nodejs_path().dirname(path) + "/../share/taler/config.d",
+ );
+ }
+ }
+ if (!bc) {
bc = "/usr/share/taler/config.d";
}
this.loadFrom(bc);