Skip to content

Commit 87a91e6

Browse files
authored
Merge pull request #20161 from nextcloud/backport/20150/stable18
[stable18] Auto accept group shares for users added to a group
2 parents 1fd4918 + 87dac80 commit 87a91e6

4 files changed

Lines changed: 87 additions & 0 deletions

File tree

apps/files_sharing/composer/composer/autoload_classmap.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
'OCA\\Files_Sharing\\ISharedStorage' => $baseDir . '/../lib/ISharedStorage.php',
5151
'OCA\\Files_Sharing\\Listener\\LoadAdditionalListener' => $baseDir . '/../lib/Listener/LoadAdditionalListener.php',
5252
'OCA\\Files_Sharing\\Listener\\LoadSidebarListener' => $baseDir . '/../lib/Listener/LoadSidebarListener.php',
53+
'OCA\\Files_Sharing\\Listener\\UserAddedToGroupListener' => $baseDir . '/../lib/Listener/UserAddedToGroupListener.php',
5354
'OCA\\Files_Sharing\\Listener\\UserShareAcceptanceListener' => $baseDir . '/../lib/Listener/UserShareAcceptanceListener.php',
5455
'OCA\\Files_Sharing\\Middleware\\OCSShareAPIMiddleware' => $baseDir . '/../lib/Middleware/OCSShareAPIMiddleware.php',
5556
'OCA\\Files_Sharing\\Middleware\\ShareInfoMiddleware' => $baseDir . '/../lib/Middleware/ShareInfoMiddleware.php',

apps/files_sharing/composer/composer/autoload_static.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ class ComposerStaticInitFiles_Sharing
6565
'OCA\\Files_Sharing\\ISharedStorage' => __DIR__ . '/..' . '/../lib/ISharedStorage.php',
6666
'OCA\\Files_Sharing\\Listener\\LoadAdditionalListener' => __DIR__ . '/..' . '/../lib/Listener/LoadAdditionalListener.php',
6767
'OCA\\Files_Sharing\\Listener\\LoadSidebarListener' => __DIR__ . '/..' . '/../lib/Listener/LoadSidebarListener.php',
68+
'OCA\\Files_Sharing\\Listener\\UserAddedToGroupListener' => __DIR__ . '/..' . '/../lib/Listener/UserAddedToGroupListener.php',
6869
'OCA\\Files_Sharing\\Listener\\UserShareAcceptanceListener' => __DIR__ . '/..' . '/../lib/Listener/UserShareAcceptanceListener.php',
6970
'OCA\\Files_Sharing\\Middleware\\OCSShareAPIMiddleware' => __DIR__ . '/..' . '/../lib/Middleware/OCSShareAPIMiddleware.php',
7071
'OCA\\Files_Sharing\\Middleware\\ShareInfoMiddleware' => __DIR__ . '/..' . '/../lib/Middleware/ShareInfoMiddleware.php',

apps/files_sharing/lib/AppInfo/Application.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
use OCA\Files_Sharing\Listener\GlobalShareAcceptanceListener;
3939
use OCA\Files_Sharing\Listener\LoadAdditionalListener;
4040
use OCA\Files_Sharing\Listener\LoadSidebarListener;
41+
use OCA\Files_Sharing\Listener\UserAddedToGroupListener;
4142
use OCA\Files_Sharing\Listener\UserShareAcceptanceListener;
4243
use OCA\Files_Sharing\Middleware\OCSShareAPIMiddleware;
4344
use OCA\Files_Sharing\Middleware\ShareInfoMiddleware;
@@ -53,6 +54,7 @@
5354
use OCP\EventDispatcher\IEventDispatcher;
5455
use OCP\Federation\ICloudIdManager;
5556
use OCP\Files\Config\IMountProviderCollection;
57+
use OCP\Group\Events\UserAddedEvent;
5658
use OCP\IContainer;
5759
use OCP\IGroup;
5860
use OCP\IServerContainer;
@@ -214,6 +216,7 @@ protected function registerEventsScripts(IEventDispatcher $dispatcher) {
214216
\OCP\Util::addScript('files_sharing', 'dist/collaboration');
215217
});
216218
$dispatcher->addServiceListener(ShareCreatedEvent::class, UserShareAcceptanceListener::class);
219+
$dispatcher->addServiceListener(UserAddedEvent::class, UserAddedToGroupListener::class);
217220

218221
// notifications api to accept incoming user shares
219222
$dispatcher->addListener('OCP\Share::postShare', function(GenericEvent $event) {
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
<?php
2+
declare(strict_types=1);
3+
/**
4+
* @copyright Copyright (c) 2020, Roeland Jago Douma <roeland@famdouma.nl>
5+
*
6+
* @author Roeland Jago Douma <roeland@famdouma.nl>
7+
*
8+
* @license GNU AGPL version 3 or any later version
9+
*
10+
* This program is free software: you can redistribute it and/or modify
11+
* it under the terms of the GNU Affero General Public License as
12+
* published by the Free Software Foundation, either version 3 of the
13+
* License, or (at your option) any later version.
14+
*
15+
* This program is distributed in the hope that it will be useful,
16+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
17+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18+
* GNU Affero General Public License for more details.
19+
*
20+
* You should have received a copy of the GNU Affero General Public License
21+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
22+
*
23+
*/
24+
25+
namespace OCA\Files_Sharing\Listener;
26+
27+
use OCA\Files_Sharing\AppInfo\Application;
28+
use OCP\EventDispatcher\Event;
29+
use OCP\EventDispatcher\IEventListener;
30+
use OCP\Group\Events\UserAddedEvent;
31+
use OCP\IConfig;
32+
use OCP\Share\IManager;
33+
use OCP\Share\IShare;
34+
35+
class UserAddedToGroupListener implements IEventListener {
36+
37+
/** @var IManager */
38+
private $shareManager;
39+
40+
/** @var IConfig */
41+
private $config;
42+
43+
public function __construct(IManager $shareManager, IConfig $config) {
44+
$this->shareManager = $shareManager;
45+
$this->config = $config;
46+
}
47+
48+
public function handle(Event $event): void {
49+
if (!($event instanceof UserAddedEvent)) {
50+
return;
51+
}
52+
53+
$user = $event->getUser();
54+
$group = $event->getGroup();
55+
56+
// This user doesn't have autoaccept so we can skip it all
57+
if (!$this->hasAutoAccept($user->getUID())) {
58+
return;
59+
}
60+
61+
// Get all group shares this user has access to now to filter later
62+
$shares = $this->shareManager->getSharedWith($user->getUID(), IShare::TYPE_GROUP);
63+
64+
foreach ($shares as $share) {
65+
// If this is not the new group we can skip it
66+
if ($share->getSharedWith() !== $group->getGID()) {
67+
continue;
68+
}
69+
70+
// Accept the share if needed
71+
$this->shareManager->acceptShare($share, $user->getUID());
72+
}
73+
}
74+
75+
76+
private function hasAutoAccept(string $userId): bool {
77+
$defaultAcceptSystemConfig = $this->config->getSystemValueBool('sharing.enable_share_accept', false) ? 'no' : 'yes';
78+
$acceptDefault = $this->config->getUserValue($userId, Application::APP_ID, 'default_accept', $defaultAcceptSystemConfig) === 'yes';
79+
return (!$this->config->getSystemValueBool('sharing.force_share_accept', false) && $acceptDefault);
80+
}
81+
82+
}

0 commit comments

Comments
 (0)