aboutsummaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorGravatar Alexis Degrugillier <aledeg@users.noreply.github.com> 2020-06-14 19:50:09 +0200
committerGravatar GitHub <noreply@github.com> 2020-06-14 19:50:09 +0200
commitcaeb660f29d13db62d5381c262aa03e12f201ea2 (patch)
treebbe593de7c584f15c67c1e4c96f0852c2c5637ed /app
parent6edbeaaf6add5e6f60d949301a05ef42fbdc6afd (diff)
Add a way to disable/enable users (#3056)
If you want to block users without deleting their account, you can now disable them from the interface.
Diffstat (limited to 'app')
-rw-r--r--app/Controllers/authController.php5
-rw-r--r--app/Controllers/userController.php27
-rwxr-xr-xapp/actualize_script.php4
-rw-r--r--app/i18n/cz/admin.php1
-rw-r--r--app/i18n/de/admin.php1
-rw-r--r--app/i18n/en/admin.php1
-rwxr-xr-xapp/i18n/es/admin.php1
-rw-r--r--app/i18n/fr/admin.php3
-rw-r--r--app/i18n/he/admin.php1
-rw-r--r--app/i18n/it/admin.php1
-rw-r--r--app/i18n/kr/admin.php1
-rw-r--r--app/i18n/nl/admin.php1
-rw-r--r--app/i18n/oc/admin.php1
-rw-r--r--app/i18n/pt-br/admin.php1
-rw-r--r--app/i18n/ru/admin.php1
-rw-r--r--app/i18n/sk/admin.php1
-rw-r--r--app/i18n/tr/admin.php1
-rw-r--r--app/i18n/zh-cn/admin.php1
-rw-r--r--app/install.php1
-rw-r--r--app/views/user/details.phtml9
-rw-r--r--app/views/user/manage.phtml4
21 files changed, 59 insertions, 8 deletions
diff --git a/app/Controllers/authController.php b/app/Controllers/authController.php
index d158092bf..cef8f9d2d 100644
--- a/app/Controllers/authController.php
+++ b/app/Controllers/authController.php
@@ -131,6 +131,11 @@ class FreshRSS_auth_Controller extends Minz_ActionController {
return;
}
+ if (!$conf->enabled) {
+ Minz_Error::error(403, array(_t('feedback.auth.login.invalid')), false);
+ return;
+ }
+
$ok = FreshRSS_FormAuth::checkCredentials(
$username, $conf->passwordHash, $nonce, $challenge
);
diff --git a/app/Controllers/userController.php b/app/Controllers/userController.php
index 491350ef3..6e7908df3 100644
--- a/app/Controllers/userController.php
+++ b/app/Controllers/userController.php
@@ -191,6 +191,12 @@ class FreshRSS_user_Controller extends Minz_ActionController {
case 'demote':
$this->demoteAction();
break;
+ case 'enable':
+ $this->enableAction();
+ break;
+ case 'disable':
+ $this->disableAction();
+ break;
}
}
@@ -332,6 +338,7 @@ class FreshRSS_user_Controller extends Minz_ActionController {
$ok = self::createUser($new_user_name, $email, $passwordPlain, array(
'language' => Minz_Request::param('new_user_language', FreshRSS_Context::$user_conf->language),
'is_admin' => Minz_Request::paramBoolean('new_user_is_admin'),
+ 'enabled' => true,
));
Minz_Request::_param('new_user_passwordPlain'); //Discard plain-text password ASAP
$_POST['new_user_passwordPlain'] = '';
@@ -550,14 +557,22 @@ class FreshRSS_user_Controller extends Minz_ActionController {
}
public function promoteAction() {
- $this->switchAdminAction(true);
+ $this->toggleAction('is_admin', true);
}
public function demoteAction() {
- $this->switchAdminAction(false);
+ $this->toggleAction('is_admin', false);
+ }
+
+ public function enableAction() {
+ $this->toggleAction('enabled', true);
+ }
+
+ public function disableAction() {
+ $this->toggleAction('enabled', false);
}
- private function switchAdminAction($isAdmin) {
+ private function toggleAction($field, $value) {
if (!FreshRSS_Auth::hasAccess('admin')) {
Minz_Error::error(403);
}
@@ -575,9 +590,10 @@ class FreshRSS_user_Controller extends Minz_ActionController {
Minz_Error::error(500);
}
- $userConfig->_param('is_admin', $isAdmin);
+ $userConfig->_param($field, $value);
$ok = $userConfig->save();
+ FreshRSS_UserDAO::touch($username);
if ($ok) {
Minz_Request::good(_t('feedback.user.updated', $username), array('c' => 'user', 'a' => 'manage'));
@@ -597,7 +613,6 @@ class FreshRSS_user_Controller extends Minz_ActionController {
Minz_Error::error(404);
}
- $this->view->isDefaultUser = $username === FreshRSS_Context::$system_conf->default_user;
$this->view->username = $username;
$this->view->details = $this->retrieveUserDetails($username);
}
@@ -615,8 +630,10 @@ class FreshRSS_user_Controller extends Minz_ActionController {
'database_size' => $databaseDAO->size(),
'language' => $userConfiguration->language,
'mail_login' => $userConfiguration->mail_login,
+ 'enabled' => $userConfiguration->enabled,
'is_admin' => $userConfiguration->is_admin,
'last_user_activity' => date('c', FreshRSS_UserDAO::mtime($username)),
+ 'is_default' => FreshRSS_Context::$system_conf->default_user === $username,
);
}
}
diff --git a/app/actualize_script.php b/app/actualize_script.php
index 5a5403d62..ffa6baedb 100755
--- a/app/actualize_script.php
+++ b/app/actualize_script.php
@@ -53,6 +53,10 @@ if ($system_conf->default_user !== '') {
$limits = $system_conf->limits;
$min_last_activity = time() - $limits['max_inactivity'];
foreach ($users as $user) {
+ if (!get_user_configuration($user)->enabled) {
+ notice('FreshRSS skip disabled user ' . $user);
+ continue;
+ }
if (($user !== $system_conf->default_user) &&
(FreshRSS_UserDAO::mtime($user) < $min_last_activity)) {
notice('FreshRSS skip inactive user ' . $user);
diff --git a/app/i18n/cz/admin.php b/app/i18n/cz/admin.php
index 7dae02e3e..9b11ca928 100644
--- a/app/i18n/cz/admin.php
+++ b/app/i18n/cz/admin.php
@@ -190,6 +190,7 @@ return array(
'database_size' => 'Database size', // TODO - Translation
'delete_users' => 'Delete user', // TODO - Translation
'email' => 'Email address', // TODO - Translation
+ 'enabled' => 'Enabled', // TODO - Translation
'feed_count' => 'Feeds', // TODO - Translation
'is_admin' => 'Is admin', // TODO - Translation
'language' => 'Jazyk',
diff --git a/app/i18n/de/admin.php b/app/i18n/de/admin.php
index 244a0fbb6..5718f2ff3 100644
--- a/app/i18n/de/admin.php
+++ b/app/i18n/de/admin.php
@@ -190,6 +190,7 @@ return array(
'database_size' => 'Database size', // TODO - Translation
'delete_users' => 'Lösche Benutzer',
'email' => 'Email address', // TODO - Translation
+ 'enabled' => 'Enabled', // TODO - Translation
'feed_count' => 'Feeds', // TODO - Translation
'is_admin' => 'Is admin', // TODO - Translation
'language' => 'Sprache',
diff --git a/app/i18n/en/admin.php b/app/i18n/en/admin.php
index 3a10dc7e7..b4aef304f 100644
--- a/app/i18n/en/admin.php
+++ b/app/i18n/en/admin.php
@@ -190,6 +190,7 @@ return array(
'database_size' => 'Database size',
'delete_users' => 'Delete user',
'email' => 'Email address',
+ 'enabled' => 'Enabled',
'feed_count' => 'Feeds',
'is_admin' => 'Is admin',
'language' => 'Language',
diff --git a/app/i18n/es/admin.php b/app/i18n/es/admin.php
index ed92e466f..1916ffc4a 100755
--- a/app/i18n/es/admin.php
+++ b/app/i18n/es/admin.php
@@ -190,6 +190,7 @@ return array(
'database_size' => 'Database size', // TODO - Translation
'delete_users' => 'Delete user', // TODO - Translation
'email' => 'Email address', // TODO - Translation
+ 'enabled' => 'Enabled', // TODO - Translation
'feed_count' => 'Feeds', // TODO - Translation
'is_admin' => 'Is admin', // TODO - Translation
'language' => 'Idioma',
diff --git a/app/i18n/fr/admin.php b/app/i18n/fr/admin.php
index 6088b4efe..eaf39eaed 100644
--- a/app/i18n/fr/admin.php
+++ b/app/i18n/fr/admin.php
@@ -190,8 +190,9 @@ return array(
'database_size' => 'Volumétrie',
'delete_users' => 'Supprimer un utilisateur',
'email' => 'Adresse email',
+ 'enabled' => 'Actif',
'feed_count' => 'Flux',
- 'is_admin' => 'Admin ?',
+ 'is_admin' => 'Admin',
'language' => 'Langue',
'last_user_activity' => 'Dernière activité utilisateur',
'list' => 'Liste des utilisateurs',
diff --git a/app/i18n/he/admin.php b/app/i18n/he/admin.php
index 7b9977834..f33ffab67 100644
--- a/app/i18n/he/admin.php
+++ b/app/i18n/he/admin.php
@@ -190,6 +190,7 @@ return array(
'database_size' => 'Database size', // TODO - Translation
'delete_users' => 'Delete user', // TODO - Translation
'email' => 'Email address', // TODO - Translation
+ 'enabled' => 'Enabled', // TODO - Translation
'feed_count' => 'Feeds', // TODO - Translation
'is_admin' => 'Is admin', // TODO - Translation
'language' => 'שפה',
diff --git a/app/i18n/it/admin.php b/app/i18n/it/admin.php
index 2a19d6b30..2a034e837 100644
--- a/app/i18n/it/admin.php
+++ b/app/i18n/it/admin.php
@@ -190,6 +190,7 @@ return array(
'database_size' => 'Database size', // TODO - Translation
'delete_users' => 'Delete user', // TODO - Translation
'email' => 'Email address', // TODO - Translation
+ 'enabled' => 'Enabled', // TODO - Translation
'feed_count' => 'Feeds', // TODO - Translation
'is_admin' => 'Is admin', // TODO - Translation
'language' => 'Lingua',
diff --git a/app/i18n/kr/admin.php b/app/i18n/kr/admin.php
index 5825a189f..a2f4112da 100644
--- a/app/i18n/kr/admin.php
+++ b/app/i18n/kr/admin.php
@@ -190,6 +190,7 @@ return array(
'database_size' => 'Database size', // TODO - Translation
'delete_users' => '사용자 삭제',
'email' => 'Email address', // TODO - Translation
+ 'enabled' => 'Enabled', // TODO - Translation
'feed_count' => 'Feeds', // TODO - Translation
'is_admin' => 'Is admin', // TODO - Translation
'language' => '언어',
diff --git a/app/i18n/nl/admin.php b/app/i18n/nl/admin.php
index 5b1450b6e..7e402e625 100644
--- a/app/i18n/nl/admin.php
+++ b/app/i18n/nl/admin.php
@@ -190,6 +190,7 @@ return array(
'database_size' => 'Databasegrootte',
'delete_users' => 'Verwijder gebruiker',
'email' => 'Emailadres',
+ 'enabled' => 'Enabled', // TODO - Translation
'feed_count' => 'Feeds',
'is_admin' => 'Is beheerder',
'language' => 'Taal',
diff --git a/app/i18n/oc/admin.php b/app/i18n/oc/admin.php
index 2b5d4ad3b..2e99e0f84 100644
--- a/app/i18n/oc/admin.php
+++ b/app/i18n/oc/admin.php
@@ -190,6 +190,7 @@ return array(
'database_size' => 'Talha basa de donadas',
'delete_users' => 'Suprimir un utilizaire',
'email' => 'Adreça electronica',
+ 'enabled' => 'Enabled', // TODO - Translation
'feed_count' => 'Flux',
'is_admin' => 'Es admin',
'language' => 'Lenga',
diff --git a/app/i18n/pt-br/admin.php b/app/i18n/pt-br/admin.php
index 29be8e74c..d09d76c5a 100644
--- a/app/i18n/pt-br/admin.php
+++ b/app/i18n/pt-br/admin.php
@@ -190,6 +190,7 @@ return array(
'database_size' => 'Tamanho do banco de dados',
'delete_users' => 'Deletar usuário',
'email' => 'Endereço de email',
+ 'enabled' => 'Enabled', // TODO - Translation
'feed_count' => 'Feeds',
'is_admin' => 'É administrador',
'language' => 'Idioma',
diff --git a/app/i18n/ru/admin.php b/app/i18n/ru/admin.php
index 9c93cf62c..cb22898c7 100644
--- a/app/i18n/ru/admin.php
+++ b/app/i18n/ru/admin.php
@@ -190,6 +190,7 @@ return array(
'database_size' => 'Database size', // TODO - Translation
'delete_users' => 'Delete user', // TODO - Translation
'email' => 'Email address', // TODO - Translation
+ 'enabled' => 'Enabled', // TODO - Translation
'feed_count' => 'Feeds', // TODO - Translation
'is_admin' => 'Is admin', // TODO - Translation
'language' => 'Язык',
diff --git a/app/i18n/sk/admin.php b/app/i18n/sk/admin.php
index c9aa49b1e..de7329483 100644
--- a/app/i18n/sk/admin.php
+++ b/app/i18n/sk/admin.php
@@ -190,6 +190,7 @@ return array(
'database_size' => 'Database size', // TODO - Translation
'delete_users' => 'Zmazať používateľa',
'email' => 'Email address', // TODO - Translation
+ 'enabled' => 'Enabled', // TODO - Translation
'feed_count' => 'Feeds', // TODO - Translation
'is_admin' => 'Is admin', // TODO - Translation
'language' => 'Jazyk',
diff --git a/app/i18n/tr/admin.php b/app/i18n/tr/admin.php
index 9a2f72f4c..61615c9fa 100644
--- a/app/i18n/tr/admin.php
+++ b/app/i18n/tr/admin.php
@@ -190,6 +190,7 @@ return array(
'database_size' => 'Database size', // TODO - Translation
'delete_users' => 'Delete user', // TODO - Translation
'email' => 'Email address', // TODO - Translation
+ 'enabled' => 'Enabled', // TODO - Translation
'feed_count' => 'Feeds', // TODO - Translation
'is_admin' => 'Is admin', // TODO - Translation
'language' => 'Dil',
diff --git a/app/i18n/zh-cn/admin.php b/app/i18n/zh-cn/admin.php
index 078685fae..e880168b7 100644
--- a/app/i18n/zh-cn/admin.php
+++ b/app/i18n/zh-cn/admin.php
@@ -190,6 +190,7 @@ return array(
'database_size' => '数据库大小',
'delete_users' => '删除用户',
'email' => '邮箱地址',
+ 'enabled' => 'Enabled', // TODO - Translation
'feed_count' => '订阅源数',
'is_admin' => '管理员',
'language' => '语言',
diff --git a/app/install.php b/app/install.php
index ddb9d7eaa..cf1ac2c61 100644
--- a/app/install.php
+++ b/app/install.php
@@ -224,6 +224,7 @@ function saveStep3() {
[
'language' => $_SESSION['language'],
'is_admin' => true,
+ 'enabled' => true,
]
);
} catch (Exception $e) {
diff --git a/app/views/user/details.phtml b/app/views/user/details.phtml
index 8b3cc3a44..b93cd4d72 100644
--- a/app/views/user/details.phtml
+++ b/app/views/user/details.phtml
@@ -1,6 +1,8 @@
<?php $this->partial('aside_configure'); ?>
+<?php $isDefault = $this->details['is_default']; ?>
<?php $isAdmin = $this->details['is_admin']; ?>
+<?php $enabled = $this->details['enabled']; ?>
<div class="post">
<a href="<?= _url('user', 'manage'); ?>"><?= _t('admin.user.back_to_manage'); ?></a>
@@ -68,11 +70,16 @@
<button type="submit" class="btn btn-important" name="action" value="update"><?= _t('gen.action.update') ?></button>
<button type="submit" class="btn btn-attention confirm" name="action" value="purge"><?= _t('gen.action.purge') ?></button>
<button type="submit" class="btn btn-attention confirm" name="action" value="delete"><?= _t('gen.action.remove') ?></button>
- <?php if ($isAdmin && !$this->isDefaultUser): ?>
+ <?php if ($isAdmin && !$isDefault): ?>
<button type="submit" class="btn btn-attention confirm" name="action" value="demote"><?= _t('gen.action.demote') ?></button>
<?php elseif (!$isAdmin): ?>
<button type="submit" class="btn btn-attention confirm" name="action" value="promote"><?= _t('gen.action.promote') ?></button>
<?php endif; ?>
+ <?php if ($enabled && !$isDefault): ?>
+ <button type="submit" class="btn btn-attention" name="action" value="disable"><?= _t('gen.action.disable') ?></button>
+ <?php elseif (!$enabled): ?>
+ <button type="submit" class="btn btn-attention" name="action" value="enable"><?= _t('gen.action.enable') ?></button>
+ <?php endif; ?>
<div>
</div>
</form>
diff --git a/app/views/user/manage.phtml b/app/views/user/manage.phtml
index 5c4e1e128..cf053d918 100644
--- a/app/views/user/manage.phtml
+++ b/app/views/user/manage.phtml
@@ -71,6 +71,7 @@
<thead>
<tr>
<th><?= _t('admin.user.username') ?></th>
+ <th><?= _t('admin.user.enabled') ?></th>
<th><?= _t('admin.user.is_admin') ?></th>
<th><?= _t('admin.user.email') ?></th>
<th><?= _t('admin.user.language') ?></th>
@@ -82,8 +83,9 @@
</thead>
<tbody>
<?php foreach ($this->users as $username => $values) : ?>
- <tr>
+ <tr <?php if ($values['is_default']):?>class="default-user"<?php endif; ?>>
<td><a href="<?= _url('user', 'details', 'username', $username) ?>"><?= $username ?></a></td>
+ <td><?= $values['enabled'] ? '✔' : ' ' ?></td>
<td><?= $values['is_admin'] ? '✔' : ' ' ?></td>
<td><?= $values['mail_login'] ?></td>
<td><?= _t("gen.lang.{$values['language']}") ?></td>