[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