diff --git a/NodeApp/src/config/Config.ts b/NodeApp/src/config/Config.ts index 615a36942e83d11b0e63d3de6a89e8ff74944d5c..ec06f03df69177f359825ba44894ba81fa214995 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 9744e260e423d853a0fc25d81e106bb191e40a22..c92fb278f160ed71fb73c74b0f287e08a3ec2cce 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 29f62a6343defe952125d6e52b546fbd7f5e7057..996e6e19483fc1aad19c8317440b701cfac14105 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({})); }