Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/ONLYOFFICE/onlyoffice-nextcloud.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Linnik <sergey.linnik@onlyoffice.com>2022-07-20 11:55:11 +0300
committerSergey Linnik <sergey.linnik@onlyoffice.com>2022-07-20 11:55:11 +0300
commit17ef049cc95675cd734c317c6db620632c5cbe12 (patch)
tree4b333177850d6ee45c226f5865e072debc4b7730
parentc63385e123dcbe63ea6d5f669cd0adb9410b8c32 (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.php11
-rw-r--r--appinfo/routes.php3
-rw-r--r--controller/desktopapicontroller.php115
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 "";
+ }
+}