From 6da33e1ea7bb340e22330941d2a980a1414210b0 Mon Sep 17 00:00:00 2001 From: Morris Jobke Date: Fri, 12 Dec 2014 17:25:03 +0100 Subject: [PATCH] introduce names for user backends - IUserBackend * LDAP with multiple servers also proved backendName --- apps/user_ldap/user_ldap.php | 11 +++++++++- apps/user_ldap/user_proxy.php | 10 ++++++++- apps/user_webdavauth/user_webdavauth.php | 10 ++++++++- lib/private/user/database.php | 10 ++++++++- lib/private/user/dummy.php | 10 ++++++++- lib/private/user/http.php | 10 ++++++++- lib/private/user/manager.php | 11 +++++++--- lib/private/user/user.php | 3 +++ lib/public/iuserbackend.php | 27 ++++++++++++++++++++++++ tests/lib/user/manager.php | 10 +++++++++ tests/lib/user/user.php | 4 ++-- 11 files changed, 105 insertions(+), 11 deletions(-) create mode 100644 lib/public/iuserbackend.php diff --git a/apps/user_ldap/user_ldap.php b/apps/user_ldap/user_ldap.php index 5227808231..cb3779eeee 100644 --- a/apps/user_ldap/user_ldap.php +++ b/apps/user_ldap/user_ldap.php @@ -27,7 +27,7 @@ namespace OCA\user_ldap; use OCA\user_ldap\lib\BackendUtility; -class USER_LDAP extends BackendUtility implements \OCP\UserInterface { +class USER_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserInterface { /** * checks whether the user is allowed to change his avatar in ownCloud * @param string $uid the ownCloud user name @@ -299,4 +299,13 @@ class USER_LDAP extends BackendUtility implements \OCP\UserInterface { $this->access->connection->writeToCache($cacheKey, $entries); return $entries; } + + /** + * Backend name to be shown in user management + * @return string the name of the backend to be shown + */ + public function getBackendName(){ + return 'LDAP'; + } + } diff --git a/apps/user_ldap/user_proxy.php b/apps/user_ldap/user_proxy.php index fa4d693930..6414a04807 100644 --- a/apps/user_ldap/user_proxy.php +++ b/apps/user_ldap/user_proxy.php @@ -25,7 +25,7 @@ namespace OCA\user_ldap; use OCA\user_ldap\lib\ILDAPWrapper; -class User_Proxy extends lib\Proxy implements \OCP\UserInterface { +class User_Proxy extends lib\Proxy implements \OCP\IUserBackend, \OCP\UserInterface { private $backends = array(); private $refBackend = null; @@ -117,6 +117,14 @@ class User_Proxy extends lib\Proxy implements \OCP\UserInterface { return $this->refBackend->implementsActions($actions); } + /** + * Backend name to be shown in user management + * @return string the name of the backend to be shown + */ + public function getBackendName() { + return $this->refBackend->getBackendName(); + } + /** * Get a list of all users * @return string[] with all uids diff --git a/apps/user_webdavauth/user_webdavauth.php b/apps/user_webdavauth/user_webdavauth.php index 86e5b916f3..1154a7865b 100644 --- a/apps/user_webdavauth/user_webdavauth.php +++ b/apps/user_webdavauth/user_webdavauth.php @@ -21,7 +21,7 @@ * */ -class OC_USER_WEBDAVAUTH extends OC_User_Backend { +class OC_USER_WEBDAVAUTH extends OC_User_Backend implements \OCP\IUserBackend { protected $webdavauth_url; public function __construct() { @@ -86,4 +86,12 @@ class OC_USER_WEBDAVAUTH extends OC_User_Backend { return $returnArray; } + + /** + * Backend name to be shown in user management + * @return string the name of the backend to be shown + */ + public function getBackendName(){ + return 'WebDAV'; + } } diff --git a/lib/private/user/database.php b/lib/private/user/database.php index a6289066f0..de6c72e474 100644 --- a/lib/private/user/database.php +++ b/lib/private/user/database.php @@ -36,7 +36,7 @@ /** * Class for user management in a SQL Database (e.g. MySQL, SQLite) */ -class OC_User_Database extends OC_User_Backend { +class OC_User_Database extends OC_User_Backend implements \OCP\IUserBackend { private $cache = array(); /** @@ -260,4 +260,12 @@ class OC_User_Database extends OC_User_Backend { return $result->fetchOne(); } + /** + * Backend name to be shown in user management + * @return string the name of the backend to be shown + */ + public function getBackendName(){ + return 'Database'; + } + } diff --git a/lib/private/user/dummy.php b/lib/private/user/dummy.php index fd0201734f..322a4562ee 100644 --- a/lib/private/user/dummy.php +++ b/lib/private/user/dummy.php @@ -24,7 +24,7 @@ /** * dummy user backend, does not keep state, only for testing use */ -class OC_User_Dummy extends OC_User_Backend { +class OC_User_Dummy extends OC_User_Backend implements \OCP\IUserBackend { private $users = array(); private $displayNames = array(); @@ -156,4 +156,12 @@ class OC_User_Dummy extends OC_User_Backend { public function getDisplayName($uid) { return isset($this->displayNames[$uid])? $this->displayNames[$uid]: $uid; } + + /** + * Backend name to be shown in user management + * @return string the name of the backend to be shown + */ + public function getBackendName(){ + return 'Dummy'; + } } diff --git a/lib/private/user/http.php b/lib/private/user/http.php index 617e8adb3f..8375c4e1e2 100644 --- a/lib/private/user/http.php +++ b/lib/private/user/http.php @@ -24,7 +24,7 @@ /** * user backend using http auth requests */ -class OC_User_HTTP extends OC_User_Backend { +class OC_User_HTTP extends OC_User_Backend implements \OCP\IUserBackend { /** * split http://user@host/path into a user and url part * @param string $url @@ -109,4 +109,12 @@ class OC_User_HTTP extends OC_User_Backend { return false; } } + + /** + * Backend name to be shown in user management + * @return string the name of the backend to be shown + */ + public function getBackendName(){ + return 'HTTP'; + } } diff --git a/lib/private/user/manager.php b/lib/private/user/manager.php index 2c56ea261d..1fc89f8c2c 100644 --- a/lib/private/user/manager.php +++ b/lib/private/user/manager.php @@ -279,10 +279,15 @@ class Manager extends PublicEmitter implements IUserManager { if ($backend->implementsActions(\OC_User_Backend::COUNT_USERS)) { $backendusers = $backend->countUsers(); if($backendusers !== false) { - if(isset($userCountStatistics[get_class($backend)])) { - $userCountStatistics[get_class($backend)] += $backendusers; + if($backend instanceof \OCP\IUserBackend) { + $name = $backend->getBackendName(); } else { - $userCountStatistics[get_class($backend)] = $backendusers; + $name = get_class($backend); + } + if(isset($userCountStatistics[$name])) { + $userCountStatistics[$name] += $backendusers; + } else { + $userCountStatistics[$name] = $backendusers; } } } diff --git a/lib/private/user/user.php b/lib/private/user/user.php index 062081d51d..0b4f9a2427 100644 --- a/lib/private/user/user.php +++ b/lib/private/user/user.php @@ -225,6 +225,9 @@ class User implements IUser { * @return string */ public function getBackendClassName() { + if($this->backend instanceof \OCP\IUserBackend) { + return $this->backend->getBackendName(); + } return get_class($this->backend); } diff --git a/lib/public/iuserbackend.php b/lib/public/iuserbackend.php new file mode 100644 index 0000000000..79b5740ee9 --- /dev/null +++ b/lib/public/iuserbackend.php @@ -0,0 +1,27 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +/** + * Public interface of ownCloud for apps to use. + * User Interface version 2 + * + */ + +// use OCP namespace for all classes that are considered public. +// This means that they should be used by apps instead of the internal ownCloud classes +namespace OCP; + +interface IUserBackend { + + /** + * Backend name to be shown in user management + * @return string the name of the backend to be shown + */ + public function getBackendName(); + +} diff --git a/tests/lib/user/manager.php b/tests/lib/user/manager.php index 9cb9374d89..cc8bcd6589 100644 --- a/tests/lib/user/manager.php +++ b/tests/lib/user/manager.php @@ -380,6 +380,10 @@ class Manager extends \Test\TestCase { ->with(\OC_USER_BACKEND_COUNT_USERS) ->will($this->returnValue(true)); + $backend->expects($this->once()) + ->method('getBackendName') + ->will($this->returnValue('Mock_OC_User_Dummy')); + $manager = new \OC\User\Manager(); $manager->registerBackend($backend); @@ -404,6 +408,9 @@ class Manager extends \Test\TestCase { ->method('implementsActions') ->with(\OC_USER_BACKEND_COUNT_USERS) ->will($this->returnValue(true)); + $backend1->expects($this->once()) + ->method('getBackendName') + ->will($this->returnValue('Mock_OC_User_Dummy')); $backend2 = $this->getMock('\OC_User_Dummy'); $backend2->expects($this->once()) @@ -414,6 +421,9 @@ class Manager extends \Test\TestCase { ->method('implementsActions') ->with(\OC_USER_BACKEND_COUNT_USERS) ->will($this->returnValue(true)); + $backend2->expects($this->once()) + ->method('getBackendName') + ->will($this->returnValue('Mock_OC_User_Dummy')); $manager = new \OC\User\Manager(); $manager->registerBackend($backend1); diff --git a/tests/lib/user/user.php b/tests/lib/user/user.php index e7085182fd..b1df975b60 100644 --- a/tests/lib/user/user.php +++ b/tests/lib/user/user.php @@ -217,9 +217,9 @@ class User extends \Test\TestCase { public function testGetBackendClassName() { $user = new \OC\User\User('foo', new \OC_User_Dummy()); - $this->assertEquals('OC_User_Dummy', $user->getBackendClassName()); + $this->assertEquals('Dummy', $user->getBackendClassName()); $user = new \OC\User\User('foo', new \OC_User_Database()); - $this->assertEquals('OC_User_Database', $user->getBackendClassName()); + $this->assertEquals('Database', $user->getBackendClassName()); } public function testGetHomeNotSupported() {