Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArthur Schiwon <blizzz@arthur-schiwon.de>2018-12-17 19:37:45 +0300
committerBackportbot <backportbot-noreply@rullzer.com>2019-01-05 00:49:16 +0300
commitac2577fd6615c1aafee179ebc2a4a7138de252f0 (patch)
treec70a52b1d51fdcae9f47c30a54d36618f743de49 /apps/user_ldap
parent4884c294b5b214733aee9929bc5a203cc68ef8e8 (diff)
LDAP: extend remnants output with "detected on" field
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
Diffstat (limited to 'apps/user_ldap')
-rw-r--r--apps/user_ldap/lib/Command/ShowRemnants.php47
-rw-r--r--apps/user_ldap/lib/User/DeletedUsersIndex.php6
-rw-r--r--apps/user_ldap/lib/User/OfflineUser.php30
3 files changed, 57 insertions, 26 deletions
diff --git a/apps/user_ldap/lib/Command/ShowRemnants.php b/apps/user_ldap/lib/Command/ShowRemnants.php
index 365c8967ee0..6fb207c4e2d 100644
--- a/apps/user_ldap/lib/Command/ShowRemnants.php
+++ b/apps/user_ldap/lib/Command/ShowRemnants.php
@@ -55,38 +55,49 @@ class ShowRemnants extends Command {
$this
->setName('ldap:show-remnants')
->setDescription('shows which users are not available on LDAP anymore, but have remnants in Nextcloud.')
- ->addOption('json', null, InputOption::VALUE_NONE, 'return JSON array instead of pretty table.');
+ ->addOption('json', null, InputOption::VALUE_NONE, 'return JSON array instead of pretty table.')
+ ->addOption('short-date', null, InputOption::VALUE_NONE, 'show dates in Y-m-d format');
+ }
+
+ protected function formatDate(int $timestamp, string $default, bool $showShortDate) {
+ if (!($timestamp > 0)) {
+ return $default;
+ }
+ if ($showShortDate) {
+ return date('Y-m-d', $timestamp);
+ }
+ return $this->dateFormatter->formatDate($timestamp);
}
/**
- * executes the command, i.e. creeates and outputs a table of LDAP users marked as deleted
+ * executes the command, i.e. creates and outputs a table of LDAP users marked as deleted
*
* {@inheritdoc}
*/
protected function execute(InputInterface $input, OutputInterface $output) {
/** @var \Symfony\Component\Console\Helper\Table $table */
$table = new Table($output);
- $table->setHeaders(array(
+ $table->setHeaders([
'Nextcloud name', 'Display Name', 'LDAP UID', 'LDAP DN', 'Last Login',
- 'Dir', 'Sharer'));
- $rows = array();
+ 'Detected on', 'Dir', 'Sharer'
+ ]);
+ $rows = [];
$resultSet = $this->dui->getUsers();
- foreach($resultSet as $user) {
- $hAS = $user->getHasActiveShares() ? 'Y' : 'N';
- $lastLogin = ($user->getLastLogin() > 0) ?
- $this->dateFormatter->formatDate($user->getLastLogin()) : '-';
- $rows[] = array('ocName' => $user->getOCName(),
- 'displayName' => $user->getDisplayName(),
- 'uid' => $user->getUID(),
- 'dn' => $user->getDN(),
- 'lastLogin' => $lastLogin,
- 'homePath' => $user->getHomePath(),
- 'sharer' => $hAS
- );
+ foreach ($resultSet as $user) {
+ $rows[] = [
+ 'ocName' => $user->getOCName(),
+ 'displayName' => $user->getDisplayName(),
+ 'uid' => $user->getUID(),
+ 'dn' => $user->getDN(),
+ 'lastLogin' => $this->formatDate($user->getLastLogin(), '-', (bool)$input->getOption('short-date')),
+ 'detectedOn' => $this->formatDate($user->getDetectedOn(), 'unknown', (bool)$input->getOption('short-date')),
+ 'homePath' => $user->getHomePath(),
+ 'sharer' => $user->getHasActiveShares() ? 'Y' : 'N',
+ ];
}
if ($input->getOption('json')) {
- $output->writeln(json_encode($rows));
+ $output->writeln(json_encode($rows));
} else {
$table->setRows($rows);
$table->render($output);
diff --git a/apps/user_ldap/lib/User/DeletedUsersIndex.php b/apps/user_ldap/lib/User/DeletedUsersIndex.php
index 3473398f415..0f0d4859c23 100644
--- a/apps/user_ldap/lib/User/DeletedUsersIndex.php
+++ b/apps/user_ldap/lib/User/DeletedUsersIndex.php
@@ -108,7 +108,13 @@ class DeletedUsersIndex {
* @throws \OCP\PreConditionNotMetException
*/
public function markUser($ocName) {
+ $curValue = $this->config->getUserValue($ocName, 'user_ldap', 'isDeleted', '0');
+ if($curValue === '1') {
+ // the user is already marked, do not write to DB again
+ return;
+ }
$this->config->setUserValue($ocName, 'user_ldap', 'isDeleted', '1');
+ $this->config->setUserValue($ocName, 'user_ldap', 'foundDeleted', (string)time());
$this->deletedUsers = null;
}
}
diff --git a/apps/user_ldap/lib/User/OfflineUser.php b/apps/user_ldap/lib/User/OfflineUser.php
index 9576b49d5a2..5ed158cc105 100644
--- a/apps/user_ldap/lib/User/OfflineUser.php
+++ b/apps/user_ldap/lib/User/OfflineUser.php
@@ -54,6 +54,10 @@ class OfflineUser {
*/
protected $lastLogin;
/**
+ * @var string $foundDeleted the timestamp when the user was detected as unavailable
+ */
+ protected $foundDeleted;
+ /**
* @var string $email
*/
protected $email;
@@ -92,7 +96,8 @@ class OfflineUser {
* remove the Delete-flag from the user.
*/
public function unmark() {
- $this->config->setUserValue($this->ocName, 'user_ldap', 'isDeleted', '0');
+ $this->config->deleteUserValue($this->ocName, 'user_ldap', 'isDeleted');
+ $this->config->deleteUserValue($this->ocName, 'user_ldap', 'foundDeleted');
}
/**
@@ -170,6 +175,14 @@ class OfflineUser {
}
/**
+ * getter for the detection timestamp
+ * @return int
+ */
+ public function getDetectedOn() {
+ return (int)$this->foundDeleted;
+ }
+
+ /**
* getter for having active shares
* @return bool
*/
@@ -181,13 +194,14 @@ class OfflineUser {
* reads the user details
*/
protected function fetchDetails() {
- $properties = array (
- 'displayName' => 'user_ldap',
- 'uid' => 'user_ldap',
- 'homePath' => 'user_ldap',
- 'email' => 'settings',
- 'lastLogin' => 'login'
- );
+ $properties = [
+ 'displayName' => 'user_ldap',
+ 'uid' => 'user_ldap',
+ 'homePath' => 'user_ldap',
+ 'foundDeleted' => 'user_ldap',
+ 'email' => 'settings',
+ 'lastLogin' => 'login',
+ ];
foreach($properties as $property => $app) {
$this->$property = $this->config->getUserValue($this->ocName, $app, $property, '');
}