77
88namespace OCA \GlobalSiteSelector ;
99
10- use OC \User \Backend ;
1110use OCP \DB \QueryBuilder \IQueryBuilder ;
1211use OCP \EventDispatcher \GenericEvent ;
1312use OCP \EventDispatcher \IEventDispatcher ;
1918use OCP \IUser ;
2019use OCP \IUserBackend ;
2120use OCP \IUserManager ;
22- use OCP \User \Backend \ICountUsersBackend ;
21+ use OCP \User \Backend \ABackend ;
22+ use OCP \User \Backend \ICheckPasswordBackend ;
23+ use OCP \User \Backend \IGetDisplayNameBackend ;
24+ use OCP \User \Backend \ILimitAwareCountUsersBackend ;
25+ use OCP \User \Backend \ISetDisplayNameBackend ;
2326use OCP \User \Events \UserFirstTimeLoggedInEvent ;
2427use OCP \UserInterface ;
28+ use Override ;
2529
26- class UserBackend implements IUserBackend, UserInterface, ICountUsersBackend {
30+ class UserBackend extends ABackend implements IUserBackend, UserInterface, ICheckPasswordBackend, IGetDisplayNameBackend, ISetDisplayNameBackend, ILimitAwareCountUsersBackend {
2731 private string $ dbName = 'global_scale_users ' ;
2832
29- /** @var UserInterface[] */
33+ /** @var list< UserInterface> */
3034 private static array $ backends = [];
3135
3236 public function __construct (
@@ -39,36 +43,11 @@ public function __construct(
3943 ) {
4044 }
4145
42- /**
43- * Backend name to be shown in user management
44- *
45- * @return string the name of the backend to be shown
46- * @since 0.11.0
47- */
48- #[\Override]
46+ #[Override]
4947 public function getBackendName (): string {
5048 return 'user_globalsiteselector ' ;
5149 }
5250
53- /**
54- * Check if backend implements actions
55- *
56- * @param int $actions bitwise-or'ed actions
57- *
58- * Returns the supported actions as int to be
59- * compared with \OC\User\Backend::CREATE_USER etc.
60- *
61- * @since 4.5.0
62- */
63- #[\Override]
64- public function implementsActions ($ actions ): bool {
65- $ availableActions = Backend::CHECK_PASSWORD ;
66- $ availableActions |= Backend::GET_DISPLAYNAME ;
67- $ availableActions |= Backend::COUNT_USERS ;
68-
69- return (bool )($ availableActions & $ actions );
70- }
71-
7251 /**
7352 * Creates a user if it does not exist.
7453 *
@@ -103,15 +82,7 @@ public function createUserIfNotExists(string $uid): void {
10382 }
10483 }
10584
106- /**
107- * delete a user
108- *
109- * @param string $uid The username of the user to delete
110- *
111- * @return bool
112- * @since 4.5.0
113- */
114- #[\Override]
85+ #[Override]
11586 public function deleteUser ($ uid ): bool {
11687 if ($ this ->userExistsInDatabase ($ uid )) {
11788 /* @var $qb IQueryBuilder */
@@ -126,17 +97,7 @@ public function deleteUser($uid): bool {
12697 return false ;
12798 }
12899
129- /**
130- * Get a list of all users
131- *
132- * @param string $search
133- * @param null|int $limit
134- * @param null|int $offset
135- *
136- * @return string[] an array of all uids
137- * @since 4.5.0
138- */
139- #[\Override]
100+ #[Override]
140101 public function getUsers ($ search = '' , $ limit = null , $ offset = null ): array {
141102 /* @var $qb IQueryBuilder */
142103 $ qb = $ this ->db ->getQueryBuilder ();
@@ -165,13 +126,8 @@ public function getUsers($search = '', $limit = null, $offset = null): array {
165126 return $ uids ;
166127 }
167128
168- /**
169- * counts the users in the database
170- *
171- * @return int|bool
172- */
173- #[\Override]
174- public function countUsers (): int {
129+ #[Override]
130+ public function countUsers (int $ limit = 0 ): int |false {
175131 $ query = $ this ->db ->getQueryBuilder ();
176132 $ query ->select ($ query ->func ()->count ('uid ' ))
177133 ->from ($ this ->dbName );
@@ -180,28 +136,13 @@ public function countUsers(): int {
180136 return $ result ->fetchColumn ();
181137 }
182138
183- /**
184- * check if a user exists
185- *
186- * @param string $uid the username
187- *
188- * @return boolean
189- * @since 4.5.0
190- */
191- #[\Override]
139+ #[Override]
192140 public function userExists ($ uid ): bool {
193- if ($ backend = $ this ->getActualUserBackend ($ uid )) {
194- return $ backend ->userExists ($ uid );
195- } else {
196- return $ this ->userExistsInDatabase ($ uid );
197- }
141+ return $ this ->userExistsInDatabase ($ uid );
198142 }
199143
144+ #[Override]
200145 public function setDisplayName (string $ uid , string $ displayName ): bool {
201- if ($ backend = $ this ->getActualUserBackend ($ uid )) {
202- return $ backend ->setDisplayName ($ uid , $ displayName );
203- }
204-
205146 if ($ this ->userExistsInDatabase ($ uid )) {
206147 $ qb = $ this ->db ->getQueryBuilder ();
207148 $ qb ->update ($ this ->dbName )
@@ -215,47 +156,25 @@ public function setDisplayName(string $uid, string $displayName): bool {
215156 return false ;
216157 }
217158
218- /**
219- * Get display name of the user
220- *
221- * @param string $uid user ID of the user
222- *
223- * @return string display name
224- * @since 4.5.0
225- */
226- #[\Override]
159+ #[Override]
227160 public function getDisplayName ($ uid ): string {
228- if ($ backend = $ this ->getActualUserBackend ($ uid )) {
229- return $ backend ->getDisplayName ($ uid );
230- } else {
231- if ($ this ->userExistsInDatabase ($ uid )) {
232- $ qb = $ this ->db ->getQueryBuilder ();
233- $ qb ->select ('displayname ' )
234- ->from ($ this ->dbName )
235- ->where ($ qb ->expr ()->eq ('uid ' , $ qb ->createNamedParameter ($ uid )))
236- ->setMaxResults (1 );
237- $ result = $ qb ->executeQuery ();
238- $ users = $ result ->fetchAll ();
239- if (isset ($ users [0 ]['displayname ' ])) {
240- return $ users [0 ]['displayname ' ];
241- }
161+ if ($ this ->userExistsInDatabase ($ uid )) {
162+ $ qb = $ this ->db ->getQueryBuilder ();
163+ $ qb ->select ('displayname ' )
164+ ->from ($ this ->dbName )
165+ ->where ($ qb ->expr ()->eq ('uid ' , $ qb ->createNamedParameter ($ uid )))
166+ ->setMaxResults (1 );
167+ $ result = $ qb ->executeQuery ();
168+ $ users = $ result ->fetchAll ();
169+ if (isset ($ users [0 ]['displayname ' ])) {
170+ return $ users [0 ]['displayname ' ];
242171 }
243172 }
244173
245174 return false ;
246175 }
247176
248- /**
249- * Get a list of all display names and user ids.
250- *
251- * @param string $search
252- * @param string|null $limit
253- * @param string|null $offset
254- *
255- * @return array an array of all displayNames (value) and the corresponding uids (key)
256- * @since 4.5.0
257- */
258- #[\Override]
177+ #[Override]
259178 public function getDisplayNames ($ search = '' , $ limit = null , $ offset = null ): array {
260179 $ qb = $ this ->db ->getQueryBuilder ();
261180 $ qb ->select ('uid ' , 'displayname ' )
@@ -290,13 +209,7 @@ public function getDisplayNames($search = '', $limit = null, $offset = null): ar
290209 return $ uids ;
291210 }
292211
293- /**
294- * Check if a user list is available or not
295- *
296- * @return boolean if users can be listed or not
297- * @since 4.5.0
298- */
299- #[\Override]
212+ #[Override]
300213 public function hasUserListings (): bool {
301214 return true ;
302215 }
@@ -329,60 +242,20 @@ public function getCurrentUserId(): string {
329242 return '' ;
330243 }
331244
332- /**
333- * Check if the provided token is correct
334- *
335- * @param string $uid The username
336- * @param string $password The password
337- *
338- * @return string
339- *
340- * There is no password, authentication happens on the global site selector master
341- */
342- public function checkPassword (string $ uid , string $ password ) {
245+ #[Override]
246+ public function checkPassword (string $ loginName , string $ password ) {
343247 // if the user was successfully authenticated by the global site selector
344248 // master and forwarded to the client the uid is stored in the session.
345249 // In this case we can trust the global site selector that the password was
346250 // checked.
347251 $ currentUid = $ this ->session ->get ('globalScale.uid ' );
348- if ($ currentUid === $ uid ) {
349- return $ uid ;
252+ if ($ currentUid === $ loginName ) {
253+ return $ loginName ;
350254 }
351255
352256 return false ;
353257 }
354258
355- /**
356- * Gets the actual user backend of the user
357- *
358- * @param string $uid
359- *
360- * @return null|UserInterface
361- */
362- public function getActualUserBackend (string $ uid ): ?UserInterface {
363- foreach (self ::$ backends as $ backend ) {
364- if ($ backend ->userExists ($ uid )) {
365- return $ backend ;
366- }
367- }
368-
369- return null ;
370- }
371-
372- /**
373- * Registers the used backends, used later to get the actual user backend
374- * of the user.
375- *
376- * @param UserInterface[] $backends
377- */
378- public function registerBackends (array $ backends ): void {
379- foreach ($ backends as $ backend ) {
380- if (!($ backend instanceof UserBackend)) {
381- self ::$ backends [] = $ backend ;
382- }
383- }
384- }
385-
386259 public function updateAttributes (string $ uid , array $ attributes ): void {
387260 $ user = $ this ->userManager ->get ($ uid );
388261
@@ -444,10 +317,6 @@ public function updateAttributes(string $uid, array $attributes): void {
444317
445318 /**
446319 * Whether $uid exists in the database
447- *
448- * @param string $uid
449- *
450- * @return bool
451320 */
452321 protected function userExistsInDatabase (string $ uid ): bool {
453322 /* @var $qb IQueryBuilder */
0 commit comments