]> source.dussan.org Git - nextcloud-server.git/commitdiff
Convert Share API to use the AppFramework
authorRoeland Jago Douma <roeland@famdouma.nl>
Tue, 19 Jul 2016 12:13:27 +0000 (14:13 +0200)
committerRoeland Jago Douma <roeland@famdouma.nl>
Fri, 5 Aug 2016 12:17:25 +0000 (14:17 +0200)
apps/files_sharing/appinfo/routes.php
apps/files_sharing/lib/API/Share20OCS.php
apps/files_sharing/lib/AppInfo/Application.php

index 92c2759ed14549c804952cbf81fd66e4c0356131..ee7ea55d506bf7c2739daa43b677136868bc3b51 100644 (file)
@@ -40,6 +40,36 @@ $application->registerRoutes($this, [
                        'verb' => 'GET'
                ],
        ],
+       'ocs' => [
+               /*
+                * OCS Share API
+                */
+               [
+                       'name' => 'ShareAPI#getShares',
+                       'url'  => '/api/v1/shares',
+                       'verb' => 'GET',
+               ],
+               [
+                       'name' => 'ShareAPI#createShare',
+                       'url'  => '/api/v1/shares',
+                       'verb' => 'POST',
+               ],
+               [
+                       'name' => 'ShareAPI#getShare',
+                       'url'  => '/api/v1/shares/{id}',
+                       'verb' => 'GET',
+               ],
+               [
+                       'name' => 'ShareAPI#updateShare',
+                       'url'  => '/api/v1/shares/{id}',
+                       'verb' => 'PUT',
+               ],
+               [
+                       'name' => 'ShareAPI#deleteShare',
+                       'url'  => '/api/v1/shares/{id}',
+                       'verb' => 'DELETE',
+               ],
+       ],
 ]);
 
 /** @var $this \OCP\Route\IRouter */
@@ -59,33 +89,6 @@ $this->create('sharing_external_shareinfo', '/shareinfo')
 
 //TODO: SET: mail notification, waiting for PR #4689 to be accepted
 
-$OCSShare = new \OCA\Files_Sharing\API\OCSShareWrapper();
-
-API::register('get',
-               '/apps/files_sharing/api/v1/shares',
-               [$OCSShare, 'getAllShares'],
-               'files_sharing');
-
-API::register('post',
-               '/apps/files_sharing/api/v1/shares',
-               [$OCSShare, 'createShare'],
-               'files_sharing');
-
-API::register('get',
-               '/apps/files_sharing/api/v1/shares/{id}',
-               [$OCSShare, 'getShare'],
-               'files_sharing');
-
-API::register('put',
-               '/apps/files_sharing/api/v1/shares/{id}',
-               [$OCSShare, 'updateShare'],
-               'files_sharing');
-
-API::register('delete',
-               '/apps/files_sharing/api/v1/shares/{id}',
-               [$OCSShare, 'deleteShare'],
-               'files_sharing');
-
 API::register('get',
                '/apps/files_sharing/api/v1/remote_shares',
                array('\OCA\Files_Sharing\API\Remote', 'getShares'),
index 593e9d877c70d2758b391b5f3edec750050b5966..f8e8108cb52e9194e44a7b898d1834073c584014 100644 (file)
@@ -23,6 +23,7 @@
  */
 namespace OCA\Files_Sharing\API;
 
+use OCP\AppFramework\OCSController;
 use OCP\Files\NotFoundException;
 use OCP\IGroupManager;
 use OCP\IL10N;
@@ -32,7 +33,6 @@ use OCP\IURLGenerator;
 use OCP\IUser;
 use OCP\Files\IRootFolder;
 use OCP\Lock\LockedException;
-use OCP\Share;
 use OCP\Share\IManager;
 use OCP\Share\Exceptions\ShareNotFound;
 use OCP\Share\Exceptions\GenericShareException;
@@ -43,7 +43,7 @@ use OCP\Lock\ILockingProvider;
  *
  * @package OCA\Files_Sharing\API
  */
-class Share20OCS {
+class Share20OCS extends OCSController {
 
        /** @var IManager */
        private $shareManager;
@@ -52,7 +52,7 @@ class Share20OCS {
        /** @var IUserManager */
        private $userManager;
        /** @var IRequest */
-       private $request;
+       protected $request;
        /** @var IRootFolder */
        private $rootFolder;
        /** @var IURLGenerator */
@@ -65,24 +65,29 @@ class Share20OCS {
        /**
         * Share20OCS constructor.
         *
+        * @param string $appName
+        * @param IRequest $request
         * @param IManager $shareManager
         * @param IGroupManager $groupManager
         * @param IUserManager $userManager
-        * @param IRequest $request
         * @param IRootFolder $rootFolder
         * @param IURLGenerator $urlGenerator
         * @param IUser $currentUser
+        * @param IL10N $l10n
         */
        public function __construct(
+                       $appName,
+                       IRequest $request,
                        IManager $shareManager,
                        IGroupManager $groupManager,
                        IUserManager $userManager,
-                       IRequest $request,
                        IRootFolder $rootFolder,
                        IURLGenerator $urlGenerator,
                        IUser $currentUser,
                        IL10N $l10n
        ) {
+               parent::__construct($appName, $request);
+
                $this->shareManager = $shareManager;
                $this->userManager = $userManager;
                $this->groupManager = $groupManager;
@@ -133,7 +138,7 @@ class Share20OCS {
                } else {
                        $result['item_type'] = 'file';
                }
-               $result['mimetype'] = $node->getMimeType();
+               $result['mimetype'] = $node->getMimetype();
                $result['storage_id'] = $node->getStorage()->getId();
                $result['storage'] = $node->getStorage()->getCache()->getNumericStorageId();
                $result['item_source'] = $node->getId();
@@ -175,88 +180,126 @@ class Share20OCS {
        /**
         * Get a specific share by id
         *
+        * @NoAdminRequired
+        *
         * @param string $id
-        * @return \OC_OCS_Result
+        * @return array
         */
        public function getShare($id) {
                if (!$this->shareManager->shareApiEnabled()) {
-                       return new \OC_OCS_Result(null, 404, $this->l->t('Share API is disabled'));
+                       return [
+                               'statuscode' => 404,
+                               'message' => $this->l->t('Share API is disabled')
+                       ];
                }
 
                try {
                        $share = $this->getShareById($id);
                } catch (ShareNotFound $e) {
-                       return new \OC_OCS_Result(null, 404, $this->l->t('Wrong share ID, share doesn\'t exist'));
+                       return [
+                               'statuscode' => 404,
+                               'message' => $this->l->t('Wrong share ID, share doesn\'t exist'),
+                       ];
                }
 
                if ($this->canAccessShare($share)) {
                        try {
                                $share = $this->formatShare($share);
-                               return new \OC_OCS_Result([$share]);
+                               return [
+                                       'data' => [$share],
+                               ];
                        } catch (NotFoundException $e) {
                                //Fall trough
                        }
                }
 
-               return new \OC_OCS_Result(null, 404, $this->l->t('Wrong share ID, share doesn\'t exist'));
+               return [
+                       'statuscode' => 404,
+                       'message' => $this->l->t('Wrong share ID, share doesn\'t exist')
+               ];
        }
 
        /**
         * Delete a share
         *
+        * @NoAdminRequired
+        *
         * @param string $id
-        * @return \OC_OCS_Result
+        * @return \OC\OCS\Result
         */
        public function deleteShare($id) {
                if (!$this->shareManager->shareApiEnabled()) {
-                       return new \OC_OCS_Result(null, 404, $this->l->t('Share API is disabled'));
+                       return [
+                               'statuscode' => 404,
+                               'message' => $this->l->t('Share API is disabled')
+                       ];
                }
 
                try {
                        $share = $this->getShareById($id);
                } catch (ShareNotFound $e) {
-                       return new \OC_OCS_Result(null, 404, $this->l->t('Wrong share ID, share doesn\'t exist'));
+                       return [
+                               'statuscode' => 404,
+                               'message' => $this->l->t('Wrong share ID, share doesn\'t exist')
+                       ];
                }
 
                try {
                        $share->getNode()->lock(ILockingProvider::LOCK_SHARED);
                } catch (LockedException $e) {
-                       return new \OC_OCS_Result(null, 404, 'could not delete share');
+                       return [
+                               'statuscode' => 404,
+                               'message' => $this->l->t('could not delete share')
+                       ];
                }
 
                if (!$this->canAccessShare($share, false)) {
                        $share->getNode()->unlock(ILockingProvider::LOCK_SHARED);
-                       return new \OC_OCS_Result(null, 404, $this->l->t('Could not delete share'));
+                       return [
+                               'statuscode' => 404,
+                               'message' => $this->l->t('Could not delete share')
+                       ];
                }
 
                $this->shareManager->deleteShare($share);
 
                $share->getNode()->unlock(ILockingProvider::LOCK_SHARED);
 
-               return new \OC_OCS_Result();
+               return [];
        }
 
        /**
-        * @return \OC_OCS_Result
+        * @NoAdminRequired
+        *
+        * @return array
         */
        public function createShare() {
                $share = $this->shareManager->newShare();
 
                if (!$this->shareManager->shareApiEnabled()) {
-                       return new \OC_OCS_Result(null, 404, $this->l->t('Share API is disabled'));
+                       return [
+                               'statuscode' => 404,
+                               'message' => $this->l->t('Share API is disabled')
+                       ];
                }
 
                // Verify path
                $path = $this->request->getParam('path', null);
                if ($path === null) {
-                       return new \OC_OCS_Result(null, 404, $this->l->t('Please specify a file or folder path'));
+                       return [
+                               'statuscode' => 404,
+                               'message' => $this->l->t('Please specify a file or folder path')
+                       ];
                }
 
                $userFolder = $this->rootFolder->getUserFolder($this->currentUser->getUID());
                try {
                        $path = $userFolder->get($path);
                } catch (NotFoundException $e) {
-                       return new \OC_OCS_Result(null, 404, $this->l->t('Wrong path, file/folder doesn\'t exist'));
+                       return [
+                               'statuscode' => 404,
+                               'messagecode' => $this->l->t('Wrong path, file/folder doesn\'t exist')
+                       ];
                }
 
                $share->setNode($path);
@@ -264,7 +307,10 @@ class Share20OCS {
                try {
                        $share->getNode()->lock(ILockingProvider::LOCK_SHARED);
                } catch (LockedException $e) {
-                       return new \OC_OCS_Result(null, 404, 'Could not create share');
+                       return [
+                               'statuscode' => 404,
+                               'message' => $this->l->t('Could not create share')
+                       ];
                }
 
                // Parse permissions (if available)
@@ -277,7 +323,10 @@ class Share20OCS {
 
                if ($permissions < 0 || $permissions > \OCP\Constants::PERMISSION_ALL) {
                        $share->getNode()->unlock(ILockingProvider::LOCK_SHARED);
-                       return new \OC_OCS_Result(null, 404, 'invalid permissions');
+                       return [
+                               'statuscode' => 404,
+                               'message' => 'invalid permissions'
+                       ];
                }
 
                // Shares always require read permissions
@@ -305,20 +354,29 @@ class Share20OCS {
                        // Valid user is required to share
                        if ($shareWith === null || !$this->userManager->userExists($shareWith)) {
                                $share->getNode()->unlock(ILockingProvider::LOCK_SHARED);
-                               return new \OC_OCS_Result(null, 404, $this->l->t('Please specify a valid user'));
+                               return [
+                                       'statuscode' => 404,
+                                       'message' => $this->l->t('Please specify a valid user')
+                               ];
                        }
                        $share->setSharedWith($shareWith);
                        $share->setPermissions($permissions);
                } else if ($shareType === \OCP\Share::SHARE_TYPE_GROUP) {
                        if (!$this->shareManager->allowGroupSharing()) {
                                $share->getNode()->unlock(ILockingProvider::LOCK_SHARED);
-                               return new \OC_OCS_Result(null, 404, $this->l->t('Group sharing is disabled by the administrator'));
+                               return [
+                                       'statuscode' => 404,
+                                       'message' => $this->l->t('Group sharing is disabled by the administrator')
+                               ];
                        }
 
                        // Valid group is required to share
                        if ($shareWith === null || !$this->groupManager->groupExists($shareWith)) {
                                $share->getNode()->unlock(ILockingProvider::LOCK_SHARED);
-                               return new \OC_OCS_Result(null, 404, $this->l->t('Please specify a valid group'));
+                               return [
+                                       'statuscode' => 404,
+                                       'message' => $this->l->t('Please specify a valid group')
+                               ];
                        }
                        $share->setSharedWith($shareWith);
                        $share->setPermissions($permissions);
@@ -326,7 +384,10 @@ class Share20OCS {
                        //Can we even share links?
                        if (!$this->shareManager->shareApiAllowLinks()) {
                                $share->getNode()->unlock(ILockingProvider::LOCK_SHARED);
-                               return new \OC_OCS_Result(null, 404, $this->l->t('Public link sharing is disabled by the administrator'));
+                               return [
+                                       'statuscode' => 404,
+                                       'message' => $this->l->t('Public link sharing is disabled by the administrator')
+                               ];
                        }
 
                        /*
@@ -336,7 +397,7 @@ class Share20OCS {
                        $existingShares = $this->shareManager->getSharesBy($this->currentUser->getUID(), \OCP\Share::SHARE_TYPE_LINK, $path, false, 1, 0);
                        if (!empty($existingShares)) {
                                $share->getNode()->unlock(ILockingProvider::LOCK_SHARED);
-                               return new \OC_OCS_Result($this->formatShare($existingShares[0]));
+                               return ['data' => $this->formatShare($existingShares[0])];
                        }
 
                        $publicUpload = $this->request->getParam('publicUpload', null);
@@ -344,13 +405,19 @@ class Share20OCS {
                                // Check if public upload is allowed
                                if (!$this->shareManager->shareApiLinkAllowPublicUpload()) {
                                        $share->getNode()->unlock(ILockingProvider::LOCK_SHARED);
-                                       return new \OC_OCS_Result(null, 403, $this->l->t('Public upload disabled by the administrator'));
+                                       return [
+                                               'statuscode' => 403,
+                                               'message' => $this->l->t('Public upload disabled by the administrator')
+                                       ];
                                }
 
                                // Public upload can only be set for folders
                                if ($path instanceof \OCP\Files\File) {
                                        $share->getNode()->unlock(ILockingProvider::LOCK_SHARED);
-                                       return new \OC_OCS_Result(null, 404, $this->l->t('Public upload is only possible for publicly shared folders'));
+                                       return [
+                                               'statuscode' => 404,
+                                               'message' => $this->l->t('Public upload is only possible for publicly shared folders')
+                                       ];
                                }
 
                                $share->setPermissions(
@@ -379,21 +446,30 @@ class Share20OCS {
                                        $share->setExpirationDate($expireDate);
                                } catch (\Exception $e) {
                                        $share->getNode()->unlock(ILockingProvider::LOCK_SHARED);
-                                       return new \OC_OCS_Result(null, 404, $this->l->t('Invalid date, date format must be YYYY-MM-DD'));
+                                       return [
+                                               'statuscode' => 404,
+                                               'message' => $this->l->t('Invalid date, date format must be YYYY-MM-DD')
+                                       ];
                                }
                        }
 
                } else if ($shareType === \OCP\Share::SHARE_TYPE_REMOTE) {
                        if (!$this->shareManager->outgoingServer2ServerSharesAllowed()) {
                                $share->getNode()->unlock(ILockingProvider::LOCK_SHARED);
-                               return new \OC_OCS_Result(null, 403, $this->l->t('Sharing %s failed because the back end does not allow shares from type %s', [$path->getPath(), $shareType]));
+                               return [
+                                       'statuscode' => 403,
+                                       'message' => $this->l->t('Sharing %s failed because the back end does not allow shares from type %s', [$path->getPath(), $shareType])
+                               ];
                        }
 
                        $share->setSharedWith($shareWith);
                        $share->setPermissions($permissions);
                } else {
                        $share->getNode()->unlock(ILockingProvider::LOCK_SHARED);
-                       return new \OC_OCS_Result(null, 400, $this->l->t('Unknown share type'));
+                       return [
+                               'statuscode' => 400,
+                               $this->l->t('Unknown share type')
+                       ];
                }
 
                $share->setShareType($shareType);
@@ -404,22 +480,28 @@ class Share20OCS {
                } catch (GenericShareException $e) {
                        $code = $e->getCode() === 0 ? 403 : $e->getCode();
                        $share->getNode()->unlock(ILockingProvider::LOCK_SHARED);
-                       return new \OC_OCS_Result(null, $code, $e->getHint());
+                       return [
+                               'statuscode' => $code,
+                               'message' => $e->getHint()
+                       ];
                }catch (\Exception $e) {
                        $share->getNode()->unlock(ILockingProvider::LOCK_SHARED);
-                       return new \OC_OCS_Result(null, 403, $e->getMessage());
+                       return [
+                               'statuscode' => 403,
+                               'message' => $e->getMessage()
+                       ];
                }
 
                $output = $this->formatShare($share);
 
                $share->getNode()->unlock(\OCP\Lock\ILockingProvider::LOCK_SHARED);
 
-               return new \OC_OCS_Result($output);
+               return ['data' => $output];
        }
 
        /**
         * @param \OCP\Files\File|\OCP\Files\Folder $node
-        * @return \OC_OCS_Result
+        * @return array
         */
        private function getSharedWithMe($node = null) {
                $userShares = $this->shareManager->getSharedWith($this->currentUser->getUID(), \OCP\Share::SHARE_TYPE_USER, $node, -1, 0);
@@ -438,16 +520,19 @@ class Share20OCS {
                        }
                }
 
-               return new \OC_OCS_Result($formatted);
+               return ['data' => $formatted];
        }
 
        /**
         * @param \OCP\Files\Folder $folder
-        * @return \OC_OCS_Result
+        * @return array
         */
        private function getSharesInDir($folder) {
                if (!($folder instanceof \OCP\Files\Folder)) {
-                       return new \OC_OCS_Result(null, 400, $this->l->t('Not a directory'));
+                       return [
+                               'statuscode' => 400,
+                               'message' => $this->l->t('Not a directory')
+                       ];
                }
 
                $nodes = $folder->getDirectoryListing();
@@ -471,23 +556,25 @@ class Share20OCS {
                        }
                }
 
-               return new \OC_OCS_Result($formatted);
+               return ['data' => $formatted];
        }
 
        /**
         * The getShares function.
         *
+        * @NoAdminRequired
+        *
         * - Get shares by the current user
         * - Get shares by the current user and reshares (?reshares=true)
         * - Get shares with the current user (?shared_with_me=true)
         * - Get shares for a specific path (?path=...)
         * - Get all shares in a folder (?subfiles=true&path=..)
         *
-        * @return \OC_OCS_Result
+        * @return array
         */
        public function getShares() {
                if (!$this->shareManager->shareApiEnabled()) {
-                       return new \OC_OCS_Result();
+                       return [];
                }
 
                $sharedWithMe = $this->request->getParam('shared_with_me', null);
@@ -501,9 +588,15 @@ class Share20OCS {
                                $path = $userFolder->get($path);
                                $path->lock(ILockingProvider::LOCK_SHARED);
                        } catch (\OCP\Files\NotFoundException $e) {
-                               return new \OC_OCS_Result(null, 404, $this->l->t('Wrong path, file/folder doesn\'t exist'));
+                               return [
+                                       'statuscode' => 404,
+                                       'message' => $this->l->t('Wrong path, file/folder doesn\'t exist')
+                               ];
                        } catch (LockedException $e) {
-                               return new \OC_OCS_Result(null, 404, $this->l->t('Could not lock path'));
+                               return [
+                                       'statuscode' => 404,
+                                       'message' => $this->l->t('Could not lock path')
+                               ];
                        }
                }
 
@@ -553,29 +646,40 @@ class Share20OCS {
                        $path->unlock(ILockingProvider::LOCK_SHARED);
                }
 
-               return new \OC_OCS_Result($formatted);
+               return ['data' => $formatted];
        }
 
        /**
+        * @NoAdminRequired
+        *
         * @param int $id
-        * @return \OC_OCS_Result
+        * @return array
         */
        public function updateShare($id) {
                if (!$this->shareManager->shareApiEnabled()) {
-                       return new \OC_OCS_Result(null, 404, $this->l->t('Share API is disabled'));
+                       return [
+                               'statuscode' => 404,
+                               'message' => $this->l->t('Share API is disabled')
+                       ];
                }
 
                try {
                        $share = $this->getShareById($id);
                } catch (ShareNotFound $e) {
-                       return new \OC_OCS_Result(null, 404, $this->l->t('Wrong share ID, share doesn\'t exist'));
+                       return [
+                               'statuscode' => 404,
+                               'message' => $this->l->t('Wrong share ID, share doesn\'t exist')
+                       ];
                }
 
                $share->getNode()->lock(\OCP\Lock\ILockingProvider::LOCK_SHARED);
 
                if (!$this->canAccessShare($share, false)) {
                        $share->getNode()->unlock(ILockingProvider::LOCK_SHARED);
-                       return new \OC_OCS_Result(null, 404, $this->l->t('Wrong share ID, share doesn\'t exist'));
+                       return [
+                               'statuscode' => 404,
+                               'message' => $this->l->t('Wrong share ID, share doesn\'t exist')
+                       ];
                }
 
                $permissions = $this->request->getParam('permissions', null);
@@ -589,7 +693,10 @@ class Share20OCS {
                if ($share->getShareType() === \OCP\Share::SHARE_TYPE_LINK) {
                        if ($permissions === null && $password === null && $publicUpload === null && $expireDate === null) {
                                $share->getNode()->unlock(ILockingProvider::LOCK_SHARED);
-                               return new \OC_OCS_Result(null, 400, 'Wrong or no update parameter given');
+                               return [
+                                       'statuscode' => 400,
+                                       'message' => 'Wrong or no update parameter given'
+                               ];
                        }
 
                        $newPermissions = null;
@@ -612,7 +719,10 @@ class Share20OCS {
                                ])
                        ) {
                                $share->getNode()->unlock(ILockingProvider::LOCK_SHARED);
-                               return new \OC_OCS_Result(null, 400, $this->l->t('Can\'t change permissions for public share links'));
+                               return [
+                                       'statuscode' => 400,
+                                       'message' => $this->l->t('Can\'t change permissions for public share links')
+                               ];
                        }
 
                        if (
@@ -623,12 +733,18 @@ class Share20OCS {
                        ) {
                                if (!$this->shareManager->shareApiLinkAllowPublicUpload()) {
                                        $share->getNode()->unlock(ILockingProvider::LOCK_SHARED);
-                                       return new \OC_OCS_Result(null, 403, $this->l->t('Public upload disabled by the administrator'));
+                                       return [
+                                               'statuscode' => 403,
+                                               'message' => $this->l->t('Public upload disabled by the administrator')
+                                       ];
                                }
 
                                if (!($share->getNode() instanceof \OCP\Files\Folder)) {
                                        $share->getNode()->unlock(ILockingProvider::LOCK_SHARED);
-                                       return new \OC_OCS_Result(null, 400, $this->l->t('Public upload is only possible for publicly shared folders'));
+                                       return [
+                                               'statuscode' => 400,
+                                               'message' => $this->l->t('Public upload is only possible for publicly shared folders')
+                                       ];
                                }
 
                                // normalize to correct public upload permissions
@@ -646,7 +762,10 @@ class Share20OCS {
                                        $expireDate = $this->parseDate($expireDate);
                                } catch (\Exception $e) {
                                        $share->getNode()->unlock(ILockingProvider::LOCK_SHARED);
-                                       return new \OC_OCS_Result(null, 400, $e->getMessage());
+                                       return [
+                                               'statuscode' => 400,
+                                               'message' => $e->getMessage()
+                                       ];
                                }
                                $share->setExpirationDate($expireDate);
                        }
@@ -661,7 +780,10 @@ class Share20OCS {
                        // For other shares only permissions is valid.
                        if ($permissions === null) {
                                $share->getNode()->unlock(ILockingProvider::LOCK_SHARED);
-                               return new \OC_OCS_Result(null, 400, $this->l->t('Wrong or no update parameter given'));
+                               return [
+                                       'statuscode' => 400,
+                                       'message' => $this->l->t('Wrong or no update parameter given')
+                               ];
                        } else {
                                $permissions = (int)$permissions;
                                $share->setPermissions($permissions);
@@ -681,7 +803,10 @@ class Share20OCS {
 
                                if ($share->getPermissions() & ~$maxPermissions) {
                                        $share->getNode()->unlock(ILockingProvider::LOCK_SHARED);
-                                       return new \OC_OCS_Result(null, 404, $this->l->t('Cannot increase permissions'));
+                                       return [
+                                               'statuscode' => 404,
+                                               'message' => $this->l->t('Cannot increase permissions')
+                                       ];
                                }
                        }
                }
@@ -691,12 +816,15 @@ class Share20OCS {
                        $share = $this->shareManager->updateShare($share);
                } catch (\Exception $e) {
                        $share->getNode()->unlock(ILockingProvider::LOCK_SHARED);
-                       return new \OC_OCS_Result(null, 400, $e->getMessage());
+                       return [
+                               'statuscode' => 400,
+                               'message' => $e->getMessage()
+                       ];
                }
 
                $share->getNode()->unlock(\OCP\Lock\ILockingProvider::LOCK_SHARED);
 
-               return new \OC_OCS_Result($this->formatShare($share));
+               return ['data' => $this->formatShare($share)];
        }
 
        /**
index aff42cd43dcfa765b59e94c551a652876cab7062..d028cc917f86f25cdc6b8e94cc19fbe430d451f2 100644 (file)
@@ -28,6 +28,7 @@
 namespace OCA\Files_Sharing\AppInfo;
 
 use OCA\FederatedFileSharing\DiscoveryManager;
+use OCA\Files_Sharing\API\Share20OCS;
 use OCA\Files_Sharing\MountProvider;
 use OCP\AppFramework\App;
 use OC\AppFramework\Utility\SimpleContainer;
@@ -35,7 +36,6 @@ use OCA\Files_Sharing\Controllers\ExternalSharesController;
 use OCA\Files_Sharing\Controllers\ShareController;
 use OCA\Files_Sharing\Middleware\SharingCheckMiddleware;
 use \OCP\IContainer;
-use OCA\Files_Sharing\Capabilities;
 
 class Application extends App {
        public function __construct(array $urlParams = array()) {
@@ -73,6 +73,19 @@ class Application extends App {
                                $c->query('HttpClientService')
                        );
                });
+               $container->registerService('ShareAPIController', function (SimpleContainer $c) use ($server) {
+                       return new Share20OCS(
+                               $c->query('AppName'),
+                               $c->query('Request'),
+                               $server->getShareManager(),
+                               $server->getGroupManager(),
+                               $server->getUserManager(),
+                               $server->getRootFolder(),
+                               $server->getURLGenerator(),
+                               $server->getUserSession()->getUser(),
+                               $server->getL10N($c->query('AppName'))
+                       );
+               });
 
                /**
                 * Core class wrappers