From ef8deb53b508b2ef2f01f4fb0c408d764c5e3a01 Mon Sep 17 00:00:00 2001 From: Dennis Heinrich Date: Tue, 26 Nov 2024 00:09:50 +0100 Subject: [PATCH] Added validation for existence of fields #3 --- source/Services/Configuration.ts | 59 ++++++++++++++++++-------------- 1 file changed, 34 insertions(+), 25 deletions(-) diff --git a/source/Services/Configuration.ts b/source/Services/Configuration.ts index 0f203be..693e17b 100644 --- a/source/Services/Configuration.ts +++ b/source/Services/Configuration.ts @@ -3,17 +3,25 @@ import IApplicationConfiguration from "../Interfaces/Configuration/IApplicationC import IConfiguration from "../Interfaces/Configuration/IConfiguration"; import ITranslation from "../Interfaces/Configuration/ITranslation"; import Logging from "./Logging"; +import {Logger} from "winston"; export default class Configuration implements IConfiguration{ + private readonly logger: Logger; public readonly discord: IDiscordConfiguration; public readonly application: IApplicationConfiguration; public readonly translation: ITranslation; constructor() { - let config = require('../../config.json'); - this.discord = config.discord; - this.application = config.application; - this.translation = config.translation; + this.logger = Logging.getLogger(); + try { + let config = require('../../config.json'); + this.discord = config.discord; + this.application = config.application; + this.translation = config.translation; + } catch (exception) { + this.logger.error("Error while loading configuration file, please check if the configuration file exists and is valid."); + process.exit(1); + } } /** @@ -39,7 +47,7 @@ export default class Configuration implements IConfiguration{ * @private */ private validateDiscordConfiguration(): boolean { - return !(this.isValueEmptyOrUndefined(this.discord.botToken) || this.isValueEmptyOrUndefined(this.discord.channelId)); + return !(this.isValueEmptyOrUndefined(this.discord?.botToken) || this.isValueEmptyOrUndefined(this.discord?.channelId)); } /** @@ -48,10 +56,10 @@ export default class Configuration implements IConfiguration{ */ private validateApplicationConfiguration(): boolean { return !( - this.isValueUndefined(this.application.serverPassword) - || this.isValueEmptyOrUndefined(this.application.serverStatsUrl) - || this.isValueEmptyOrUndefined(this.application.serverMapUrl) - || this.isValueEmptyOrUndefined(this.application.updateIntervalSeconds) + this.isValueUndefined(this.application?.serverPassword) + || this.isValueEmptyOrUndefined(this.application?.serverStatsUrl) + || this.isValueEmptyOrUndefined(this.application?.serverMapUrl) + || this.isValueEmptyOrUndefined(this.application?.updateIntervalSeconds) ); } @@ -61,15 +69,15 @@ export default class Configuration implements IConfiguration{ */ private validateTranslationConfiguration(): boolean { return !( - this.isValueEmptyOrUndefined(this.translation.discordEmbed.title) - || this.isValueEmptyOrUndefined(this.translation.discordEmbed.descriptionOnline) - || this.isValueEmptyOrUndefined(this.translation.discordEmbed.descriptionOffline) - || this.isValueEmptyOrUndefined(this.translation.discordEmbed.descriptionUnknown) - || this.isValueEmptyOrUndefined(this.translation.discordEmbed.titleServerName) - || this.isValueEmptyOrUndefined(this.translation.discordEmbed.titleServerPassword) - || this.isValueEmptyOrUndefined(this.translation.discordEmbed.titleServerTime) - || this.isValueEmptyOrUndefined(this.translation.discordEmbed.titlePlayerCount) - || this.isValueEmptyOrUndefined(this.translation.discordEmbed.noPlayersOnline) + this.isValueEmptyOrUndefined(this?.translation?.discordEmbed?.title) + || this.isValueEmptyOrUndefined(this?.translation?.discordEmbed?.descriptionOnline) + || this.isValueEmptyOrUndefined(this?.translation?.discordEmbed?.descriptionOffline) + || this.isValueEmptyOrUndefined(this?.translation?.discordEmbed?.descriptionUnknown) + || this.isValueEmptyOrUndefined(this?.translation?.discordEmbed?.titleServerName) + || this.isValueEmptyOrUndefined(this?.translation?.discordEmbed?.titleServerPassword) + || this.isValueEmptyOrUndefined(this?.translation?.discordEmbed?.titleServerTime) + || this.isValueEmptyOrUndefined(this?.translation?.discordEmbed?.titlePlayerCount) + || this.isValueEmptyOrUndefined(this?.translation?.discordEmbed?.noPlayersOnline) ); } @@ -78,24 +86,25 @@ export default class Configuration implements IConfiguration{ * @returns boolean True if the configuration is valid */ public isConfigurationValid(): boolean { - const logger = Logging.getLogger(); if(!this.validateDiscordConfiguration()) { - logger.info("Discord configuration is not valid. Please check your configuration file."); + this.logger.error("Discord configuration is not valid. Please check your configuration file."); return false; } else { - logger.info("Discord configuration is valid."); + this.logger.info("Discord configuration is valid."); } + if(!this.validateApplicationConfiguration()) { - logger.info("Application configuration is not valid. Please check your configuration file."); + this.logger.error("Application configuration is not valid. Please check your configuration file."); return false; } else { - logger.info("Application configuration is valid."); + this.logger.info("Application configuration is valid."); } + if(!this.validateTranslationConfiguration()) { - logger.info("Translation configuration is not valid. Please check your configuration file."); + this.logger.error("Translation configuration is not valid. Please check your configuration file."); return false; } else { - logger.info("Translation configuration is valid."); + this.logger.info("Translation configuration is valid."); } return true; }