]> source.dussan.org Git - nextcloud-server.git/commitdiff
Accept shares when you open mail 18696/head
authorRoeland Jago Douma <roeland@famdouma.nl>
Mon, 6 Jan 2020 15:48:21 +0000 (16:48 +0100)
committerRoeland Jago Douma <roeland@famdouma.nl>
Mon, 6 Jan 2020 15:48:21 +0000 (16:48 +0100)
Fixes #18380

When you open a direct share to yourself. We should autoaccept the
share.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
apps/files_sharing/appinfo/routes.php
apps/files_sharing/composer/composer/autoload_classmap.php
apps/files_sharing/composer/composer/autoload_static.php
apps/files_sharing/lib/Controller/AcceptController.php [new file with mode: 0644]
lib/private/Share20/Manager.php

index b543eace305293e1b00fec5c03c83b1559a111cf..ad3d11fc3a165e4f11ad0cbbcb03b2daad5bec87 100644 (file)
@@ -49,7 +49,12 @@ return [
                        'name' => 'Settings#setDefaultAccept',
                        'url' => '/settings/defaultAccept',
                        'verb' => 'PUT',
-               ]
+               ],
+               [
+                       'name' => 'Accept#accept',
+                       'url' => '/accept/{shareId}',
+                       'verb' => 'GET',
+               ],
        ],
        'ocs' => [
                /*
index 52c1954b42bebaa6d687e562b9cd792abfce4cbf..7259ca80d163bd563d8d11dd4e18d3f7a6b31941 100644 (file)
@@ -23,6 +23,7 @@ return array(
     'OCA\\Files_Sharing\\Collaboration\\ShareRecipientSorter' => $baseDir . '/../lib/Collaboration/ShareRecipientSorter.php',
     'OCA\\Files_Sharing\\Command\\CleanupRemoteStorages' => $baseDir . '/../lib/Command/CleanupRemoteStorages.php',
     'OCA\\Files_Sharing\\Command\\ExiprationNotification' => $baseDir . '/../lib/Command/ExiprationNotification.php',
+    'OCA\\Files_Sharing\\Controller\\AcceptController' => $baseDir . '/../lib/Controller/AcceptController.php',
     'OCA\\Files_Sharing\\Controller\\DeletedShareAPIController' => $baseDir . '/../lib/Controller/DeletedShareAPIController.php',
     'OCA\\Files_Sharing\\Controller\\ExternalSharesController' => $baseDir . '/../lib/Controller/ExternalSharesController.php',
     'OCA\\Files_Sharing\\Controller\\PublicPreviewController' => $baseDir . '/../lib/Controller/PublicPreviewController.php',
index cad09e82cbf8977f4ef2e67a0602fc940e861cee..5894f5d43db06d1b9bfd05fdd28e22c08dc0028e 100644 (file)
@@ -38,6 +38,7 @@ class ComposerStaticInitFiles_Sharing
         'OCA\\Files_Sharing\\Collaboration\\ShareRecipientSorter' => __DIR__ . '/..' . '/../lib/Collaboration/ShareRecipientSorter.php',
         'OCA\\Files_Sharing\\Command\\CleanupRemoteStorages' => __DIR__ . '/..' . '/../lib/Command/CleanupRemoteStorages.php',
         'OCA\\Files_Sharing\\Command\\ExiprationNotification' => __DIR__ . '/..' . '/../lib/Command/ExiprationNotification.php',
+        'OCA\\Files_Sharing\\Controller\\AcceptController' => __DIR__ . '/..' . '/../lib/Controller/AcceptController.php',
         'OCA\\Files_Sharing\\Controller\\DeletedShareAPIController' => __DIR__ . '/..' . '/../lib/Controller/DeletedShareAPIController.php',
         'OCA\\Files_Sharing\\Controller\\ExternalSharesController' => __DIR__ . '/..' . '/../lib/Controller/ExternalSharesController.php',
         'OCA\\Files_Sharing\\Controller\\PublicPreviewController' => __DIR__ . '/..' . '/../lib/Controller/PublicPreviewController.php',
diff --git a/apps/files_sharing/lib/Controller/AcceptController.php b/apps/files_sharing/lib/Controller/AcceptController.php
new file mode 100644 (file)
index 0000000..29924ce
--- /dev/null
@@ -0,0 +1,83 @@
+<?php
+declare(strict_types=1);
+/**
+ * @copyright Copyright (c) 2020, Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Files_Sharing\Controller;
+
+use OCA\Files_Sharing\AppInfo\Application;
+use OCP\AppFramework\Controller;
+use OCP\AppFramework\Http\NotFoundResponse;
+use OCP\AppFramework\Http\RedirectResponse;
+use OCP\AppFramework\Http\Response;
+use OCP\IRequest;
+use OCP\IURLGenerator;
+use OCP\IUserSession;
+use OCP\Share\Exceptions\ShareNotFound;
+use OCP\Share\IManager as ShareManager;
+
+class AcceptController extends Controller {
+
+       /** @var ShareManager */
+       private $shareManager;
+
+       /** @var IUserSession */
+       private $userSession;
+
+       /** @var IURLGenerator */
+       private $urlGenerator;
+
+       public function __construct(IRequest $request, ShareManager $shareManager, IUserSession $userSession, IURLGenerator $urlGenerator) {
+               parent::__construct(Application::APP_ID, $request);
+
+               $this->shareManager = $shareManager;
+               $this->userSession = $userSession;
+               $this->urlGenerator = $urlGenerator;
+       }
+
+       /**
+        * @NoAdminRequired
+        * @NoCSRFRequired
+        */
+       public function accept(string $shareId): Response {
+               try {
+                       $share = $this->shareManager->getShareById($shareId);
+               } catch (ShareNotFound $e) {
+                       return new NotFoundResponse();
+               }
+
+               $user = $this->userSession->getUser();
+               if ($user === null) {
+                       return new NotFoundResponse();
+               }
+
+               try {
+                       $share = $this->shareManager->acceptShare($share, $user->getUID());
+               } catch (\Exception $e) {
+                       // Just ignore
+               }
+
+               $url = $this->urlGenerator->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $share->getNode()->getId()]);
+
+               return new RedirectResponse($url);
+       }
+}
index 4c94cf26a4d29589fc60e714f4bebc373fd24958..8ec025ebc26d36ff48ed9ee3ff3c74700763a29d 100644 (file)
@@ -800,7 +800,7 @@ class Manager implements IManager {
                                                $this->sendMailNotification(
                                                        $l,
                                                        $share->getNode()->getName(),
-                                                       $this->urlGenerator->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $share->getNode()->getId()]),
+                                                       $this->urlGenerator->linkToRouteAbsolute('files_sharing.Accept.accept', ['shareId' => $share->getFullId()]),
                                                        $share->getSharedBy(),
                                                        $emailAddress,
                                                        $share->getExpirationDate()