diff --git a/apps/dav/lib/CardDAV/ContactsManager.php b/apps/dav/lib/CardDAV/ContactsManager.php index c4751497a6796..aea5acec5eb00 100644 --- a/apps/dav/lib/CardDAV/ContactsManager.php +++ b/apps/dav/lib/CardDAV/ContactsManager.php @@ -9,6 +9,7 @@ use OCA\DAV\Db\PropertyMapper; use OCP\Contacts\IManager; +use OCP\IAppConfig; use OCP\IL10N; use OCP\IURLGenerator; @@ -22,16 +23,20 @@ class ContactsManager { /** @var PropertyMapper */ private $propertyMapper; + /** @var IAppConfig */ + private $appConfig; + /** * ContactsManager constructor. * * @param CardDavBackend $backend * @param IL10N $l10n */ - public function __construct(CardDavBackend $backend, IL10N $l10n, PropertyMapper $propertyMapper) { + public function __construct(CardDavBackend $backend, IL10N $l10n, PropertyMapper $propertyMapper, IAppConfig $appConfig) { $this->backend = $backend; $this->l10n = $l10n; $this->propertyMapper = $propertyMapper; + $this->appConfig = $appConfig; } /** @@ -51,6 +56,11 @@ public function setupContactsProvider(IManager $cm, $userId, IURLGenerator $urlG * @param IURLGenerator $urlGenerator */ public function setupSystemContactsProvider(IManager $cm, ?string $userId, IURLGenerator $urlGenerator) { + $systemAddressBookExposed = $this->appConfig->getValueBool('dav', 'system_addressbook_exposed', true); + if (!$systemAddressBookExposed) { + return; + } + $addressBooks = $this->backend->getAddressBooksForUser('principals/system/system'); $this->register($cm, $addressBooks, $urlGenerator, $userId); } diff --git a/apps/dav/tests/unit/CardDAV/ContactsManagerTest.php b/apps/dav/tests/unit/CardDAV/ContactsManagerTest.php index 80f1f2a444516..159acec5e9e0b 100644 --- a/apps/dav/tests/unit/CardDAV/ContactsManagerTest.php +++ b/apps/dav/tests/unit/CardDAV/ContactsManagerTest.php @@ -11,6 +11,7 @@ use OCA\DAV\CardDAV\ContactsManager; use OCA\DAV\Db\PropertyMapper; use OCP\Contacts\IManager; +use OCP\IAppConfig; use OCP\IL10N; use OCP\IURLGenerator; use Test\TestCase; @@ -19,7 +20,8 @@ class ContactsManagerTest extends TestCase { public function test(): void { /** @var IManager | \PHPUnit\Framework\MockObject\MockObject $cm */ $cm = $this->getMockBuilder(IManager::class)->disableOriginalConstructor()->getMock(); - $cm->expects($this->exactly(2))->method('registerAddressBook'); + $cm->expects($this->exactly(1))->method('registerAddressBook'); + /** @var IURLGenerator&MockObject $urlGenerator */ $urlGenerator = $this->getMockBuilder(IURLGenerator::class)->disableOriginalConstructor()->getMock(); /** @var CardDavBackend | \PHPUnit\Framework\MockObject\MockObject $backEnd */ $backEnd = $this->getMockBuilder(CardDavBackend::class)->disableOriginalConstructor()->getMock(); @@ -27,9 +29,12 @@ public function test(): void { ['{DAV:}displayname' => 'Test address book', 'uri' => 'default'], ]); $propertyMapper = $this->createMock(PropertyMapper::class); + /** @var IAppConfig&MockObject $appConfig */ + $appConfig = $this->createMock(IAppConfig::class); + /** @var IL10N&MockObject $l */ $l = $this->createMock(IL10N::class); - $app = new ContactsManager($backEnd, $l, $propertyMapper); + $app = new ContactsManager($backEnd, $l, $propertyMapper, $appConfig); $app->setupContactsProvider($cm, 'user01', $urlGenerator); } } diff --git a/build/integration/features/contacts-menu.feature b/build/integration/features/contacts-menu.feature index f01b34aa1bacd..bc0094cdddb62 100644 --- a/build/integration/features/contacts-menu.feature +++ b/build/integration/features/contacts-menu.feature @@ -194,3 +194,19 @@ Feature: contacts-menu And searching for contacts matching with "test" # Disabled because it regularly fails on drone: # Then the list of searched contacts has "0" contacts + + Scenario: users cannot list other users from the system address book + Given user "user0" exists + And user "user1" exists + And invoking occ with "config:app:set dav system_addressbook_exposed --value false" + And Logging in using web as "user1" + And searching for contacts matching with "" + Then the list of searched contacts has "0" contacts + And invoking occ with "config:app:delete dav system_addressbook_exposed" + + Scenario: users can list other users from the system address book + Given user "user0" exists + And user "user1" exists + And Logging in using web as "user1" + And searching for contacts matching with "" + Then the list of searched contacts has "1" contacts