summaryrefslogtreecommitdiffstats
path: root/apps/files_external/lib/Controller/ApiController.php
diff options
context:
space:
mode:
authorRoeland Jago Douma <roeland@famdouma.nl>2018-01-17 20:00:09 +0100
committerRoeland Jago Douma <roeland@famdouma.nl>2018-01-18 11:15:03 +0100
commit05f75f803a104e5dbcf11a112122c1232e49f8fd (patch)
tree68e463b88f61d1896970a7dbf8b9e5dc2211e7c4 /apps/files_external/lib/Controller/ApiController.php
parent6e29b8731e25526442d9b878a5a6ae75afc4075e (diff)
downloadnextcloud-server-05f75f803a104e5dbcf11a112122c1232e49f8fd.tar.gz
nextcloud-server-05f75f803a104e5dbcf11a112122c1232e49f8fd.zip
[files_external] OCS endpoint to proper OCSController
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
Diffstat (limited to 'apps/files_external/lib/Controller/ApiController.php')
-rw-r--r--apps/files_external/lib/Controller/ApiController.php108
1 files changed, 108 insertions, 0 deletions
diff --git a/apps/files_external/lib/Controller/ApiController.php b/apps/files_external/lib/Controller/ApiController.php
new file mode 100644
index 00000000000..8be623c5eee
--- /dev/null
+++ b/apps/files_external/lib/Controller/ApiController.php
@@ -0,0 +1,108 @@
+<?php
+declare(strict_types=1);
+/**
+ * @copyright Copyright (c) 2016, ownCloud, Inc.
+ *
+ * @author Jesús Macias <jmacias@solidgear.es>
+ * @author Joas Schilling <coding@schilljs.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Robin Appelman <robin@icewind.nl>
+ * @author Robin McCorkell <robin@mccorkell.me.uk>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ * @author Vincent Petry <pvince81@owncloud.com>
+ *
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * 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, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace OCA\Files_External\Controller;
+
+use OCP\AppFramework\Http\DataResponse;
+use OCP\AppFramework\OCSController;
+use OCP\IRequest;
+use OCP\IUserSession;
+
+class ApiController extends OCSController {
+
+ /** @var IUserSession */
+ private $userSession;
+
+ public function __construct(string $appName,
+ IRequest $request,
+ IUserSession $userSession) {
+ parent::__construct($appName, $request);
+
+ $this->userSession = $userSession;
+ }
+
+ /**
+ * Formats the given mount config to a mount entry.
+ *
+ * @param string $mountPoint mount point name, relative to the data dir
+ * @param array $mountConfig mount config to format
+ *
+ * @return array entry
+ */
+ private function formatMount(string $mountPoint, array $mountConfig): array {
+ // strip "/$user/files" from mount point
+ $mountPoint = explode('/', trim($mountPoint, '/'), 3);
+ $mountPoint = $mountPoint[2] ?? '';
+
+ // split path from mount point
+ $path = \dirname($mountPoint);
+ if ($path === '.') {
+ $path = '';
+ }
+
+ $isSystemMount = !$mountConfig['personal'];
+
+ $permissions = \OCP\Constants::PERMISSION_READ;
+ // personal mounts can be deleted
+ if (!$isSystemMount) {
+ $permissions |= \OCP\Constants::PERMISSION_DELETE;
+ }
+
+ $entry = array(
+ 'name' => basename($mountPoint),
+ 'path' => $path,
+ 'type' => 'dir',
+ 'backend' => $mountConfig['backend'],
+ 'scope' => $isSystemMount ? 'system' : 'personal',
+ 'permissions' => $permissions,
+ 'id' => $mountConfig['id'],
+ 'class' => $mountConfig['class']
+ );
+ return $entry;
+ }
+
+ /**
+ * @NoAdminRequired
+ *
+ * Returns the mount points visible for this user.
+ *
+ * @return DataResponse share information
+ */
+ public function getUserMounts(): DataResponse {
+ $entries = [];
+ $user = $this->userSession->getUser()->getUID();
+
+ $mounts = \OC_Mount_Config::getAbsoluteMountPoints($user);
+ foreach($mounts as $mountPoint => $mount) {
+ $entries[] = $this->formatMount($mountPoint, $mount);
+ }
+
+ return new DataResponse($entries);
+ }
+}