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..2d079769 --- /dev/null +++ b/helpers/ConfigurationValidator.php @@ -0,0 +1,84 @@ += 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'] . ')'); + } + } +}