aboutsummaryrefslogtreecommitdiff
path: root/cli/do-install.php
diff options
context:
space:
mode:
Diffstat (limited to 'cli/do-install.php')
-rwxr-xr-xcli/do-install.php182
1 files changed, 101 insertions, 81 deletions
diff --git a/cli/do-install.php b/cli/do-install.php
index 2d73c2e98..77acc58ed 100755
--- a/cli/do-install.php
+++ b/cli/do-install.php
@@ -7,74 +7,91 @@ if (file_exists(DATA_PATH . '/applied_migrations.txt')) {
fail('FreshRSS seems to be already installed!' . "\n" . 'Please use `./cli/reconfigure.php` instead.', EXIT_CODE_ALREADY_EXISTS);
}
-$parameters = [
- 'long' => [
- 'environment' => ':',
- 'base-url' => ':',
- 'language' => ':',
- 'title' => ':',
- 'default-user' => ':',
- 'allow-anonymous' => '',
- 'allow-anonymous-refresh' => '',
- 'auth-type' => ':',
- 'api-enabled' => '',
- 'allow-robots' => '',
- 'disable-update' => '',
- 'db-type' => ':',
- 'db-host' => ':',
- 'db-user' => ':',
- 'db-password' => ':',
- 'db-base' => ':',
- 'db-prefix' => '::',
- ],
- 'short' => [],
- 'deprecated' => [
- 'base-url' => 'base_url',
- 'default-user' => 'default_user',
- 'allow-anonymous' => 'allow_anonymous',
- 'allow-anonymous-refresh' => 'allow_anonymous_refresh',
- 'auth-type' => 'auth_type',
- 'api-enabled' => 'api_enabled',
- 'allow-robots' => 'allow_robots',
- 'disable-update' => 'disable_update',
- ],
-];
-
-$configParams = [
- 'environment' => 'environment',
- 'base-url' => 'base_url',
- 'language' => 'language',
- 'title' => 'title',
- 'default-user' => 'default_user',
- 'allow-anonymous' => 'allow_anonymous',
- 'allow-anonymous-refresh' => 'allow_anonymous_refresh',
- 'auth-type' => 'auth_type',
- 'api-enabled' => 'api_enabled',
- 'allow-robots' => 'allow_robots',
- 'disable-update' => 'disable_update',
-];
-
-$dBconfigParams = [
- 'db-type' => 'type',
- 'db-host' => 'host',
- 'db-user' => 'user',
- 'db-password' => 'password',
- 'db-base' => 'base',
- 'db-prefix' => 'prefix',
-];
-
-$options = parseCliParams($parameters);
+$cliOptions = new class extends CliOptionsParser {
+ public string $defaultUser;
+ public string $environment;
+ public string $baseUrl;
+ public string $language;
+ public string $title;
+ public bool $allowAnonymous;
+ public bool $allowAnonymousRefresh;
+ public string $authType;
+ public bool $apiEnabled;
+ public bool $allowRobots;
+ public bool $disableUpdate;
+ public string $dbType;
+ public string $dbHost;
+ public string $dbUser;
+ public string $dbPassword;
+ public string $dbBase;
+ public string $dbPrefix;
+
+ public function __construct() {
+ $this->addRequiredOption('defaultUser', (new CliOption('default-user'))->deprecatedAs('default_user'));
+ $this->addOption('environment', (new CliOption('environment')));
+ $this->addOption('baseUrl', (new CliOption('base-url'))->deprecatedAs('base_url'));
+ $this->addOption('language', (new CliOption('language')));
+ $this->addOption('title', (new CliOption('title')));
+ $this->addOption(
+ 'allowAnonymous',
+ (new CliOption('allow-anonymous'))->withValueOptional('true')->deprecatedAs('allow_anonymous')->typeOfBool()
+ );
+ $this->addOption(
+ 'allowAnonymousRefresh',
+ (new CliOption('allow-anonymous-refresh'))->withValueOptional('true')->deprecatedAs('allow_anonymous_refresh')->typeOfBool()
+ );
+ $this->addOption('authType', (new CliOption('auth-type'))->deprecatedAs('auth_type'));
+ $this->addOption(
+ 'apiEnabled',
+ (new CliOption('api-enabled'))->withValueOptional('true')->deprecatedAs('api_enabled')->typeOfBool()
+ );
+ $this->addOption(
+ 'allowRobots',
+ (new CliOption('allow-robots'))->withValueOptional('true')->deprecatedAs('allow_robots')->typeOfBool()
+ );
+ $this->addOption(
+ 'disableUpdate',
+ (new CliOption('disable-update'))->withValueOptional('true')->deprecatedAs('disable_update')->typeOfBool()
+ );
+ $this->addOption('dbType', (new CliOption('db-type')));
+ $this->addOption('dbHost', (new CliOption('db-host')));
+ $this->addOption('dbUser', (new CliOption('db-user')));
+ $this->addOption('dbPassword', (new CliOption('db-password')));
+ $this->addOption('dbBase', (new CliOption('db-base')));
+ $this->addOption('dbPrefix', (new CliOption('db-prefix'))->withValueOptional());
+ parent::__construct();
+ }
+};
-if (!empty($options['invalid']) || empty($options['valid']['default-user']) || !is_string($options['valid']['default-user'])) {
- fail('Usage: ' . basename(__FILE__) . " --default-user admin ( --auth-type form" .
- " --environment production --base-url https://rss.example.net --allow-robots" .
- " --language en --title FreshRSS --allow-anonymous --allow-anonymous-refresh --api-enabled" .
- " --db-type mysql --db-host localhost:3306 --db-user freshrss --db-password dbPassword123" .
- " --db-base freshrss --db-prefix freshrss_ --disable-update )");
+if (!empty($cliOptions->errors)) {
+ fail('FreshRSS error: ' . array_shift($cliOptions->errors) . "\n" . $cliOptions->usage);
}
fwrite(STDERR, 'FreshRSS install…' . "\n");
+$values = [
+ 'default_user' => $cliOptions->defaultUser ?? null,
+ 'environment' => $cliOptions->environment ?? null,
+ 'base_url' => $cliOptions->baseUrl ?? null,
+ 'language' => $cliOptions->language ?? null,
+ 'title' => $cliOptions->title ?? null,
+ 'allow_anonymous' => $cliOptions->allowAnonymous ?? null,
+ 'allow_anonymous_refresh' => $cliOptions->allowAnonymousRefresh ?? null,
+ 'auth_type' => $cliOptions->authType ?? null,
+ 'api_enabled' => $cliOptions->apiEnabled ?? null,
+ 'allow_robots' => $cliOptions->allowRobots ?? null,
+ 'disable_update' => $cliOptions->disableUpdate ?? null,
+];
+
+$dbValues = [
+ 'type' => $cliOptions->dbType ?? null,
+ 'host' => $cliOptions->dbHost ?? null,
+ 'user' => $cliOptions->dbUser ?? null,
+ 'password' => $cliOptions->dbPassword ?? null,
+ 'base' => $cliOptions->dbBase ?? null,
+ 'prefix' => $cliOptions->dbPrefix ?? null,
+];
+
$config = array(
'salt' => generateSalt(),
'db' => FreshRSS_Context::systemConf()->db,
@@ -88,10 +105,26 @@ if (file_exists($customConfigPath)) {
}
}
-foreach ($configParams as $param => $configParam) {
- if (isset($options['valid'][$param])) {
- $isFlag = $parameters['long'][$param] === '';
- $config[$configParam] = $isFlag ? true : $options['valid'][$param];
+foreach ($values as $name => $value) {
+ if ($value !== null) {
+ switch ($name) {
+ case 'default_user':
+ if (!FreshRSS_user_Controller::checkUsername($value)) {
+ fail('FreshRSS invalid default username! default_user must be ASCII alphanumeric');
+ }
+ break;
+ case 'environment':
+ if (!in_array($value, ['development', 'production', 'silent'], true)) {
+ fail('FreshRSS invalid environment! environment must be one of { development, production, silent }');
+ }
+ break;
+ case 'auth_type':
+ if (!in_array($value, ['form', 'http_auth', 'none'], true)) {
+ fail('FreshRSS invalid authentication method! auth_type must be one of { form, http_auth, none }');
+ }
+ break;
+ }
+ $config[$name] = $value;
}
}
@@ -99,23 +132,10 @@ if ((!empty($config['base_url'])) && is_string($config['base_url']) && Minz_Requ
$config['pubsubhubbub_enabled'] = true;
}
-foreach ($dBconfigParams as $dBparam => $configDbParam) {
- if (isset($options['valid'][$dBparam])) {
- $config['db'][$configDbParam] = $options['valid'][$dBparam];
- }
-}
+$config['db'] = array_merge($config['db'], array_filter($dbValues));
performRequirementCheck($config['db']['type']);
-if (!FreshRSS_user_Controller::checkUsername($options['valid']['default-user'])) {
- fail('FreshRSS error: invalid default username “' . $options['valid']['default-user']
- . '”! Must be matching ' . FreshRSS_user_Controller::USERNAME_PATTERN);
-}
-
-if (isset($options['valid']['auth-type']) && !in_array($options['valid']['auth-type'], ['form', 'http_auth', 'none'], true)) {
- fail('FreshRSS invalid authentication method (auth-type must be one of { form, http_auth, none })');
-}
-
if (file_put_contents(join_path(DATA_PATH, 'config.php'),
"<?php\n return " . var_export($config, true) . ";\n") === false) {
fail('FreshRSS could not write configuration file!: ' . join_path(DATA_PATH, 'config.php'));