From adc7bb61521b08495f16684ec3df679cbe8f8bdb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Micha=C3=ABl=20Minelli?= <michael@minelli.me>
Date: Fri, 2 Jun 2023 18:38:40 +0200
Subject: [PATCH] Add Local config (by json file on os)

---
 NodeApp/src/Config/LocalConfig/LocalConfig.ts | 55 +++++++++++++++++++
 .../src/Config/LocalConfig/LocalConfigKeys.ts |  6 ++
 2 files changed, 61 insertions(+)
 create mode 100644 NodeApp/src/Config/LocalConfig/LocalConfig.ts
 create mode 100644 NodeApp/src/Config/LocalConfig/LocalConfigKeys.ts

diff --git a/NodeApp/src/Config/LocalConfig/LocalConfig.ts b/NodeApp/src/Config/LocalConfig/LocalConfig.ts
new file mode 100644
index 0000000..39a376c
--- /dev/null
+++ b/NodeApp/src/Config/LocalConfig/LocalConfig.ts
@@ -0,0 +1,55 @@
+import * as fs         from 'fs';
+import logger          from '../../shared/logging/WinstonLogger';
+import SessionManager  from '../../managers/SessionManager';
+import Config          from '../Config';
+import LocalConfigKeys from './LocalConfigKeys';
+
+
+class LocalConfig {
+    private static _instance: LocalConfig;
+
+    private get configPath(): string {
+        return `${ Config.localConfig.folder }/${ Config.localConfig.file }`;
+    }
+
+    private _config: { [key in LocalConfigKeys]?: any } = {};
+
+    private constructor() { }
+
+    public static get instance(): LocalConfig {
+        if ( !LocalConfig._instance ) {
+            LocalConfig._instance = new LocalConfig();
+        }
+
+        return LocalConfig._instance;
+    }
+
+    loadConfig() {
+        if ( !fs.existsSync(this.configPath) ) {
+            fs.mkdirSync(Config.localConfig.folder, { recursive: true });
+
+            fs.writeFileSync(this.configPath, JSON.stringify({}));
+        }
+
+        this._config = JSON.parse(fs.readFileSync(this.configPath).toString());
+
+        SessionManager.token = this._config.apiToken;
+    }
+
+    updateConfig(key: LocalConfigKeys, value: any) {
+        if ( (this._config as any)[key] === value ) {
+            return;
+        }
+
+        (this._config as any)[key] = value;
+
+        fs.writeFile(this.configPath, JSON.stringify(this._config), (err) => {
+            if ( err ) {
+                logger.error(err);
+            }
+        });
+    }
+}
+
+
+export default LocalConfig.instance;
\ No newline at end of file
diff --git a/NodeApp/src/Config/LocalConfig/LocalConfigKeys.ts b/NodeApp/src/Config/LocalConfig/LocalConfigKeys.ts
new file mode 100644
index 0000000..8803557
--- /dev/null
+++ b/NodeApp/src/Config/LocalConfig/LocalConfigKeys.ts
@@ -0,0 +1,6 @@
+enum LocalConfigKeys {
+    API_TOKEN = 'apiToken'
+}
+
+
+export default LocalConfigKeys;
\ No newline at end of file
-- 
GitLab