diff --git a/lib/UserBackend.php b/lib/UserBackend.php index 210a33f..fa06750 100644 --- a/lib/UserBackend.php +++ b/lib/UserBackend.php @@ -7,7 +7,6 @@ namespace OCA\GlobalSiteSelector; -use OC\User\Backend; use OCP\DB\QueryBuilder\IQueryBuilder; use OCP\EventDispatcher\GenericEvent; use OCP\EventDispatcher\IEventDispatcher; @@ -19,14 +18,19 @@ use OCP\IUser; use OCP\IUserBackend; use OCP\IUserManager; -use OCP\User\Backend\ICountUsersBackend; +use OCP\User\Backend\ABackend; +use OCP\User\Backend\ICheckPasswordBackend; +use OCP\User\Backend\IGetDisplayNameBackend; +use OCP\User\Backend\ILimitAwareCountUsersBackend; +use OCP\User\Backend\ISetDisplayNameBackend; use OCP\User\Events\UserFirstTimeLoggedInEvent; use OCP\UserInterface; +use Override; -class UserBackend implements IUserBackend, UserInterface, ICountUsersBackend { +class UserBackend extends ABackend implements IUserBackend, UserInterface, ICheckPasswordBackend, IGetDisplayNameBackend, ISetDisplayNameBackend, ILimitAwareCountUsersBackend { private string $dbName = 'global_scale_users'; - /** @var UserInterface[] */ + /** @var list */ private static array $backends = []; public function __construct( @@ -39,36 +43,11 @@ public function __construct( ) { } - /** - * Backend name to be shown in user management - * - * @return string the name of the backend to be shown - * @since 0.11.0 - */ - #[\Override] + #[Override] public function getBackendName(): string { return 'user_globalsiteselector'; } - /** - * Check if backend implements actions - * - * @param int $actions bitwise-or'ed actions - * - * Returns the supported actions as int to be - * compared with \OC\User\Backend::CREATE_USER etc. - * - * @since 4.5.0 - */ - #[\Override] - public function implementsActions($actions): bool { - $availableActions = Backend::CHECK_PASSWORD; - $availableActions |= Backend::GET_DISPLAYNAME; - $availableActions |= Backend::COUNT_USERS; - - return (bool)($availableActions & $actions); - } - /** * Creates a user if it does not exist. * @@ -103,15 +82,7 @@ public function createUserIfNotExists(string $uid): void { } } - /** - * delete a user - * - * @param string $uid The username of the user to delete - * - * @return bool - * @since 4.5.0 - */ - #[\Override] + #[Override] public function deleteUser($uid): bool { if ($this->userExistsInDatabase($uid)) { /* @var $qb IQueryBuilder */ @@ -126,17 +97,7 @@ public function deleteUser($uid): bool { return false; } - /** - * Get a list of all users - * - * @param string $search - * @param null|int $limit - * @param null|int $offset - * - * @return string[] an array of all uids - * @since 4.5.0 - */ - #[\Override] + #[Override] public function getUsers($search = '', $limit = null, $offset = null): array { /* @var $qb IQueryBuilder */ $qb = $this->db->getQueryBuilder(); @@ -165,13 +126,8 @@ public function getUsers($search = '', $limit = null, $offset = null): array { return $uids; } - /** - * counts the users in the database - * - * @return int|bool - */ - #[\Override] - public function countUsers(): int { + #[Override] + public function countUsers(int $limit = 0): int|false { $query = $this->db->getQueryBuilder(); $query->select($query->func()->count('uid')) ->from($this->dbName); @@ -180,28 +136,13 @@ public function countUsers(): int { return $result->fetchColumn(); } - /** - * check if a user exists - * - * @param string $uid the username - * - * @return boolean - * @since 4.5.0 - */ - #[\Override] + #[Override] public function userExists($uid): bool { - if ($backend = $this->getActualUserBackend($uid)) { - return $backend->userExists($uid); - } else { - return $this->userExistsInDatabase($uid); - } + return $this->userExistsInDatabase($uid); } + #[Override] public function setDisplayName(string $uid, string $displayName): bool { - if ($backend = $this->getActualUserBackend($uid)) { - return $backend->setDisplayName($uid, $displayName); - } - if ($this->userExistsInDatabase($uid)) { $qb = $this->db->getQueryBuilder(); $qb->update($this->dbName) @@ -215,47 +156,25 @@ public function setDisplayName(string $uid, string $displayName): bool { return false; } - /** - * Get display name of the user - * - * @param string $uid user ID of the user - * - * @return string display name - * @since 4.5.0 - */ - #[\Override] + #[Override] public function getDisplayName($uid): string { - if ($backend = $this->getActualUserBackend($uid)) { - return $backend->getDisplayName($uid); - } else { - if ($this->userExistsInDatabase($uid)) { - $qb = $this->db->getQueryBuilder(); - $qb->select('displayname') - ->from($this->dbName) - ->where($qb->expr()->eq('uid', $qb->createNamedParameter($uid))) - ->setMaxResults(1); - $result = $qb->executeQuery(); - $users = $result->fetchAll(); - if (isset($users[0]['displayname'])) { - return $users[0]['displayname']; - } + if ($this->userExistsInDatabase($uid)) { + $qb = $this->db->getQueryBuilder(); + $qb->select('displayname') + ->from($this->dbName) + ->where($qb->expr()->eq('uid', $qb->createNamedParameter($uid))) + ->setMaxResults(1); + $result = $qb->executeQuery(); + $users = $result->fetchAll(); + if (isset($users[0]['displayname'])) { + return $users[0]['displayname']; } } return false; } - /** - * Get a list of all display names and user ids. - * - * @param string $search - * @param string|null $limit - * @param string|null $offset - * - * @return array an array of all displayNames (value) and the corresponding uids (key) - * @since 4.5.0 - */ - #[\Override] + #[Override] public function getDisplayNames($search = '', $limit = null, $offset = null): array { $qb = $this->db->getQueryBuilder(); $qb->select('uid', 'displayname') @@ -290,13 +209,7 @@ public function getDisplayNames($search = '', $limit = null, $offset = null): ar return $uids; } - /** - * Check if a user list is available or not - * - * @return boolean if users can be listed or not - * @since 4.5.0 - */ - #[\Override] + #[Override] public function hasUserListings(): bool { return true; } @@ -329,60 +242,20 @@ public function getCurrentUserId(): string { return ''; } - /** - * Check if the provided token is correct - * - * @param string $uid The username - * @param string $password The password - * - * @return string - * - * There is no password, authentication happens on the global site selector master - */ - public function checkPassword(string $uid, string $password) { + #[Override] + public function checkPassword(string $loginName, string $password) { // if the user was successfully authenticated by the global site selector // master and forwarded to the client the uid is stored in the session. // In this case we can trust the global site selector that the password was // checked. $currentUid = $this->session->get('globalScale.uid'); - if ($currentUid === $uid) { - return $uid; + if ($currentUid === $loginName) { + return $loginName; } return false; } - /** - * Gets the actual user backend of the user - * - * @param string $uid - * - * @return null|UserInterface - */ - public function getActualUserBackend(string $uid): ?UserInterface { - foreach (self::$backends as $backend) { - if ($backend->userExists($uid)) { - return $backend; - } - } - - return null; - } - - /** - * Registers the used backends, used later to get the actual user backend - * of the user. - * - * @param UserInterface[] $backends - */ - public function registerBackends(array $backends): void { - foreach ($backends as $backend) { - if (!($backend instanceof UserBackend)) { - self::$backends[] = $backend; - } - } - } - public function updateAttributes(string $uid, array $attributes): void { $user = $this->userManager->get($uid); @@ -444,10 +317,6 @@ public function updateAttributes(string $uid, array $attributes): void { /** * Whether $uid exists in the database - * - * @param string $uid - * - * @return bool */ protected function userExistsInDatabase(string $uid): bool { /* @var $qb IQueryBuilder */