diff --git a/app.php b/app.php index 8176ebec..2a586885 100644 --- a/app.php +++ b/app.php @@ -12,6 +12,7 @@ require_once __DIR__ . '/vendor/autoload.php'; // Load config files require_once GROCY_DATAPATH . '/config.php'; require_once __DIR__ . '/config-dist.php'; // For not in own config defined values we use the default ones +require_once __DIR__ . '/helpers/ConfigurationValidator.php'; // Definitions for dev/demo/prerelease mode if ((GROCY_MODE === 'dev' || GROCY_MODE === 'demo' || GROCY_MODE === 'prerelease') && !defined('GROCY_USER_ID')) @@ -31,6 +32,16 @@ if (GROCY_DISABLE_AUTH === true) define('GROCY_SHOW_AUTH_VIEWS', false); } +// Check if any invalid entries in config.php have been made +try +{ + (new ConfigurationValidator())->validateConfig(); +} +catch (EInvalidConfig $ex) +{ + exit('Invalid setting in config.php: ' . $ex->getMessage()); +} + // Setup base application AppFactory::setContainer(new DI\Container()); $app = AppFactory::create(); diff --git a/helpers/ConfigurationValidator.php b/helpers/ConfigurationValidator.php new file mode 100644 index 00000000..f3d6ec19 --- /dev/null +++ b/helpers/ConfigurationValidator.php @@ -0,0 +1,87 @@ += 0 && GROCY_CALENDAR_FIRST_DAY_OF_WEEK <= 6))) + { + throw new EInvalidConfig('Invalid value for CALENDAR_FIRST_DAY_OF_WEEK'); + } + } + + private function checkCurrencyFormat() + { + if (!(preg_match("/^([A-z]){3}$/", GROCY_CURRENCY))) + { + throw new EInvalidConfig('CURRENCY is not in ISO 4217 format (three letter code)'); + } + } + + private function checkEntryPage() + { + $allowedPages = ["stock", "shoppinglist", "recipes", "chores", "tasks", "batteries", "equipment", "calendar", "mealplan"]; + if (!in_array(GROCY_ENTRY_PAGE, $allowedPages)) + { + throw new EInvalidConfig('Invalid entry page "' . GROCY_ENTRY_PAGE . '" set, only ' . implode(", ", $allowedPages) . " allowed"); + } + } + + private function checkMealplanFirstDayOfWeek() + { + if (!(GROCY_MEAL_PLAN_FIRST_DAY_OF_WEEK == "" || + (is_numeric(GROCY_MEAL_PLAN_FIRST_DAY_OF_WEEK) &&GROCY_MEAL_PLAN_FIRST_DAY_OF_WEEK >= 0 && GROCY_MEAL_PLAN_FIRST_DAY_OF_WEEK <= 6))) + { + throw new EInvalidConfig('Invalid value for MEAL_PLAN_FIRST_DAY_OF_WEEK'); + } + } + + + private function checkAutoNightModeRange() + { + global $GROCY_DEFAULT_USER_SETTINGS; + if (!(preg_match("/^(?:2[0-3]|[01][0-9]):[0-5][0-9]$/", $GROCY_DEFAULT_USER_SETTINGS["auto_night_mode_time_range_from"]))) + { + throw new EInvalidConfig('auto_night_mode_time_range_from is not in HH:mm format ('.$GROCY_DEFAULT_USER_SETTINGS["auto_night_mode_time_range_from"].')'); + } + if (!(preg_match("/^(?:2[0-3]|[01][0-9]):[0-5][0-9]$/", $GROCY_DEFAULT_USER_SETTINGS["auto_night_mode_time_range_to"]))) + { + throw new EInvalidConfig('auto_night_mode_time_range_to is not in HH:mm format ('.$GROCY_DEFAULT_USER_SETTINGS["auto_night_mode_time_range_to"].')'); + } + } + +}