This commit is contained in:
backportbot[bot] 2026-04-03 00:09:34 +00:00 committed by GitHub
commit 0081eb2b95
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 68 additions and 6 deletions

View file

@ -1762,8 +1762,8 @@ class ShareAPIController extends OCSController {
'sciencemesh' => IShare::TYPE_SCIENCEMESH,
];
// Add federated sharing as a provider only if it's allowed
if ($this->shareManager->outgoingServer2ServerSharesAllowed()) {
// Include federated sharing whenever the provider is available for the user.
if ($this->shareManager->shareProviderExists(IShare::TYPE_REMOTE)) {
$providers['ocFederatedSharing'] = null; // No type check needed
}
@ -1888,14 +1888,14 @@ class ShareAPIController extends OCSController {
$shares = array_merge($shares, $providerShares);
}
if ($this->shareManager->outgoingServer2ServerSharesAllowed()) {
if ($this->shareManager->shareProviderExists(IShare::TYPE_REMOTE)) {
$federatedShares = $this->shareManager->getSharesBy(
$this->userId, IShare::TYPE_REMOTE, $node, $reShares, -1, 0
);
$shares = array_merge($shares, $federatedShares);
}
if ($this->shareManager->outgoingServer2ServerGroupSharesAllowed()) {
if ($this->shareManager->shareProviderExists(IShare::TYPE_REMOTE_GROUP)) {
$federatedShares = $this->shareManager->getSharesBy(
$this->userId, IShare::TYPE_REMOTE_GROUP, $node, $reShares, -1, 0
);
@ -2033,12 +2033,12 @@ class ShareAPIController extends OCSController {
$sciencemeshShares = $this->shareManager->getSharesBy($this->userId, IShare::TYPE_SCIENCEMESH, $path, $reshares, -1, 0);
// FEDERATION
if ($this->shareManager->outgoingServer2ServerSharesAllowed()) {
if ($this->shareManager->shareProviderExists(IShare::TYPE_REMOTE)) {
$federatedShares = $this->shareManager->getSharesBy($this->userId, IShare::TYPE_REMOTE, $path, $reshares, -1, 0);
} else {
$federatedShares = [];
}
if ($this->shareManager->outgoingServer2ServerGroupSharesAllowed()) {
if ($this->shareManager->shareProviderExists(IShare::TYPE_REMOTE_GROUP)) {
$federatedGroupShares = $this->shareManager->getSharesBy($this->userId, IShare::TYPE_REMOTE_GROUP, $path, $reshares, -1, 0);
} else {
$federatedGroupShares = [];

View file

@ -1263,6 +1263,8 @@ class ShareAPIControllerTest extends TestCase {
$file1EmailShareOwnerExpected,
$file1CircleShareOwnerExpected,
$file1RoomShareOwnerExpected,
$file1RemoteShareOwnerExpected,
$file1RemoteGroupShareOwnerExpected,
]
],
[
@ -1433,6 +1435,8 @@ class ShareAPIControllerTest extends TestCase {
$file1EmailShareOwnerExpected,
$file1CircleShareOwnerExpected,
$file1RoomShareOwnerExpected,
$file1RemoteShareOwnerExpected,
$file1RemoteGroupShareOwnerExpected,
]
],
[
@ -2068,6 +2072,64 @@ class ShareAPIControllerTest extends TestCase {
$this->ocs->createShare('valid-path', Constants::PERMISSION_ALL, IShare::TYPE_GROUP, 'invalidGroup');
}
public function testGetFederatedShareWhenOutgoingFederationDisabled(): void {
$share = $this->createMock(IShare::class);
$share->method('getId')->willReturn('42');
$share->method('getShareType')->willReturn(IShare::TYPE_REMOTE);
/** @var ShareAPIController&MockObject $ocs */
$ocs = $this->getMockBuilder(ShareAPIController::class)
->setConstructorArgs([
$this->appName,
$this->request,
$this->shareManager,
$this->groupManager,
$this->userManager,
$this->rootFolder,
$this->urlGenerator,
$this->l,
$this->config,
$this->appConfig,
$this->appManager,
$this->serverContainer,
$this->userStatusManager,
$this->previewManager,
$this->dateTimeZone,
$this->logger,
$this->factory,
$this->mailer,
$this->tagManager,
$this->trustedServers,
$this->currentUser,
])
->onlyMethods(['canAccessShare', 'formatShare'])
->getMock();
$ocs->method('canAccessShare')->willReturn(true);
$ocs->method('formatShare')->with($share)->willReturn([
'id' => '42',
'share_type' => IShare::TYPE_REMOTE,
]);
$this->shareManager
->method('getShareById')
->willReturnCallback(function (string $id, string $recipient) use ($share) {
$this->assertSame($this->currentUser, $recipient);
if ($id === 'ocFederatedSharing:42') {
return $share;
}
throw new ShareNotFound();
});
$this->assertSame([
[
'id' => '42',
'share_type' => IShare::TYPE_REMOTE,
],
], $ocs->getShare('42')->getData());
}
public function testCreateShareLinkNoLinksAllowed(): void {
$this->expectException(OCSNotFoundException::class);