diff options
author | Sergey Linnik <sergey.linnik@onlyoffice.com> | 2022-07-20 11:55:11 +0300 |
---|---|---|
committer | Sergey Linnik <sergey.linnik@onlyoffice.com> | 2022-07-20 11:55:11 +0300 |
commit | 17ef049cc95675cd734c317c6db620632c5cbe12 (patch) | |
tree | 4b333177850d6ee45c226f5865e072debc4b7730 | |
parent | c63385e123dcbe63ea6d5f669cd0adb9410b8c32 (diff) |
added file upload method to user folder with link to editor in response for saving to cloud from desktopfeature/desktop-upload
-rw-r--r-- | appinfo/application.php | 11 | ||||
-rw-r--r-- | appinfo/routes.php | 3 | ||||
-rw-r--r-- | controller/desktopapicontroller.php | 115 |
3 files changed, 128 insertions, 1 deletions
diff --git a/appinfo/application.php b/appinfo/application.php index 378972d..01ccd68 100644 --- a/appinfo/application.php +++ b/appinfo/application.php @@ -42,6 +42,7 @@ use OCA\Viewer\Event\LoadViewer; use OCA\Onlyoffice\AppConfig; use OCA\Onlyoffice\Controller\CallbackController; +use OCA\Onlyoffice\Controller\DesktopApiController; use OCA\Onlyoffice\Controller\EditorController; use OCA\Onlyoffice\Controller\EditorApiController; use OCA\Onlyoffice\Controller\SharingApiController; @@ -223,6 +224,16 @@ class Application extends App implements IBootstrap { ); }); + $context->registerService("DesktopApiController", function (ContainerInterface $c) { + return new DesktopApiController( + $c->get("AppName"), + $c->get("Request"), + $c->get("RootStorage"), + $c->get("Logger"), + $c->get("UserSession") + ); + }); + $context->registerEventListener(LoadAdditionalScriptsEvent::class, FilesListener::class); $context->registerEventListener(RegisterDirectEditorEvent::class, DirectEditorListener::class); $context->registerEventListener(LoadViewer::class, ViewerListener::class); diff --git a/appinfo/routes.php b/appinfo/routes.php index e2ab78e..c053cab 100644 --- a/appinfo/routes.php +++ b/appinfo/routes.php @@ -50,6 +50,7 @@ return [ ["name" => "federation#keylock", "url" => "/api/v1/keylock", "verb" => "POST"], ["name" => "editorapi#config", "url" => "/api/v1/config/{fileId}", "verb" => "GET"], ["name" => "sharingapi#get_shares", "url" => "/api/v1/shares/{fileId}", "verb" => "GET"], - ["name" => "sharingapi#set_shares", "url" => "/api/v1/shares", "verb" => "PUT"] + ["name" => "sharingapi#set_shares", "url" => "/api/v1/shares", "verb" => "PUT"], + ["name" => "desktopapi#upload", "url" => "/api/v1/upload", "verb" => "POST"] ] ];
\ No newline at end of file diff --git a/controller/desktopapicontroller.php b/controller/desktopapicontroller.php new file mode 100644 index 0000000..a8872e6 --- /dev/null +++ b/controller/desktopapicontroller.php @@ -0,0 +1,115 @@ +<?php +/** + * + * (c) Copyright Ascensio System SIA 2022 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +namespace OCA\Onlyoffice\Controller; + +use OCP\AppFramework\Http\JSONResponse; +use OCP\AppFramework\OCSController; +use OCP\ILogger; +use OCP\IRequest; +use OCP\Files\IRootFolder; + +/** + * OCS handler + */ +class DesktopApiController extends OCSController { + + /** + * Root folder + * + * @var IRootFolder + */ + private $root; + + /** + * Logger + * + * @var ILogger + */ + private $logger; + + /** + * @param string $AppName - application name + * @param IRequest $request - request object + * @param IRootFolder $root - root folder + * @param ILogger $logger - logger + */ + public function __construct($AppName, + IRequest $request, + IRootFolder $root, + ILogger $logger + ) { + parent::__construct($AppName, $request); + + $this->root = $root; + $this->logger = $logger; + } + + /** + * Get shares for file + * + * @return JSONResponse + * + * @NoAdminRequired + * @NoCSRFRequired + */ + public function upload() { + $this->logger->debug("desktopapi request", ["app" => $this->appName]); + + $contentDisposition = $this->request->getHeader("Content-Disposition"); + $fileName = $this->getFileNameFromContentDisposition($contentDisposition); + + // save to user folder + + $response = [ + "id" => "", + "url" => "" + ] + return new JSONResponse($response); + } + + /** + * Get file name from Content-Disposition header value + * + * @param string $contentDisposition - Content-Disposition header + * + * @return string + */ + private function getFileNameFromContentDisposition($contentDisposition) { + if (empty($contentDisposition)) { + return ""; + } + + $splitItems = explode(";", $contentDisposition); + + foreach($splitItems as $item) { + $keyValue = explode("=", $item); + if (count($keyValue) === 2) { + $key = trim($keyValue[0]); + if (strtolower($key) === "filename") { + $value = trim($keyValue[1]); + $value = trim($value, "'\""); + return $value; + } + } + } + + return ""; + } +} |