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

---
 ExerciseChecker/.env.vault                    |  6 +--
 ExerciseChecker/.idea/dataSources             |  1 +
 ExerciseChecker/config.env                    | 15 +++++++
 ExerciseChecker/src/app.ts                    |  5 +++
 ExerciseChecker/src/config/Config.ts          | 41 ++++++++++++-------
 ExerciseChecker/src/init.ts                   |  4 +-
 ExerciseChecker/src/managers/GitlabManager.ts |  6 +--
 7 files changed, 56 insertions(+), 22 deletions(-)
 create mode 120000 ExerciseChecker/.idea/dataSources
 create mode 100644 ExerciseChecker/config.env

diff --git a/ExerciseChecker/.env.vault b/ExerciseChecker/.env.vault
index ffac033..a910a9c 100644
--- a/ExerciseChecker/.env.vault
+++ b/ExerciseChecker/.env.vault
@@ -4,11 +4,11 @@
 #/--------------------------------------------------/
 
 # development
-DOTENV_VAULT_DEVELOPMENT="ISxiALlYWFJ0K1lyVqzvD8pIH4oSGofqrPkMd5Krwoh8haYUOtNXJ8KjDH3rKjNcvh5qAoBjj9RXkIDCHOeSs0xPBo3kUt9APjlMRYV4/o+KrItn8kmKWaR0oUFYQfsj7a8CJQILekfqpqGA/HCc149PXdywwEzV00uxlzyhvc4ggheigCDpOSM4X7QBHKIGMFSDpO8avaYiTaEWyzpaGbS4a2sfV391thhAUACJnI8lipG/0CsIF65p+fhDGHWHqAtyW+/Kh2mle0MBtbVHMUbN0JSEx+llBpcldjZV216nz+BHHF0YV9rFRHujn6ta4uCCH55SFEoXbiZUa8zkRg/vbDDfBSZxOaY5Ddm6rP5UXqyx4e7FMglBKksefdxqMN5YQTJLcxfc0DL8IS37sSK4JX5p4gHfqIoDdSdPA2YBVG1o9/wv4Yx8NWaJAIFYvjbr/BYZSXyaDcRhIOEZXT2V3z3eVtNjp3MOMKu1osn1FPrG5pbVp9jS8q1SE8SGMxkRwQ5iWpL8EClfI2b1Xt2sokmct1xXJ08ods9YW2eFf7rnG9j9lW8op9fTxMNbcRJ951A+uaPDaOilVOjSXtZBFke/zJFxTAmC9A25c5EXYzStlmp7Ywn8TZldfkyOAtpRbMaqz1K/fnuf1fWnhf91+Dl2eRNsbxkYtc+grc+7LEQEWeZkrx3SpCIqXrvb+vrGn3GbPvtnymxjRzqsszqFeeB0T9kVLjWZC0OCioIW8LKD3tW3oJHJMRp0ySuUuhWj0K3H3W/4x4PETWgrFi/QbjbL6hmM0iqes2AQalh/+eQ3TnONEoFObSQiqkZSMD5Q/TbTbdto2ByqUQ9ZyKg6hvbjjkefLx5gyJoF5WC8Tf3uZhrSHfnp0cECE5ZRJUY3+mu/HSFuDCvpsRO0GukCp8oSOKgKjIn826PhGcrD8F6BvevhT+kE2o1ziGouSN6ymd61BgmlzB+CJ9unv4pkjr3vC7/czvN6GUQUD49Ff0WJ63pMaIjP2PnTtscsOhjML6Ug873PD+8FuECIgBnS+b+n/G9ljFFaY4nrHpWc7Cq/tSf6X+RSn/qgFjXwJPKj0w+8Fg0="
+DOTENV_VAULT_DEVELOPMENT="9Kto4weA8WuuwXasgBAZTF5IiVEFxsl4PZpRqeLgIrfBrlhwMqDfrXq/E006zDg31/GePPa0VxwkWIkSIg4j6UrWzCdJHaYRQsiivjmcBmWk0cetgMb4A+TXfHKvL1KS5esgNuh0Tr3K9LXXFOZkYNDF9e/Mki7Qp1iTIj01q0TulzCwsooC/W+GgN9OL4ckmmnhjoy4bGw+fePln3SJ6vdVD4133GPczN6tmezfRA36f0cq9UUM01xQEe7FYps/GdH6NDc0cgRKXKJTT8ynCJTiBp5j8cMBzufNd6z4azhHo5F5cTmFONhEZ1rC6UXvpm2uRp2oHP7mvGOjwJri6Fd7fLWG3V5fwWKlpsBX/UZJix2VyuS7xOj2vgoKZ4SIZFPXGtkvIicsqLJsplYl80kswNLZxDo8u1gaKhVBalLSZ9AfciKUelg0R8eGMR9MrnXLyJHbrs6Z5vSZIsT6sAMf1oX/mmEWjtQBoCDxtXn3L2mAbKummGZuEJ2EY+nJD18L0zLwlPY1He0BOtAu0gJKOe3l9ohGMD4AoDa3qCOriMUK97Nma1hZoTv5DgPawXTqMJDNFVeB7pI8RH06ISIS2r/RToHmLI9ipgSEdvamzFMtexuWFylim+gzKj04Dboc3EgDYLRp/uMyeMxvF6mSivjKds358hDQLh+ZGQrt4Crt6vI8m8J0pZTMoTdxfWWuk6sp"
 
 # production
-DOTENV_VAULT_PRODUCTION="+ftDTpuEySxt+n5fooD6Bae5BXB4AZxuF3MtNUr8BFKIk/jT6b3a7Bklv6uVK89wQ80JMbguVCqGBygCqqo75NYfyY9Q2kC8AFKTB29ruG5P4FCe7rssf01qqSLHY1cxIi7MBq/oA/KJhgadJwsk0K+DKpM0qphsPSsyAABmApq6BFQmOdFPlXLsltMIanapBIOkU24Eo8NkIKUp90MHXA10Qike3BQv8IY0LqW5ofMcWUvTr3bvhOQlU5kObzbEHxuH/zDxh8hqJEZshoHXFnFxksoqV/g3e3wpPYGV3VixaQp4bI8HvBJkyp8MbNWrTnMapbN4FuuUc+cuoMB59YwqxlVGc4PCKDymeTJa0yoKPRrYeJQdcqenti71nXtGyYwdMFU/rdPomqHWSMQ/1wHGzHZWCbC1pHfJtRuxHiHNB8Em6Oh7J61swpGdJjGbcA06EC3u/6U3NqdkCXTay89mwUPoD5Y3QxJ6cXyZdIMRmrUQOVJagFfMMlz51dmm2+4nyicY7B/RkRVDoi75F4UkOcY6EgVmHmhQnYJ1dKhMhnRnNJziEJdnzypzX1KQUoZAflMTkHZFJSWDas4nztLbc71M0N0aq2Z1+5DENK3PdozyhzK4/j3bil06cbvKYfa//ta3w4GNbntr2Oa87G1hG6mDSZj26GmXsgKkmHwV78VZAosrWRxIizQdvZLD5XCzU10LQJSHOfVGpL56wf+xzuWZxAXfzcU6cgit60kAgjmoLhTvek/uz6BtkPFamkwdejVbijbHfq54InTPJthfCqlLdmsp1oHYh36MG6VrQK6Tn9UF6Pf9hC+rguvAGb0McSy0oBEGzD24MohjAcizLw=="
+DOTENV_VAULT_PRODUCTION="j0IU/R5Y1RPdYBzAiK9YVto9RMM7BxqSMoON2N1Hio+7r8eK3P4pIYB/UX40NS0LLU6gT+ivJteaHmuv2SrmBUmmn3Ro+KtCcGjJ2ei/ElHlulYaRuIkFSoI4pCpJfZE/n/IB64TACo2F4G0sbYYoPCgAzVfVB1xT5fNQL1k060ZCEBddwxfpVoOJVf8qLeANpUhJqcZEW5oS0ZQYyAFGE/e9i4t3J81rYDQAzzTU2oKmPG6eg/5dzx8ZvitQpa93RKLNKaSXxyYl9KQhWFgUIn4MQsVfcSB2dprXw3nc1x/IVFQqciPkJ4rTpON1KtmTA=="
 
 # test
-DOTENV_VAULT_TEST="6XT3ZXsH9nBjG6qQCS+B3s/yn8J2dQctOUp+3Duu9QA4bK0iimACc57JjtRnUNYrWOHGz6jYbc4ouNC5kzhUF1Dq1dPtG0vnbqqmWe0ShUbQQjpY4V2SqvBOdDD7wfXSr0pRER81ZJkyMZPoYF8qCc9sWngZDy8PGrDs5E04sC4f+tfQO2Yv/i7TUJUxSxzwAZHS4OXZeZ/AwDbrEaEPHfCSyM/QodYMBd3YokqYpNdHhrMPhDzXmL9CBievvk9FqsLmxs1mKk43w3hiGQP7ngmOJZXYp1sQfWN2eJNXXpBDbecHyOfbwaHAul2uHk8nOCtZ1HISLetXv/r+Lb6YUf1lyms4yyK5gNO+e4H0etVkZxThKBs8woMTpICwRI+YxKvbdjwcTuNaRsmtIvARNErILW7fSyamBkxh0augsI9gWCphl0H81wExhO/23aqncLgnlD3I6KpWvKdjl4q/KHNyXvD7kFXv+NQFfv2OuCdqauOvOurQtNKkpIilsFQhF8vIgTzUJadEBodDVjB8OZOsNb6tb3XMeisxNfod5vUsJ0iYrYCxe+Lv+6B9uPpLX8VbLMs7FaTb82ZotuekF9GeeaWE6hDLdoj8swd1vx9QOQq1qcvgCZSvmcwSY8t2dSSSNGwwa6aCJiu+DEgZKUxbgbb2PL2RrE/ov66nYdZq16CfI2V+i+MXwznehlr0p56dIfFr5c9j9c5ZwspvsmU04PqmDyGP6xdCbJZeKYeiuG5gB1uk96LUcgU7HpNwiNd4yvdvyRO3InJm"
+DOTENV_VAULT_TEST="a73sDZfILBBZTjedG41eXLeXVNd+kl7RV8KfvCggl9tSNFgzoPV7fkAx5AMkH6eJSU0oM8GNCWWcvUQHIgt65gzcCFsMIW7MZsIwaWuU/ObmRj/LlwqJs6ZyMBvVqcZ3Tu8Ndt6s94Aiwm10/qBMFKqHXGvWmvIjeFVGqSVoReLxfENPJzkRvpvhTjwMZ/txfbdoE3EZhhSvnt/jy8WoZaKaagX9g4oOxmhgp8FzoTXL/9yW5iuUSkxXfaGynKi/rw9xVqq3YnJkyl0GwyM2yUqE6Ty+rvscclejCNy23v7bf7QF7qpNTiFU/+uR5mRoReAvVQ=="
 
diff --git a/ExerciseChecker/.idea/dataSources b/ExerciseChecker/.idea/dataSources
new file mode 120000
index 0000000..dad593a
--- /dev/null
+++ b/ExerciseChecker/.idea/dataSources
@@ -0,0 +1 @@
+jetbrainsConfiguration/dataSources/
\ No newline at end of file
diff --git a/ExerciseChecker/config.env b/ExerciseChecker/config.env
new file mode 100644
index 0000000..ab8d6b7
--- /dev/null
+++ b/ExerciseChecker/config.env
@@ -0,0 +1,15 @@
+########################### Node env vars
+NODE_ENV=production
+
+
+########################### App env vars
+APP_NAME='DOJO EXERCISE CHECKER'
+
+# 10MB
+EXERCISE_RESULTS_FOLDER_MAX_SIZE_IN_BYTES=10000000
+
+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/ExerciseChecker/src/app.ts b/ExerciseChecker/src/app.ts
index 5bacb02..d813a4d 100644
--- a/ExerciseChecker/src/app.ts
+++ b/ExerciseChecker/src/app.ts
@@ -16,6 +16,7 @@ import ExerciseAssignment                   from './sharedByClients/models/Exerc
 import ClientsSharedExerciseHelper          from './sharedByClients/helpers/Dojo/ClientsSharedExerciseHelper.js';
 import Icon                                 from './shared/types/Icon.js';
 import path                                 from 'node:path';
+import SharedAssignmentHelper               from './shared/helpers/Dojo/SharedAssignmentHelper';
 
 
 let exerciseAssignment: ExerciseAssignment | undefined;
@@ -168,6 +169,10 @@ async function displayResults() {
 
 
 (async () => {
+    await Config.init();
+
+    SharedAssignmentHelper.init(Config.gitlabManager);
+
     HttpManager.registerAxiosInterceptor();
 
     console.log(Styles.APP_NAME(`${ Config.appName } (version {{VERSION}})`));
diff --git a/ExerciseChecker/src/config/Config.ts b/ExerciseChecker/src/config/Config.ts
index db117f5..94e4e68 100644
--- a/ExerciseChecker/src/config/Config.ts
+++ b/ExerciseChecker/src/config/Config.ts
@@ -1,43 +1,54 @@
-import fs   from 'fs-extra';
-import path from 'path';
+import fs                  from 'fs-extra';
+import path                from 'path';
+import ClientsSharedConfig from '../sharedByClients/config/ClientsSharedConfig';
+import GitlabManager       from '../managers/GitlabManager';
 
 
 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 exercise: {
+    public exercise!: {
         id: string; secret: string;
     };
 
-    public readonly dockerhub: {
+    public dockerhub!: {
         repositories: {
             exerciseChecker: string
         }
     };
 
-    constructor() {
-        this.appName = process.env.APP_NAME ?? '';
+    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.exercise = {
-            id    : process.env.DOJO_EXERCISE_ID ?? '',
-            secret: process.env.DOJO_SECRET ?? ''
+            id    : getEnvVar('DOJO_EXERCISE_ID', ''),
+            secret: getEnvVar('DOJO_SECRET', '')
         };
 
         this.dockerhub = {
             repositories: {
-                exerciseChecker: process.env.DOCKERHUB_EXERCISE_CHECKER_REPOSITORY ?? ''
+                exerciseChecker: getEnvVar('DOCKERHUB_EXERCISE_CHECKER_REPOSITORY', '')
             }
         };
     }
diff --git a/ExerciseChecker/src/init.ts b/ExerciseChecker/src/init.ts
index cffc433..221146a 100644
--- a/ExerciseChecker/src/init.ts
+++ b/ExerciseChecker/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_bebfddf18e3dd9a0bafafe0e383313f75add1da6fbe41ea5fde51f37ef1776aa@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/ExerciseChecker/src/managers/GitlabManager.ts b/ExerciseChecker/src/managers/GitlabManager.ts
index 2228dec..142662c 100644
--- a/ExerciseChecker/src/managers/GitlabManager.ts
+++ b/ExerciseChecker/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
-- 
GitLab