From 965a9082d5dd0711e29eec1418cc1cec939fefe7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Micha=C3=ABl=20Minelli?= <git@minelli.swiss>
Date: Mon, 7 Oct 2024 18:07:53 +0200
Subject: [PATCH] Config => Adapt to getEnvVar function

---
 NodeApp/src/config/Config.ts          | 50 +++++++++++++--------------
 NodeApp/src/config/ConfigFiles.ts     | 27 ++++++++++++---
 NodeApp/src/config/LocalConfigFile.ts |  9 ++---
 3 files changed, 53 insertions(+), 33 deletions(-)

diff --git a/NodeApp/src/config/Config.ts b/NodeApp/src/config/Config.ts
index 615a369..ec06f03 100644
--- a/NodeApp/src/config/Config.ts
+++ b/NodeApp/src/config/Config.ts
@@ -1,19 +1,18 @@
-import getAppDataPath from 'appdata-path';
+import ClientsSharedConfig from '../sharedByClients/config/ClientsSharedConfig';
+import GitlabManager       from '../managers/GitlabManager';
 
 
 class Config {
-    public readonly localConfig: {
-        folder: string; sessionFile: string; stateFile: string;
-    };
+    public gitlabManager!: GitlabManager;
 
-    public readonly versionUpdateInformationPeriodHours: number;
+    public versionUpdateInformationPeriodHours!: number;
 
-    public readonly gitlab: {
+    public gitlab!: {
         cliReleasePage: string
         cliPreAlphaReleasePage: string
     };
 
-    public readonly login: {
+    public login!: {
         server: {
             port: number, route: string
         }, gitlab: {
@@ -23,51 +22,52 @@ class Config {
         }
     };
 
-    public readonly folders: {
+    public folders!: {
         defaultLocalExercise: string
     };
 
-    public readonly exercise: {
+    public exercise!: {
         neededFiles: Array<string>
     };
 
-    public interactiveMode: boolean;
+    public interactiveMode!: boolean;
 
-    constructor() {
-        this.localConfig = {
-            folder     : getAppDataPath('DojoCLI'),
-            sessionFile: process.env.LOCAL_CONFIG_FILE_SESSION || '',
-            stateFile  : process.env.LOCAL_CONFIG_STATE || ''
-        };
+    constructor() { }
+
+    async init(apiUrl: string) {
+        await ClientsSharedConfig.init(apiUrl);
+        const getEnvVar = ClientsSharedConfig.envVarGetter();
+
+        this.gitlabManager = new GitlabManager(ClientsSharedConfig.gitlab.URL, ClientsSharedConfig.login.gitlab.client.id, ClientsSharedConfig.login.gitlab.url.redirect, ClientsSharedConfig.login.gitlab.url.token);
 
-        this.versionUpdateInformationPeriodHours = Number(process.env.VERSION_UPDATE_INFORMATION_PERIOD_HOURS || 24);
+        this.versionUpdateInformationPeriodHours = Number(getEnvVar('VERSION_UPDATE_INFORMATION_PERIOD_HOURS', '24'));
 
         this.gitlab = {
-            cliReleasePage        : process.env.GITLAB_CLI_RELEASE_PAGE || '',
-            cliPreAlphaReleasePage: process.env.GITLAB_CLI_PREALPHA_RELEASE_PAGE || ''
+            cliReleasePage        : getEnvVar('GITLAB_CLI_RELEASE_PAGE', ''),
+            cliPreAlphaReleasePage: getEnvVar('GITLAB_CLI_PREALPHA_RELEASE_PAGE', '')
         };
 
         this.login = {
             server: {
-                port : Number(process.env.LOGIN_SERVER_PORT || 30992),
-                route: process.env.LOGIN_SERVER_ROUTE || ''
+                port : Number(getEnvVar('LOGIN_SERVER_PORT', '30992')),
+                route: getEnvVar('LOGIN_SERVER_ROUTE', '')
             },
             gitlab: {
                 url: {
-                    code: process.env.LOGIN_GITLAB_URL_CODE || ''
+                    code: getEnvVar('LOGIN_GITLAB_URL_CODE', '')
                 }
             }
         };
 
         this.folders = {
-            defaultLocalExercise: process.env.LOCAL_EXERCISE_DEFAULT_FOLDER || './'
+            defaultLocalExercise: getEnvVar('LOCAL_EXERCISE_DEFAULT_FOLDER', './')
         };
 
         this.exercise = {
-            neededFiles: JSON.parse(process.env.EXERCISE_NEEDED_FILES || '[]')
+            neededFiles: JSON.parse(getEnvVar('EXERCISE_NEEDED_FILES', '[]'))
         };
 
-        this.interactiveMode = process.env.INTERACTIVE_MODE === 'true';
+        this.interactiveMode = getEnvVar('INTERACTIVE_MODE', 'false') === 'true';
     }
 }
 
diff --git a/NodeApp/src/config/ConfigFiles.ts b/NodeApp/src/config/ConfigFiles.ts
index 9744e26..c92fb27 100644
--- a/NodeApp/src/config/ConfigFiles.ts
+++ b/NodeApp/src/config/ConfigFiles.ts
@@ -1,9 +1,28 @@
 import LocalConfigFile from './LocalConfigFile.js';
-import Config          from './Config.js';
+import getAppDataPath  from 'appdata-path';
 
 
-const sessionConfigFile = new LocalConfigFile(Config.localConfig.sessionFile);
-const stateConfigFile = new LocalConfigFile(Config.localConfig.stateFile);
+class ConfigFiles {
+    private localConfig: {
+        folder: string; sessionFile: string; stateFile: string;
+    };
 
+    public sessionConfigFile!: LocalConfigFile;
+    public stateConfigFile!: LocalConfigFile;
 
-export { sessionConfigFile, stateConfigFile };
\ No newline at end of file
+    constructor() {
+        this.localConfig = {
+            folder     : getAppDataPath('DojoCLI'),
+            sessionFile: process.env.LOCAL_CONFIG_FILE_SESSION ?? '',
+            stateFile  : process.env.LOCAL_CONFIG_FILE_STATE ?? ''
+        };
+    }
+
+    init() {
+        this.sessionConfigFile = new LocalConfigFile(this.localConfig.folder, this.localConfig.sessionFile);
+        this.stateConfigFile = new LocalConfigFile(this.localConfig.folder, this.localConfig.stateFile);
+    }
+}
+
+
+export default new ConfigFiles();
\ No newline at end of file
diff --git a/NodeApp/src/config/LocalConfigFile.ts b/NodeApp/src/config/LocalConfigFile.ts
index 29f62a6..996e6e1 100644
--- a/NodeApp/src/config/LocalConfigFile.ts
+++ b/NodeApp/src/config/LocalConfigFile.ts
@@ -1,26 +1,27 @@
 import * as fs from 'fs';
-import Config  from './Config.js';
 import JSON5   from 'json5';
 
 
 class LocalConfigFile {
+    private readonly folder: string;
     private readonly filename: string;
 
-    constructor(filename: string) {
+    constructor(folder: string, filename: string) {
+        this.folder = folder;
         this.filename = filename;
 
         this.loadConfig();
     }
 
     private get configPath(): string {
-        return `${ Config.localConfig.folder }/${ this.filename }`;
+        return `${ this.folder }/${ this.filename }`;
     }
 
     private _config: { [key: string]: unknown } = {};
 
     loadConfig() {
         if ( !fs.existsSync(this.configPath) ) {
-            fs.mkdirSync(Config.localConfig.folder, { recursive: true });
+            fs.mkdirSync(this.folder, { recursive: true });
 
             fs.writeFileSync(this.configPath, JSON5.stringify({}));
         }
-- 
GitLab