[Pkg-owncloud-commits] [owncloud] 02/16: add ldap-search command to occ

David Prévot taffit at moszumanska.debian.org
Sun Dec 7 20:58:04 UTC 2014


This is an automated email from the git hooks/post-receive script.

taffit pushed a commit to branch master
in repository owncloud.

commit 2944f952dca4b859f17357b13a917055e352b824
Author: Arthur Schiwon <blizzz at owncloud.com>
Date:   Fri Nov 28 12:08:33 2014 +0100

    add ldap-search command to occ
---
 apps/user_ldap/appinfo/register_command.php |   1 +
 apps/user_ldap/command/search.php           | 100 ++++++++++++++++++++++++++++
 apps/user_ldap/lib/access.php               |  11 +++
 3 files changed, 112 insertions(+)

diff --git a/apps/user_ldap/appinfo/register_command.php b/apps/user_ldap/appinfo/register_command.php
index 10d9925..efce2d0 100644
--- a/apps/user_ldap/appinfo/register_command.php
+++ b/apps/user_ldap/appinfo/register_command.php
@@ -9,3 +9,4 @@
 $application->add(new OCA\user_ldap\Command\ShowConfig());
 $application->add(new OCA\user_ldap\Command\SetConfig());
 $application->add(new OCA\user_ldap\Command\TestConfig());
+$application->add(new OCA\user_ldap\Command\Search());
diff --git a/apps/user_ldap/command/search.php b/apps/user_ldap/command/search.php
new file mode 100644
index 0000000..e202555
--- /dev/null
+++ b/apps/user_ldap/command/search.php
@@ -0,0 +1,100 @@
+<?php
+/**
+ * Copyright (c) 2014 Arthur Schiwon <blizzz at owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCA\user_ldap\Command;
+
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+
+use OCA\user_ldap\User_Proxy;
+use OCA\user_ldap\Group_Proxy;
+use OCA\user_ldap\lib\Helper;
+use OCA\user_ldap\lib\LDAP;
+
+class Search extends Command {
+	protected function configure() {
+		$this
+			->setName('ldap:search')
+			->setDescription('executes a user or group search')
+			->addArgument(
+					'search',
+					InputArgument::REQUIRED,
+					'the search string (can be empty)'
+				     )
+			->addOption(
+					'group',
+					null,
+					InputOption::VALUE_NONE,
+					'searches groups instead of users'
+				     )
+			->addOption(
+					'offset',
+					null,
+					InputOption::VALUE_REQUIRED,
+					'The offset of the result set. Needs to be a multiple of limit. defaults to 0.',
+					0
+				     )
+			->addOption(
+					'limit',
+					null,
+					InputOption::VALUE_REQUIRED,
+					'limit the results. 0 means no limit, defaults to 15',
+					15
+				     )
+		;
+	}
+
+	/**
+	 * Tests whether the offset and limit options are valid
+	 * @param int $offset
+	 * @param int $limit
+	 * @throws \InvalidArgumentException
+	 */
+	protected function validateOffsetAndLimit($offset, $limit) {
+		if($limit < 0) {
+			throw new \InvalidArgumentException('limit must be  0 or greater');
+		}
+		if($offset  < 0) {
+			throw new \InvalidArgumentException('offset must be 0 or greater');
+		}
+		if($limit === 0 && $offset !== 0) {
+			throw new \InvalidArgumentException('offset must be 0 if limit is also set to 0');
+		}
+		if($offset > 0 && ($offset % $limit !== 0)) {
+			throw new \InvalidArgumentException('offset must be a multiple of limit');
+		}
+	}
+
+	protected function execute(InputInterface $input, OutputInterface $output) {
+		$configPrefixes = Helper::getServerConfigurationPrefixes(true);
+		$ldapWrapper = new LDAP();
+
+		$offset = intval($input->getOption('offset'));
+		$limit = intval($input->getOption('limit'));
+		$this->validateOffsetAndLimit($offset, $limit);
+
+		if($input->getOption('group')) {
+			$proxy = new Group_Proxy($configPrefixes, $ldapWrapper);
+			$getMethod = 'getGroups';
+			$printID = false;
+		} else {
+			$proxy = new User_Proxy($configPrefixes, $ldapWrapper);
+			$getMethod = 'getDisplayNames';
+			$printID = true;
+		}
+
+		$result = $proxy->$getMethod($input->getArgument('search'), $limit, $offset);
+		foreach($result as $id => $name) {
+			$line = $name . ($printID ? ' ('.$id.')' : '');
+			$output->writeln($line);
+		}
+	}
+}
diff --git a/apps/user_ldap/lib/access.php b/apps/user_ldap/lib/access.php
index d89029a..d3d25e9 100644
--- a/apps/user_ldap/lib/access.php
+++ b/apps/user_ldap/lib/access.php
@@ -403,6 +403,8 @@ class Access extends LDAPUtility implements user\IUserTools {
 
 		//a new user/group! Add it only if it doesn't conflict with other backend's users or existing groups
 		//disabling Cache is required to avoid that the new user is cached as not-existing in fooExists check
+		//NOTE: mind, disabling cache affects only this instance! Using it
+		// outside of core user management will still cache the user as non-existing.
 		$originalTTL = $this->connection->ldapCacheTTL;
 		$this->connection->setConfiguration(array('ldapCacheTTL' => 0));
 		if(($isUser && !\OCP\User::userExists($intName))
@@ -507,6 +509,7 @@ class Access extends LDAPUtility implements user\IUserTools {
 				if($isUsers) {
 					//cache the user names so it does not need to be retrieved
 					//again later (e.g. sharing dialogue).
+					$this->cacheUserExists($ocName);
 					$this->cacheUserDisplayName($ocName, $nameByLDAP);
 				}
 			}
@@ -516,6 +519,14 @@ class Access extends LDAPUtility implements user\IUserTools {
 	}
 
 	/**
+	 * caches a user as existing
+	 * @param string $ocName the internal ownCloud username
+	 */
+	public function cacheUserExists($ocName) {
+		$this->connection->writeToCache('userExists'.$ocName, true);
+	}
+
+	/**
 	 * caches the user display name
 	 * @param string $ocName the internal ownCloud username
 	 * @param string $displayName the display name

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/owncloud.git



More information about the Pkg-owncloud-commits mailing list