Skip to content
Snippets Groups Projects
Select Git revision
  • bafe246c68af1fc8ab2492b89f1d91de6f3db659
  • master default protected
2 results

fmpi_ctx.c

Blame
  • Config.ts 3.11 KiB
    import ClientsSharedConfig from '../sharedByClients/config/ClientsSharedConfig';
    import GitlabManager       from '../managers/GitlabManager';
    import ConfigFiles         from './ConfigFiles';
    import inquirer            from 'inquirer';
    
    
    class Config {
        readonly INTERACTIVE_MODE_CONFIG_KEY = 'interactiveMode';
    
        public gitlabManager!: GitlabManager;
    
        public versionUpdateInformationPeriodHours!: number;
    
        public gitlab!: {
            cliReleasePage: string
            cliPreAlphaReleasePage: string
        };
    
        public login!: {
            server: {
                port: number, route: string
            }, gitlab: {
                url: {
                    code: string
                }
            }
        };
    
        public folders!: {
            defaultLocalExercise: string
        };
    
        public exercise!: {
            neededFiles: Array<string>
        };
    
        public interactiveMode!: boolean;
    
        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(getEnvVar('VERSION_UPDATE_INFORMATION_PERIOD_HOURS', '24'));
    
            this.gitlab = {
                cliReleasePage        : getEnvVar('GITLAB_CLI_RELEASE_PAGE', ''),
                cliPreAlphaReleasePage: getEnvVar('GITLAB_CLI_PREALPHA_RELEASE_PAGE', '')
            };
    
            this.login = {
                server: {
                    port : Number(getEnvVar('LOGIN_SERVER_PORT', '30992')),
                    route: getEnvVar('LOGIN_SERVER_ROUTE', '')
                },
                gitlab: {
                    url: {
                        code: getEnvVar('LOGIN_GITLAB_URL_CODE', '')
                    }
                }
            };
    
            this.folders = {
                defaultLocalExercise: getEnvVar('LOCAL_EXERCISE_DEFAULT_FOLDER', './')
            };
    
            this.exercise = {
                neededFiles: JSON.parse(getEnvVar('EXERCISE_NEEDED_FILES', '[]'))
            };
    
            const interactiveMode: boolean | null = ConfigFiles.stateConfigFile.getParam(this.INTERACTIVE_MODE_CONFIG_KEY) as boolean | null;
            this.interactiveMode = interactiveMode == null ? await this.askInteractiveMode() : interactiveMode;
        }
    
        setInteractiveMode(state: boolean) {
            ConfigFiles.stateConfigFile.setParam(this.INTERACTIVE_MODE_CONFIG_KEY, state);
        }
    
        async askInteractiveMode(): Promise<boolean> {
            const state: boolean = (await inquirer.prompt({
                                                              name   : 'state',
                                                              message: 'An interactive mode is available. Do you want to enable it by default ?',
                                                              type   : 'confirm',
                                                              default: true
                                                          })).state;
    
            this.setInteractiveMode(state);
    
            return state;
        }
    }
    
    
    export default new Config();