]> source.dussan.org Git - nextcloud-server.git/commitdiff
LDAP: extend remnants output with "detected on" field
authorArthur Schiwon <blizzz@arthur-schiwon.de>
Mon, 17 Dec 2018 16:37:45 +0000 (17:37 +0100)
committerBackportbot <backportbot-noreply@rullzer.com>
Fri, 4 Jan 2019 21:49:16 +0000 (21:49 +0000)
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
apps/user_ldap/lib/Command/ShowRemnants.php
apps/user_ldap/lib/User/DeletedUsersIndex.php
apps/user_ldap/lib/User/OfflineUser.php

index 365c8967ee0b871799e55ebca7776d76ecce1b24..6fb207c4e2dd2fe72f9a429490bbb18704de3050 100644 (file)
@@ -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);
index 3473398f41519339350dafc7dc634bcf1e9aaefb..0f0d4859c23d495142f5e0da22e90e645b545260 100644 (file)
@@ -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;
        }
 }
index 9576b49d5a24f7e67ed72b2aafcb58fefeb0b0c1..5ed158cc1052e48f90f31e2ea364afb858035c01 100644 (file)
@@ -53,6 +53,10 @@ class OfflineUser {
         * @var string $lastLogin the timestamp of the last login
         */
        protected $lastLogin;
+       /**
+        * @var string $foundDeleted the timestamp when the user was detected as unavailable
+        */
+       protected $foundDeleted;
        /**
         * @var string $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');
        }
 
        /**
@@ -169,6 +174,14 @@ class OfflineUser {
                return (int)$this->lastLogin;
        }
 
+       /**
+        * 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, '');
                }