fix(provisioning_api): Show warning but do not fail when listing accounts in case of users removed from backend but still in database

Co-authored-by: Ferdinand Thiessen <opensource@fthiessen.de>
Co-authored-by: Louis <louis@chmn.me>
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
pull/44982/head
Ferdinand Thiessen 4 weeks ago
parent 9872755711
commit d566e1222d
No known key found for this signature in database
GPG Key ID: 45FAE7268762B400

@ -59,6 +59,7 @@ use OCP\AppFramework\Http;
use OCP\AppFramework\Http\DataResponse; use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\OCS\OCSException; use OCP\AppFramework\OCS\OCSException;
use OCP\AppFramework\OCS\OCSForbiddenException; use OCP\AppFramework\OCS\OCSForbiddenException;
use OCP\AppFramework\OCS\OCSNotFoundException;
use OCP\AppFramework\OCSController; use OCP\AppFramework\OCSController;
use OCP\EventDispatcher\IEventDispatcher; use OCP\EventDispatcher\IEventDispatcher;
use OCP\HintException; use OCP\HintException;
@ -196,7 +197,14 @@ class UsersController extends AUserData {
$usersDetails = []; $usersDetails = [];
foreach ($users as $userId) { foreach ($users as $userId) {
$userId = (string) $userId; $userId = (string) $userId;
$userData = $this->getUserData($userId); try {
$userData = $this->getUserData($userId);
} catch (OCSNotFoundException $e) {
// We still want to return all other accounts, but this one was removed from the backends
// yet they are still in our database. Might be a LDAP remnant.
$userData = null;
$this->logger->warning('Found one enabled account that is removed from its backend, but still exists in Nextcloud database', ['accountId' => $userId]);
}
// Do not insert empty entry // Do not insert empty entry
if ($userData !== null) { if ($userData !== null) {
$usersDetails[$userId] = $userData; $usersDetails[$userId] = $userData;
@ -269,12 +277,19 @@ class UsersController extends AUserData {
$usersDetails = []; $usersDetails = [];
foreach ($users as $userId) { foreach ($users as $userId) {
$userData = $this->getUserData($userId); try {
$userData = $this->getUserData($userId);
} catch (OCSNotFoundException $e) {
// We still want to return all other accounts, but this one was removed from the backends
// yet they are still in our database. Might be a LDAP remnant.
$userData = null;
$this->logger->warning('Found one disabled account that was removed from its backend, but still exists in Nextcloud database', ['accountId' => $userId]);
}
// Do not insert empty entry // Do not insert empty entry
if ($userData !== null) { if ($userData !== null) {
$usersDetails[$userId] = $userData; $usersDetails[$userId] = $userData;
} else { } else {
// Logged user does not have permissions to see this user // Currently logged in user does not have permissions to see this user
// only showing its id // only showing its id
$usersDetails[$userId] = ['id' => $userId]; $usersDetails[$userId] = ['id' => $userId];
} }

Loading…
Cancel
Save