From ba1d04abf0a685df7a7fa7de84b419baf2da1708 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Micha=C3=ABl=20Minelli?= <git@minelli.swiss>
Date: Fri, 11 Oct 2024 23:26:57 +0200
Subject: [PATCH] Config => Adapt to getEnvVar function

---
 AssignmentChecker/.env.vault                  |  6 +--
 AssignmentChecker/.idea/dataSources           |  1 +
 AssignmentChecker/config.env                  | 15 ++++++++
 AssignmentChecker/src/app.ts                  |  5 +++
 AssignmentChecker/src/config/Config.ts        | 37 +++++++++++++------
 AssignmentChecker/src/init.ts                 |  4 +-
 .../src/managers/GitlabManager.ts             |  6 +--
 AssignmentChecker/tsconfig.json               | 23 ++++++------
 8 files changed, 67 insertions(+), 30 deletions(-)
 create mode 120000 AssignmentChecker/.idea/dataSources
 create mode 100644 AssignmentChecker/config.env

diff --git a/AssignmentChecker/.env.vault b/AssignmentChecker/.env.vault
index 333e918..4635b62 100644
--- a/AssignmentChecker/.env.vault
+++ b/AssignmentChecker/.env.vault
@@ -4,11 +4,11 @@
 #/--------------------------------------------------/
 
 # development
-DOTENV_VAULT_DEVELOPMENT="wXBOtcsze+pmmGLl2aIrzqcQYvVWwO2wXyQW8rLrhdxDwU/10OfF49+nWmHxl8OVA3YrkHZ5UmdGbVyecwa+y6eH6pZv42MoP8MhkqXUVocnTAy86AqpLMeqj7/pTBae3UW+v4kZJnMCtsvPDnJKs/vuvAOBnXQbRB+SLCFpXtz+ZlQWqzKvxxakm60rrjazRQE9KiUVwFHPAKW+YdzdxXloaFP6Rzc3eCxRv6Je0C0QIiIs7MkuPqDNNF9J/5Yc+FKmzFaavVdlKBdxzzQ93FUbBFJzQ4bG6cEIutGkuKJtLRNOC7FR2M9tHMHb2q1csz5LmrqQ+HZd/qb8kTyuKGoKzjeEVEn4FK3tCQm6Qzbbw0Ktnzk7EsMT8E5hFa2bBx0XdDMUQzC7UYXS2BkIOP9JLrxStkMcwaCRAau+0nhbMdEynKHGubNtnQH0umY5TXtVC97huQjE09HtT0Ggx8VPiq3qE0gGYsa1y1c9LLV8ljQiUJDsUqri26QKu+iVJ/eIW4XSoEN+NgmDzEq8fd2rx6X0a9HcXDtpb3VX80FzZzwlvx+FUXOyrNY4WsQQTkwaPMpau8ppwSeQH1mjqNDAPNfR2cPv4mI8xE7Nz4XJAkC3/5H4rH511GrQ66ZyMpsTItOEOfX6gHabzdkqY4Vrv5ZYHVPzdh4+S+OAzuGR1wscxaZagHYrvi0/Hca/KX/d0mRWhFWCqD7tFV1w9cQasz0n2RDHIUMXYjO9ieBBPX/bQRbf4PW8MbxlVjtRrOJgrsi13Dn+UJI9m0V8DmQ4L/4+tmdI010e0/XA//IMiMKMLAM5EcXljy2et5ZscS1bejDaCsseKoN8BiYc3gtw93X8CGLHyr4m5F4Y+FcS02cts9QeQCVrBDgGBmZxYZSIxeg4sVNKgaXdbXKuhTctpwpKv4pIWyhGnm3yeXX4El3LZ3QtqpDwvnIk0JoNYCEnX2alQEfrl2LqIxMKgcyCir6pSkChuKov84oN1af1wfiJGt4NFfhRjR8oMjliY6dQB95HX+RS4A=="
+DOTENV_VAULT_DEVELOPMENT="Ar4+WxQJ+Cx4+ypVs8w+/OlT6sJ2UwqvvWuT9YcAufPxHgo1/YDyQpwS6CGNdsA5FEnhM9dyuodCw8Mjdi3N1m3VFjPPelfq5v4O3qZPAiuAkpwRkf/pD9kfZ5/b/EhrCIJzJopQQCE8c3TuF6y+IfSv+/stw+bx3LzCmG7JIsRPXPJBjIYmj4vvXHRwRsLlsY/F0Vc7P2FCvyk8s4+bUzHZwAt2oMDFP8Q348eJdZ4QyJZzMVQf5XE6SMqMtR3nMxvE5H/UhH7nv6yN87CElDKtzSh4jCQS55rdaX209y4D+ogn5PFniUsGb8SAM04Igiu7OMqcbDXMH6axAHm3jBf2onbUwRnbLLdkF0lBngSJsYouQkcDhHXmqio3xGrH/jBwSkJK2UXs76ZnVMlqSi7ny5Hc5rXNjpBQKJXLk88uaHfN9Osh5lkDIUF6we6zYzXXQJpy3+9DJVmyBxTyQUnb1ku8/ttPDlWAV0CNUmju4M1MJAIcQqwEbvJ5xRd6ia2LywGqlAmVOSSqSEf72W+RktqjsNop1OFHEY+oYPjUVq35H2qxJWPDf3Mja3iULhaRegcoT1N45Uu9GWl4EY2VWt2kTfYcbEMSdXj3mHJuvQEHdRGCD/HK52Gfa9WCaVoltR5NQ5G06/x1IRELCOjVoAjs9jhDwNnHTuxGLX6vUZX5RsOFnyvIhtX/LRMyAturYPODuw8ToPlHeZaQuVk8kMjfzSzCW2ixRkG79JWTHSBHhdJ/jQ3sFsby7c8u475rNc/ECeqOWRgjthjLf3JUnbjSQ5Y="
 
 # production
-DOTENV_VAULT_PRODUCTION="Rcz6CubfWYYhOvVAbYeVx+T7GLZH0eJ0s2Q27YSw826Cdy1T667ZxiW/mAByMuGO7hILoZDrpOzcRAXs0vV6h1yH7cF7ZPt1bip+Xbpowuz+ietTKEG2xQefwQCHi3n4hnU9mE5LYU/HKmux9NVwlTOJ990t9YKnzwvq3RlWSdLWqHqPTsRfCfcfss0SpSUiJ0IcvSb11JOmZaA+x2vcE9o3emPIirGa3Vctkrtj9LZ8ZCT60VeKGh2PAi5ZK4aekV/B3lTzenXXzht6ukGJrhvp7EZCCAfubrq4EKXZtFlzBqXjtK1Yspcnq3igY4Tyr7xry+wnPBHw0nlO8gBmG9nYWv0eNqDpf4r7p7K2zTk1RqDQB+avvjFhPvcpKIkpFQNimL+1bDNwI9v60gYH2hhn5vEZ2ILCaMeVlEfL9oQIiKtusJJon+6LcyykshpXSLqtmSm00A8h5eab4DpvCTk+ancvJzzuIxnX4b11xVtSChBxN9QGAsjN0O8SS6C+ZEybphUOiMHRS2deqKu65tF7+8sLnRf0WXWuaEZppuRv2wLft6Qaf09+JSCgtk4BXF/8vKBDNIO8Dnp3iQyShP+h29+BuNFzs4dpIvv51DBZ3uUEzBXdgm89eyRzr/xWueg1VqsEZ+ztDXCMRzN/aSg7DSv9V6TwKaKPyhSUeyfhbFfzr2OW145IUzFGEgtaM/8Yw4HWE+hqMbVL+tsp+Pz5fR1jb52+oQE5pibmTjNcQ2eivUid5A5kVD622tnC3h5+rV55wVIbKVJ/ZzunajA064LH6Alqx6sBJVhe4j3UwT/yuxAWqWiu/6bBloIx6bXxnOskpDddAfkXuQUk7DchABYMvAlko+O3OPE6fgx3bGNhC48fm5etbDlF92w6HUqCrpGHZ2xZkdGwwho4p9oUkE0QgPXBIgYUmYq4987PXrE="
+DOTENV_VAULT_PRODUCTION="Jc0E0rOwIHh1GduNwYWFwU8AYEmkNVK1IKErjPSlPrS5mKr7RpWZyC5297/q0Hvla0VkEvID5qzs04F9SufOWqXgLlFUPL/gizc1p9poHyV1EVQqD8BsV6prlma6z6Wu3DP3i5GfcHIcaZTMq8CBuWcSNoQs7OhJNpUhy0Mw3kJgk6EeLRQ11qNJBSFyLUB2LZ5Y065tQXxxCTPuC9FteyUSi4J8jxBTE8xW4Fy9Fi7+0e6yRFp92aS13qbJKunNeFF27DRIVdr8qpiXgTCovE2B7fJ7aiPe4CC37WB7mPXtxB2AxkHDi6uU6U/4TtNTCtkP9erQ7LKPReCsxg+U9EMmE5zesvxfYeBBkG2Ex9IaNfC7d8GBz60mlK5BtJd2cIF1MDkH5hS1t/ogRpi7t0WV6cWhFGakoz+vULqDVcrYYX7I9Wnw+sfMFOgjO5c1/SvZe8waNav3m7Ji/IFztWWu1d7UI0PdaK3sJBHN/G01+La9S0WInGl2yPFoPQrPEEn0DusEFC6ISeezTwdNdzCmf28/PEag8ghfXj1c11Egrwfwjo2x6d/Qy6/0tqXlPSwdUqAZ5o/xwIjpa5JtUxKlxwEEEbc8oOIBnsKglWSlbOpkb8J+ITXjk7Q/y6uf6ey7LprYtIO8rOovQLtwfppMS441WoIVpKB6FAmfmPYqabz5vQzdWz3RGZKG87un"
 
 # test
-DOTENV_VAULT_TEST="1OLBaEdDI49XBdJOU8NyqevOHbM9PhUYmtRXRTdxeJL9WtSU/kp1gk8bmDlUoUe5tGnzZDuu3O9GEMyp+c5VQquaWsj5vH9+m1GRPwf5UbKETHvHfrGEknytjMahZF5kAydDnp1DZHWRYpG/KBgC2UvN3/jUP4xkDdmpt+iDUIjV7Uto5Lw6B6iWEu5i5eaye9SiPjtouMzyHoAUNP3ViCI0pB/H/8yOUYiWVNtZs/88MUN+QAtekBWfeRQ+nDSYsJMQ0JwD6eDlxSuJ9HkXRGwzIISsHUd/7qFh3dAjQRJZDAjEezcrw2QoCliaxWcnhu6POmZUfJTQYj+g6hSK3Hpv780o+BYIXLyvXJoKdvLiUQyElyibgOYOzPTwuDWTA3MbM3660Sjpbf+ZvukFS3nnKJmv7eH61/UFTbZMAR78Fy1WUD5qwZYxp61W8NGWaoGqwWOe30ZyLWDZH3M9aNarp7U4rjizcvfFiUfUo+9CyPlgk05hT+cklaoqdckNjAPzlwoOdng34bSfBvpjAtCCyS8vH5RPtw4KerEESO7/8bqUEf/YIyFHYcUitUPVSgXJnuyysqrTmPq5TPiBezwRquBMvTW46KMQTrnk4+6bKxd+Mqev16rW1UsMJqlEM35cSMjKaxPa7LT0KuGvkcVqpHHdypdvQtZ0PlTlmTutuqNwqmBfEPRZqnSOKVirlL159A1fZIOof6mWy4lzQe1f/AQb9vIL5K8QjHHZ0MJt2lZG/vlZRpXcVWegZyYUQOXKjLgijuozjg09xOakhLPncjM1Krgr70d7f0zN/OFTjcaBPIKOSAf3vDrpSetQyZTNDWl9+vB+J0/b+nbwx0Wv5D8Il2rMfnvLpg=="
+DOTENV_VAULT_TEST="Uby3FPI51CVAoTBVItqiAewUKWWVgK5t5OF5JpkzWFqREtJMrIp8UKQdh1mBOkf5Le4Xt55Sy0wtCY/VjZg+qDWfJE61Sw35Ba+zZa11gbJJEFeEZC59/sVikIK+wKRCuw/k39c1Kb8EDBXwzxLkMFGeBTlAfYjNvua+svAmwKo9JhQrOPMLCO7KmZgLd5GJLJsLiHhTZLOOJKEHbjJ1XSct2IxQ4H9PulWqF9BlGj+xthko6Tl+Y1+xmxP+AKC0pCTGaKU9tdQQDW007jeBJEk2BN8lhgAmfyOHKHA9WAoDndG8nFMckVjN+x52OD8dRat20Z0i/rJbfhuN9Mc2Sqvz/4ztJM94vKjI+TPX5msc2VVavRPCEaAAHoFhKyDK7E9OiSD4hdYJPaehZg0cfV+Lmg9e+FE3UX9LVjJxqTNw40FtNyGHl4UsrbbTiPhK2EB02rD6j99y1JizMaoC5h0Qj5f0gDUlxNQi3lLT5r4jR2pjxPr8SOjOiE0j99xuIlr/UbW/hS6fLMfEERD3deJhieOpF20ESe3e3dFnDkVWpPjVeWVMMhgad+jHS2RGoy87n3KaJML1VJpiDBNQeM1ndmYhcqK6ULmPwcPgeg+X"
 
diff --git a/AssignmentChecker/.idea/dataSources b/AssignmentChecker/.idea/dataSources
new file mode 120000
index 0000000..dad593a
--- /dev/null
+++ b/AssignmentChecker/.idea/dataSources
@@ -0,0 +1 @@
+jetbrainsConfiguration/dataSources/
\ No newline at end of file
diff --git a/AssignmentChecker/config.env b/AssignmentChecker/config.env
new file mode 100644
index 0000000..924ad2d
--- /dev/null
+++ b/AssignmentChecker/config.env
@@ -0,0 +1,15 @@
+########################### Node env vars
+NODE_ENV=production
+
+
+########################### App env vars
+APP_NAME='DOJO ASSIGNMENT CHECKER'
+
+ASSIGNMENT_FILENAME=dojo_assignment.json
+ASSIGNMENT_NEEDED_FILES='["${ASSIGNMENT_FILENAME}", "docker-compose.yml"]'
+
+LOGS_FOLDER=logs
+EXERCISE_RESULTS_VOLUME=$CI_PROJECT_DIR/Results_of_exercise_$DOJO_EXERCISE_ID/
+EXERCISE_RESULTS_FILENAME=results.json
+
+DOCKER_COMPOSE_PROJECT_NAME=dojo
\ No newline at end of file
diff --git a/AssignmentChecker/src/app.ts b/AssignmentChecker/src/app.ts
index 6f6db64..fa0d5ce 100644
--- a/AssignmentChecker/src/app.ts
+++ b/AssignmentChecker/src/app.ts
@@ -6,9 +6,14 @@ import Styles                        from './types/Style.js';
 import HttpManager                   from './managers/HttpManager.js';
 import Config                        from './config/Config.js';
 import Icon                          from './shared/types/Icon.js';
+import SharedAssignmentHelper        from './shared/helpers/Dojo/SharedAssignmentHelper';
 
 
 (async () => {
+    await Config.init();
+
+    SharedAssignmentHelper.init(Config.gitlabManager);
+
     HttpManager.registerAxiosInterceptor();
 
     console.log(Styles.APP_NAME(`${ Config.appName } (version {{VERSION}})`));
diff --git a/AssignmentChecker/src/config/Config.ts b/AssignmentChecker/src/config/Config.ts
index 94cb8b6..729deac 100644
--- a/AssignmentChecker/src/config/Config.ts
+++ b/AssignmentChecker/src/config/Config.ts
@@ -1,34 +1,47 @@
-import fs   from 'fs-extra';
-import path from 'path';
+import fs                  from 'fs-extra';
+import path                from 'path';
+import GitlabManager       from '../managers/GitlabManager';
+import ClientsSharedConfig from '../sharedByClients/config/ClientsSharedConfig';
 
 
 class Config {
-    public readonly appName: string;
+    public gitlabManager!: GitlabManager;
 
-    public readonly folders: {
+    public appName!: string;
+
+    public folders!: {
         project: string; resultsVolume: string; resultsDojo: string; resultsExercise: string;
     };
 
-    public readonly dockerhub: {
+    public dockerhub!: {
         repositories: {
             assignmentChecker: string
         }
     };
 
-    constructor() {
-        this.appName = process.env.APP_NAME || '';
+    constructor() { }
+
+    async init() {
+        const apiUrl = process.env.API_URL ?? '';
+
+        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.appName = getEnvVar('APP_NAME', '');
 
         this.folders = {
-            project        : process.env.PROJECT_FOLDER?.convertWithEnvVars() ?? './',
-            resultsVolume  : process.env.EXERCISE_RESULTS_VOLUME?.convertWithEnvVars() ?? '',
-            resultsDojo    : path.join(process.env.EXERCISE_RESULTS_VOLUME?.convertWithEnvVars() ?? '', 'Dojo/'),
-            resultsExercise: path.join(process.env.EXERCISE_RESULTS_VOLUME?.convertWithEnvVars() ?? '', 'Exercise/')
+            project        : getEnvVar('PROJECT_FOLDER', './').convertWithEnvVars(),
+            resultsVolume  : getEnvVar('EXERCISE_RESULTS_VOLUME', '').convertWithEnvVars(),
+            resultsDojo    : path.join(getEnvVar('EXERCISE_RESULTS_VOLUME', '').convertWithEnvVars(), 'Dojo/'),
+            resultsExercise: path.join(getEnvVar('EXERCISE_RESULTS_VOLUME', '').convertWithEnvVars(), 'Exercise/')
         };
         this.resetResultsVolume();
 
         this.dockerhub = {
             repositories: {
-                assignmentChecker: process.env.DOCKERHUB_ASSIGNMENT_CHECKER_REPOSITORY || ''
+                assignmentChecker: getEnvVar('DOCKERHUB_ASSIGNMENT_CHECKER_REPOSITORY', '')
             }
         };
     }
diff --git a/AssignmentChecker/src/init.ts b/AssignmentChecker/src/init.ts
index 8c19f91..4920df1 100644
--- a/AssignmentChecker/src/init.ts
+++ b/AssignmentChecker/src/init.ts
@@ -7,4 +7,6 @@ import './shared/helpers/TypeScriptExtensions.js';
 dotenvExpand.expand(dotenv.config({
                                       path      : path.join(__dirname, '../.env'),
                                       DOTENV_KEY: 'dotenv://:key_f1778b6998874f6fd78c716ccef982c5595fa300f174b129eafc88ba7044d69b@dotenv.local/vault/.env.vault?environment=development'
-                                  }));
\ No newline at end of file
+                                  }));
+
+dotenvExpand.expand(dotenv.config({ path: path.join(__dirname, '../config.env') }));
\ No newline at end of file
diff --git a/AssignmentChecker/src/managers/GitlabManager.ts b/AssignmentChecker/src/managers/GitlabManager.ts
index 2228dec..142662c 100644
--- a/AssignmentChecker/src/managers/GitlabManager.ts
+++ b/AssignmentChecker/src/managers/GitlabManager.ts
@@ -4,10 +4,10 @@ import SharedGitlabManager from '../shared/managers/SharedGitlabManager.js';
 // File present only for prevent errors from shared submodules
 
 class GitlabManager extends SharedGitlabManager {
-    constructor() {
-        super('');
+    constructor(public gitlabUrl: string, clientId?: string, urlRedirect?: string, urlToken?: string) {
+        super(gitlabUrl, '', clientId, urlRedirect, urlToken);
     }
 }
 
 
-export default new GitlabManager();
\ No newline at end of file
+export default GitlabManager;
\ No newline at end of file
diff --git a/AssignmentChecker/tsconfig.json b/AssignmentChecker/tsconfig.json
index 96fb474..bdd2d43 100644
--- a/AssignmentChecker/tsconfig.json
+++ b/AssignmentChecker/tsconfig.json
@@ -1,18 +1,18 @@
 {
     "compilerOptions": {
-        "rootDir"         : "src",
-        "outDir"          : "dist",
-        "strict"          : true,
-        "target"          : "ES2022",
-        "module"          : "commonjs",
-        "sourceMap"       : true,
-        "noImplicitAny"   : true,
-        "esModuleInterop" : true,
-        "lib"             : [
+        "rootDir"        : "src",
+        "outDir"         : "dist",
+        "strict"         : true,
+        "target"         : "ES2022",
+        "module"         : "commonjs",
+        "sourceMap"      : true,
+        "noImplicitAny"  : true,
+        "esModuleInterop": true,
+        "lib"            : [
             "ES2022",
             "DOM"
         ],
-        "types"           : [
+        "types"          : [
             "node"
         ]
     },
@@ -20,6 +20,7 @@
         "node_modules"
     ],
     "include"        : [
-        "src/**/*.ts"
+        "src/**/*.ts",
+        "eslint.config.mjs"
     ]
 }
\ No newline at end of file
-- 
GitLab