diff --git a/ExpressAPI/src/config/Config.ts b/ExpressAPI/src/config/Config.ts index 369959d7aee3655af4733916a95f5060df10002a..beab7cc8a1cc89ed8e148766c2e1207d62a1ec8d 100644 --- a/ExpressAPI/src/config/Config.ts +++ b/ExpressAPI/src/config/Config.ts @@ -5,7 +5,9 @@ import { Exercise } from '../types/DatabaseTypes'; import JSON5 from 'json5'; -type ConfigGitlabBadge = { link: string, imageUrl: string } +type ConfigGitlabBadge = { + link: string, imageUrl: string +} class Config { @@ -13,7 +15,11 @@ class Config { port: number }; - public readonly requestClientValidation: { version: { [client: string]: string } }; // { version: { CLIENT: CONDITION } } + public readonly requestClientValidation: { + version: { + [client: string]: string + } + }; // { version: { CLIENT: CONDITION } } public readonly jwtConfig: { secret: string; expiresIn: number; @@ -28,15 +34,27 @@ class Config { }; public readonly gitlab: { - urls: Array<string>; account: { id: number; username: string; token: string; }; group: { root: number; templates: number; assignments: number; exercises: number; }, badges: { pipeline: ConfigGitlabBadge } + urls: Array<string>; repository: { + timeoutAfterCreation: number; + }; account: { + id: number; username: string; token: string; + }; group: { + root: number; templates: number; assignments: number; exercises: number; + }, badges: { + pipeline: ConfigGitlabBadge + } }; public readonly assignment: { - default: { description: string; initReadme: boolean; sharedRunnersEnabled: boolean; visibility: string; wikiEnabled: boolean; template: string }; baseFiles: Array<string>; filename: string + default: { + description: string; initReadme: boolean; sharedRunnersEnabled: boolean; visibility: string; wikiEnabled: boolean; template: string + }; baseFiles: Array<string>; filename: string }; public readonly exercise: { - maxSameName: number; resultsFolder: string, pipelineResultsFolder: string; default: { description: string; visibility: string; }; + maxSameName: number; resultsFolder: string, pipelineResultsFolder: string; default: { + description: string; visibility: string; + }; }; constructor() { @@ -47,8 +65,7 @@ class Config { this.requestClientValidation = JSON5.parse(process.env.REQUEST_CLIENT_VALIDATION || '{"version": {}}'); this.jwtConfig = { - secret : process.env.JWT_SECRET_KEY || '', - expiresIn: Number(process.env.SESSION_TIMEOUT || 0) + secret: process.env.JWT_SECRET_KEY || '', expiresIn: Number(process.env.SESSION_TIMEOUT || 0) }; this.login = { @@ -60,46 +77,29 @@ class Config { }; this.gitlab = { - urls : JSON5.parse(process.env.GITLAB_URLS || '[]'), - account: { - id : Number(process.env.GITLAB_DOJO_ACCOUNT_ID || 0), - username: process.env.GITLAB_DOJO_ACCOUNT_USERNAME || '', - token : process.env.GITLAB_DOJO_ACCOUNT_TOKEN || '' - }, - group : { - root : Number(process.env.GITLAB_GROUP_ROOT_ID || 0), - templates : Number(process.env.GITLAB_GROUP_TEMPLATES_ID || 0), - assignments: Number(process.env.GITLAB_GROUP_ASSIGNMENTS_ID || 0), - exercises : Number(process.env.GITLAB_GROUP_EXERCISES_ID || 0) - }, - badges : { + urls : JSON5.parse(process.env.GITLAB_URLS || '[]'), account: { + id: Number(process.env.GITLAB_DOJO_ACCOUNT_ID || 0), username: process.env.GITLAB_DOJO_ACCOUNT_USERNAME || '', token: process.env.GITLAB_DOJO_ACCOUNT_TOKEN || '' + }, repository: { + timeoutAfterCreation: Number(process.env.GITLAB_REPOSITORY_CREATION_TIMEOUT || 5000) + }, group : { + root: Number(process.env.GITLAB_GROUP_ROOT_ID || 0), templates: Number(process.env.GITLAB_GROUP_TEMPLATES_ID || 0), assignments: Number(process.env.GITLAB_GROUP_ASSIGNMENTS_ID || 0), exercises: Number(process.env.GITLAB_GROUP_EXERCISES_ID || 0) + }, badges : { pipeline: { - link : process.env.GITLAB_BADGE_PIPELINE_LINK || '', - imageUrl: process.env.GITLAB_BADGE_PIPELINE_IMAGE_URL || '' + link: process.env.GITLAB_BADGE_PIPELINE_LINK || '', imageUrl: process.env.GITLAB_BADGE_PIPELINE_IMAGE_URL || '' } } }; this.assignment = { - default : { - description : process.env.ASSIGNMENT_DEFAULT_DESCRIPTION?.convertWithEnvVars() ?? '', - initReadme : process.env.ASSIGNMENT_DEFAULT_INIT_README?.toBoolean() ?? false, - sharedRunnersEnabled: process.env.ASSIGNMENT_DEFAULT_SHARED_RUNNERS_ENABLED?.toBoolean() ?? true, - visibility : process.env.ASSIGNMENT_DEFAULT_VISIBILITY || GitlabVisibility.PRIVATE, - wikiEnabled : process.env.ASSIGNMENT_DEFAULT_WIKI_ENABLED?.toBoolean() ?? false, - template : process.env.ASSIGNMENT_DEFAULT_TEMPLATE?.replace('{{USERNAME}}', this.gitlab.account.username).replace('{{TOKEN}}', this.gitlab.account.token) ?? '' - }, - baseFiles: JSON5.parse(process.env.ASSIGNMENT_BASE_FILES || '[]'), - filename : process.env.ASSIGNMENT_FILENAME || '' + default : { + description: process.env.ASSIGNMENT_DEFAULT_DESCRIPTION?.convertWithEnvVars() ?? '', initReadme: process.env.ASSIGNMENT_DEFAULT_INIT_README?.toBoolean() ?? false, sharedRunnersEnabled: process.env.ASSIGNMENT_DEFAULT_SHARED_RUNNERS_ENABLED?.toBoolean() ?? true, visibility: process.env.ASSIGNMENT_DEFAULT_VISIBILITY || GitlabVisibility.PRIVATE, wikiEnabled: process.env.ASSIGNMENT_DEFAULT_WIKI_ENABLED?.toBoolean() ?? false, template: process.env.ASSIGNMENT_DEFAULT_TEMPLATE?.replace('{{USERNAME}}', this.gitlab.account.username).replace('{{TOKEN}}', this.gitlab.account.token) ?? '' + }, baseFiles: JSON5.parse(process.env.ASSIGNMENT_BASE_FILES || '[]'), filename: process.env.ASSIGNMENT_FILENAME || '' }; this.exercise = { - maxSameName : Number(process.env.EXERCISE_MAX_SAME_NAME || 0), - resultsFolder : process.env.EXERCISE_RESULTS_FOLDER?.convertWithEnvVars() ?? '', - pipelineResultsFolder: process.env.EXERCISE_PIPELINE_RESULTS_FOLDER ?? '', //Do not use convertWithEnvVars() because it is used in the exercise creation and muste be interpreted at exercise runtime - default : { - description: process.env.EXERCISE_DEFAULT_DESCRIPTION?.convertWithEnvVars() ?? '', - visibility : process.env.EXERCISE_DEFAULT_VISIBILITY || GitlabVisibility.PRIVATE + maxSameName: Number(process.env.EXERCISE_MAX_SAME_NAME || 0), resultsFolder: process.env.EXERCISE_RESULTS_FOLDER?.convertWithEnvVars() ?? '', pipelineResultsFolder: process.env.EXERCISE_PIPELINE_RESULTS_FOLDER ?? '', //Do not use convertWithEnvVars() because it is used in the exercise creation and muste be interpreted at exercise runtime + default : { + description: process.env.EXERCISE_DEFAULT_DESCRIPTION?.convertWithEnvVars() ?? '', visibility: process.env.EXERCISE_DEFAULT_VISIBILITY || GitlabVisibility.PRIVATE } }; }