aboutsummaryrefslogtreecommitdiff
path: root/cli
diff options
context:
space:
mode:
authorGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2019-03-31 16:38:46 +0200
committerGravatar GitHub <noreply@github.com> 2019-03-31 16:38:46 +0200
commitd413f67dd28738f4a6d8cf036e00714737f757b8 (patch)
tree1509f631dc8814bcf85d907a292ddd6437a2efcd /cli
parent8dcdde6251ae4dfc690b1a014488df125c5e5cdc (diff)
parent2a935516d850d63a215f9650b96ede102311f7ca (diff)
Merge pull request #2298 from FreshRSS/dev1.14.0
FreshRSS 1.14.0
Diffstat (limited to 'cli')
-rw-r--r--cli/_cli.php25
-rw-r--r--cli/_update-or-create-user.php2
-rwxr-xr-xcli/actualize-user.php10
-rwxr-xr-xcli/db-optimize.php10
-rwxr-xr-xcli/delete-user.php10
-rwxr-xr-xcli/do-install.php6
-rwxr-xr-xcli/export-opml-for-user.php10
-rwxr-xr-xcli/export-zip-for-user.php12
-rw-r--r--cli/i18n/ignore/kr.php16
-rw-r--r--cli/i18n/ignore/zh-cn.php4
-rwxr-xr-xcli/import-for-user.php12
-rwxr-xr-xcli/list-users.php2
-rwxr-xr-xcli/reconfigure.php8
-rwxr-xr-xcli/user-info.php79
14 files changed, 147 insertions, 59 deletions
diff --git a/cli/_cli.php b/cli/_cli.php
index e8fb6ae42..dec244bc3 100644
--- a/cli/_cli.php
+++ b/cli/_cli.php
@@ -3,6 +3,9 @@ if (php_sapi_name() !== 'cli') {
die('FreshRSS error: This PHP script may only be invoked from command line!');
}
+const REGEX_INPUT_OPTIONS = '/^--/';
+const REGEX_PARAM_OPTIONS = '/:*$/';
+
require(__DIR__ . '/../constants.php');
require(LIB_PATH . '/lib_rss.php'); //Includes class autoloader
require(LIB_PATH . '/lib_install.php');
@@ -64,3 +67,25 @@ function performRequirementCheck($databaseType) {
fail($message);
}
}
+
+function getLongOptions($options, $regex) {
+ $longOptions = array_filter($options, function($a) use ($regex) {
+ return preg_match($regex, $a);
+ });
+ return array_map(function($a) use ($regex) {
+ return preg_replace($regex, '', $a);
+ }, $longOptions);
+}
+
+function validateOptions($input, $params) {
+ $sanitizeInput = getLongOptions($input, REGEX_INPUT_OPTIONS);
+ $sanitizeParams = getLongOptions($params, REGEX_PARAM_OPTIONS);
+ $unknownOptions = array_diff($sanitizeInput, $sanitizeParams);
+
+ if (0 === count($unknownOptions)) {
+ return true;
+ }
+
+ fwrite(STDERR, sprintf("FreshRSS error: unknown options: %s\n", implode (', ', $unknownOptions)));
+ return false;
+}
diff --git a/cli/_update-or-create-user.php b/cli/_update-or-create-user.php
index a5960b58a..eda597f19 100644
--- a/cli/_update-or-create-user.php
+++ b/cli/_update-or-create-user.php
@@ -22,7 +22,7 @@ if (!$isUpdate) {
$options = getopt('', $params);
-if (empty($options['user'])) {
+if (!validateOptions($argv, $params) || empty($options['user'])) {
fail('Usage: ' . basename($_SERVER['SCRIPT_FILENAME']) .
" --user username ( --password 'password' --api_password 'api_password'" .
" --language en --email user@example.net --token 'longRandomString'" .
diff --git a/cli/actualize-user.php b/cli/actualize-user.php
index dd07fc142..08e17de98 100755
--- a/cli/actualize-user.php
+++ b/cli/actualize-user.php
@@ -2,11 +2,13 @@
<?php
require(__DIR__ . '/_cli.php');
-$options = getopt('', array(
- 'user:',
- ));
+$params = array(
+ 'user:',
+);
-if (empty($options['user'])) {
+$options = getopt('', $params);
+
+if (!validateOptions($argv, $params) || empty($options['user'])) {
fail('Usage: ' . basename(__FILE__) . " --user username");
}
diff --git a/cli/db-optimize.php b/cli/db-optimize.php
index 39dc97638..bd0623a48 100755
--- a/cli/db-optimize.php
+++ b/cli/db-optimize.php
@@ -2,11 +2,13 @@
<?php
require(__DIR__ . '/_cli.php');
-$options = getopt('', array(
- 'user:',
- ));
+$params = array(
+ 'user:',
+);
-if (empty($options['user'])) {
+$options = getopt('', $params);
+
+if (!validateOptions($argv, $params) || empty($options['user'])) {
fail('Usage: ' . basename(__FILE__) . " --user username");
}
diff --git a/cli/delete-user.php b/cli/delete-user.php
index 30cc31754..ab02dfdbf 100755
--- a/cli/delete-user.php
+++ b/cli/delete-user.php
@@ -2,11 +2,13 @@
<?php
require(__DIR__ . '/_cli.php');
-$options = getopt('', array(
- 'user:',
- ));
+$params = array(
+ 'user:',
+);
-if (empty($options['user'])) {
+$options = getopt('', $params);
+
+if (!validateOptions($argv, $params) || empty($options['user'])) {
fail('Usage: ' . basename(__FILE__) . " --user username");
}
$username = $options['user'];
diff --git a/cli/do-install.php b/cli/do-install.php
index 7435ab9f1..fd5aa4a3c 100755
--- a/cli/do-install.php
+++ b/cli/do-install.php
@@ -31,10 +31,10 @@ $dBparams = array(
$options = getopt('', array_merge($params, $dBparams));
-if (empty($options['default_user'])) {
+if (!validateOptions($argv, array_merge($params, $dBparams)) || empty($options['default_user'])) {
fail('Usage: ' . basename(__FILE__) . " --default_user admin ( --auth_type form" .
- " --environment production --base_url https://rss.example.net" .
- " --language en --title FreshRSS --allow_anonymous --api_enabled" .
+ " --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 )");
}
diff --git a/cli/export-opml-for-user.php b/cli/export-opml-for-user.php
index 076cffe74..8e7ed08f7 100755
--- a/cli/export-opml-for-user.php
+++ b/cli/export-opml-for-user.php
@@ -2,11 +2,13 @@
<?php
require(__DIR__ . '/_cli.php');
-$options = getopt('', array(
- 'user:',
- ));
+$params = array(
+ 'user:',
+);
-if (empty($options['user'])) {
+$options = getopt('', $params);
+
+if (!validateOptions($argv, $params) || empty($options['user'])) {
fail('Usage: ' . basename(__FILE__) . " --user username > /path/to/file.opml.xml");
}
diff --git a/cli/export-zip-for-user.php b/cli/export-zip-for-user.php
index 86113d9fa..b89a55104 100755
--- a/cli/export-zip-for-user.php
+++ b/cli/export-zip-for-user.php
@@ -2,12 +2,14 @@
<?php
require(__DIR__ . '/_cli.php');
-$options = getopt('', array(
- 'user:',
- 'max-feed-entries:',
- ));
+$params = array(
+ 'user:',
+ 'max-feed-entries:',
+);
-if (empty($options['user'])) {
+$options = getopt('', $params);
+
+if (!validateOptions($argv, $params) || empty($options['user'])) {
fail('Usage: ' . basename(__FILE__) . " --user username ( --max-feed-entries 100 ) > /path/to/file.zip");
}
diff --git a/cli/i18n/ignore/kr.php b/cli/i18n/ignore/kr.php
index 24cfbc86a..bbccb2d7d 100644
--- a/cli/i18n/ignore/kr.php
+++ b/cli/i18n/ignore/kr.php
@@ -8,6 +8,18 @@ return array(
'conf.sharing.shaarli',
'conf.sharing.twitter',
'conf.sharing.wallabag',
+ 'gen.date.Apr',
+ 'gen.date.Aug',
+ 'gen.date.Dec',
+ 'gen.date.Feb',
+ 'gen.date.Jan',
+ 'gen.date.Jul',
+ 'gen.date.Jun',
+ 'gen.date.Mar',
+ 'gen.date.May',
+ 'gen.date.Nov',
+ 'gen.date.Oct',
+ 'gen.date.Sep',
'gen.lang.cz',
'gen.lang.de',
'gen.lang.en',
@@ -17,6 +29,7 @@ return array(
'gen.lang.it',
'gen.lang.kr',
'gen.lang.nl',
+ 'gen.lang.oc',
'gen.lang.pt-br',
'gen.lang.ru',
'gen.lang.tr',
@@ -29,8 +42,11 @@ return array(
'gen.share.g+',
'gen.share.gnusocial',
'gen.share.jdh',
+ 'gen.share.linkedin',
'gen.share.mastodon',
'gen.share.movim',
+ 'gen.share.pinboard',
+ 'gen.share.pocket',
'gen.share.shaarli',
'gen.share.twitter',
'gen.share.wallabag',
diff --git a/cli/i18n/ignore/zh-cn.php b/cli/i18n/ignore/zh-cn.php
index c00ac79d3..d55071d10 100644
--- a/cli/i18n/ignore/zh-cn.php
+++ b/cli/i18n/ignore/zh-cn.php
@@ -18,6 +18,7 @@ return array(
'gen.lang.it',
'gen.lang.kr',
'gen.lang.nl',
+ 'gen.lang.oc',
'gen.lang.pt-br',
'gen.lang.ru',
'gen.lang.tr',
@@ -29,8 +30,11 @@ return array(
'gen.share.g+',
'gen.share.gnusocial',
'gen.share.jdh',
+ 'gen.share.linkedin',
'gen.share.mastodon',
'gen.share.movim',
+ 'gen.share.pinboard',
+ 'gen.share.pocket',
'gen.share.shaarli',
'gen.share.twitter',
'gen.share.wallabag',
diff --git a/cli/import-for-user.php b/cli/import-for-user.php
index 95ff18c8c..7c66fbef2 100755
--- a/cli/import-for-user.php
+++ b/cli/import-for-user.php
@@ -2,12 +2,14 @@
<?php
require(__DIR__ . '/_cli.php');
-$options = getopt('', array(
- 'user:',
- 'filename:',
- ));
+$params = array(
+ 'user:',
+ 'filename:',
+);
-if (empty($options['user']) || empty($options['filename'])) {
+$options = getopt('', $params);
+
+if (!validateOptions($argv, $params) || empty($options['user']) || empty($options['filename'])) {
fail('Usage: ' . basename(__FILE__) . " --user username --filename /path/to/file.ext");
}
diff --git a/cli/list-users.php b/cli/list-users.php
index 758bbdb46..b3ce9936f 100755
--- a/cli/list-users.php
+++ b/cli/list-users.php
@@ -13,3 +13,5 @@ if (FreshRSS_Context::$system_conf->default_user !== ''
foreach ($users as $user) {
echo $user, "\n";
}
+
+done();
diff --git a/cli/reconfigure.php b/cli/reconfigure.php
index cfe713fa8..84073b70e 100755
--- a/cli/reconfigure.php
+++ b/cli/reconfigure.php
@@ -27,6 +27,14 @@ $dBparams = array(
$options = getopt('', array_merge($params, $dBparams));
+if (!validateOptions($argv, array_merge($params, $dBparams))) {
+ 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 )");
+}
+
fwrite(STDERR, 'Reconfiguring FreshRSS…' . "\n");
$config = Minz_Configuration::get('system');
diff --git a/cli/user-info.php b/cli/user-info.php
index 043bebf7c..aa4db7c2f 100755
--- a/cli/user-info.php
+++ b/cli/user-info.php
@@ -2,19 +2,46 @@
<?php
require(__DIR__ . '/_cli.php');
-$options = getopt('h', array(
- 'user:',
- ));
+const DATA_FORMAT = "%-7s | %-20s | %-25s | %-15s | %-10s | %-10s | %-10s | %-10s | %-10s | %-10s\n";
+
+$params = array(
+ 'user:',
+ 'header',
+);
+$options = getopt('h', $params);
+
+if (!validateOptions($argv, $params)) {
+ fail('Usage: ' . basename(__FILE__) . ' (-h --header --user username --user username …)');
+}
if (empty($options['user'])) {
- fail('Usage: ' . basename(__FILE__) . " -h --user username");
+ $users = listUsers();
+} elseif (is_array($options['user'])) {
+ $users = $options['user'];
+} else {
+ $users = array($options['user']);
}
-$users = $options['user'] === '*' ? listUsers() : array($options['user']);
+sort($users);
+
+if (array_key_exists('header', $options)) {
+ printf(
+ DATA_FORMAT,
+ 'default',
+ 'user',
+ 'last update',
+ 'space used',
+ 'categories',
+ 'feeds',
+ 'reads',
+ 'unreads',
+ 'favourites',
+ 'tags'
+ );
+}
foreach ($users as $username) {
$username = cliInitUser($username);
- echo $username === FreshRSS_Context::$system_conf->default_user ? '*' : ' ', "\t";
$catDAO = FreshRSS_Factory::createCategoryDao();
$feedDAO = FreshRSS_Factory::createFeedDao($username);
@@ -25,29 +52,23 @@ foreach ($users as $username) {
$nbEntries = $entryDAO->countUnreadRead();
$nbFavorites = $entryDAO->countUnreadReadFavorites();
+ $data = array(
+ 'default' => $username === FreshRSS_Context::$system_conf->default_user ? '*' : '',
+ 'user' => $username,
+ 'lastUpdate' => FreshRSS_UserDAO::mtime($username),
+ 'spaceUsed' => $databaseDAO->size(),
+ 'categories' => $catDAO->count(),
+ 'feeds' => count($feedDAO->listFeedsIds()),
+ 'reads' => $nbEntries['read'],
+ 'unreads' => $nbEntries['unread'],
+ 'favourites' => $nbFavorites['all'],
+ 'tags' => $tagDAO->count(),
+ );
if (isset($options['h'])) { //Human format
- echo
- $username, "\t",
- date('c', FreshRSS_UserDAO::mtime($username)), "\t",
- format_bytes($databaseDAO->size()), "\t",
- $catDAO->count(), " categories\t",
- count($feedDAO->listFeedsIds()), " feeds\t",
- $nbEntries['read'], " reads\t",
- $nbEntries['unread'], " unreads\t",
- $nbFavorites['all'], " favourites\t",
- $tagDAO->count(), " tags\t",
- "\n";
- } else {
- echo
- $username, "\t",
- FreshRSS_UserDAO::mtime($username), "\t",
- $databaseDAO->size(), "\t",
- $catDAO->count(), "\t",
- count($feedDAO->listFeedsIds()), "\t",
- $nbEntries['read'], "\t",
- $nbEntries['unread'], "\t",
- $nbFavorites['all'], "\t",
- $tagDAO->count(), "\t",
- "\n";
+ $data['lastUpdate'] = date('c', $data['lastUpdate']);
+ $data['spaceUsed'] = format_bytes($data['spaceUsed']);
}
+ vprintf(DATA_FORMAT, $data);
}
+
+done();