diff --git a/controller/documentcontroller.php b/controller/documentcontroller.php index 56167e8c..91e6ac2b 100644 --- a/controller/documentcontroller.php +++ b/controller/documentcontroller.php @@ -423,17 +423,23 @@ class DocumentController extends Controller { return false; } + // Login the user to see his mount locations + $this->loginUser($res['owner']); + $view = new \OC\Files\View('/' . $res['owner'] . '/files'); $info = $view->getFileInfo($res['path']); - \OC::$server->getLogger()->debug('File info: {info}.', [ 'app' => $this->appName, 'info' => $info ]); - - $baseFileName = $info['name']; - $size = $info['size']; + // Close the session created for user login + \OC::$server->getSession()->close(); + if (!$info) { + http_response_code(404); + return false; + } + \OC::$server->getLogger()->debug('File info: {info}.', [ 'app' => $this->appName, 'info' => $info ]); return array( - 'BaseFileName' => $baseFileName, - 'Size' => $size, + 'BaseFileName' => $info['name'], + 'Size' => $info['size'], 'Version' => $version //'DownloadUrl' => '', //'FileUrl' => '', @@ -464,26 +470,32 @@ class DocumentController extends Controller { //TODO: Support X-WOPIMaxExpectedSize header. $res = $row->getPathForToken($fileId, $version, $token); + $ownerid = $res['owner']; + // Login the user to see his mount locations + $this->loginUser($ownerid); + + $filename = ''; // If some previous version is requested, fetch it from Files_Version app if ($version !== '0') { \OCP\JSON::checkAppEnabled('files_versions'); - $ownerid = $res['owner']; - // Setup the FS \OC_Util::tearDownFS(); \OC_Util::setupFS($ownerid, '/' . $ownerid . '/files'); - list($owner_uid, $filename) = \OCA\Files_Versions\Storage::getUidAndFilename($res['path']); - $versionName = '/files_versions/' . $filename . '.v' . $version; + list($ownerid, $filename) = \OCA\Files_Versions\Storage::getUidAndFilename($res['path']); + $filename = '/files_versions/' . $filename . '.v' . $version; \OC_Util::tearDownFS(); - - return new DownloadResponse($this->request, $owner_uid, $versionName); + } else { + $filename = '/files' . $res['path']; } - return new DownloadResponse($this->request, $res['owner'], '/files' . $res['path']); + // Close the session created for user login + \OC::$server->getSession()->close(); + + return new DownloadResponse($this->request, $ownerid, $filename); } /** diff --git a/lib/db/wopi.php b/lib/db/wopi.php index 423e5038..c8b96d0f 100644 --- a/lib/db/wopi.php +++ b/lib/db/wopi.php @@ -120,15 +120,6 @@ class Wopi extends \OCA\Richdocuments\Db{ return false; } - $owner = $row['owner_uid']; - $view = new \OC\Files\View('/' . $owner . '/files'); - $path = $row['path']; - - if (!$view->is_file($path)) { - throw new \Exception('Invalid file path.'); - } - - $editor = $row['editor_uid']; - return array('owner' => $owner, 'editor' => $editor, 'path' => $path); + return array('owner' => $row['owner_uid'], 'editor' => $row['editor_uid'], 'path' => $row['path']); } }