diff options
Diffstat (limited to 'apps/files_versions/lib')
-rw-r--r-- | apps/files_versions/lib/Events/CreateVersionEvent.php | 4 | ||||
-rw-r--r-- | apps/files_versions/lib/Sabre/Plugin.php | 83 | ||||
-rw-r--r-- | apps/files_versions/lib/Sabre/VersionFile.php | 4 |
3 files changed, 88 insertions, 3 deletions
diff --git a/apps/files_versions/lib/Events/CreateVersionEvent.php b/apps/files_versions/lib/Events/CreateVersionEvent.php index 90d907147dd..0669034431b 100644 --- a/apps/files_versions/lib/Events/CreateVersionEvent.php +++ b/apps/files_versions/lib/Events/CreateVersionEvent.php @@ -24,10 +24,8 @@ namespace OCA\Files_Versions\Events; - use OCP\Files\Node; -use Symfony\Component\EventDispatcher\Event; - +use OCP\EventDispatcher\Event; /** * Class CreateVersionEvent diff --git a/apps/files_versions/lib/Sabre/Plugin.php b/apps/files_versions/lib/Sabre/Plugin.php new file mode 100644 index 00000000000..771d71696a9 --- /dev/null +++ b/apps/files_versions/lib/Sabre/Plugin.php @@ -0,0 +1,83 @@ +<?php +declare(strict_types=1); +/** + * @copyright Copyright (c) 2019, Roeland Jago Douma <roeland@famdouma.nl> + * + * @author Roeland Jago Douma <roeland@famdouma.nl> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\Files_Versions\Sabre; + +use OC\AppFramework\Http\Request; +use OCP\IRequest; +use Sabre\DAV\Exception\NotFound; +use Sabre\DAV\Server; +use Sabre\DAV\ServerPlugin; +use Sabre\HTTP\RequestInterface; +use Sabre\HTTP\ResponseInterface; + +class Plugin extends ServerPlugin { + + /** @var Server */ + private $server; + /** @var IRequest */ + private $request; + + function __construct(IRequest $request) { + $this->request = $request; + } + + function initialize(Server $server) { + $this->server = $server; + + $server->on('afterMethod:GET', [$this, 'afterGet']); + } + + public function afterGet(RequestInterface $request, ResponseInterface $response) { + $path = $request->getPath(); + if (strpos($path, 'versions') !== 0) { + return; + } + + try { + $node = $this->server->tree->getNodeForPath($path); + } catch (NotFound $e) { + return; + } + + if (!($node instanceof VersionFile)) { + return; + } + + $filename = $node->getVersion()->getSourceFileName(); + + if ($this->request->isUserAgent( + [ + Request::USER_AGENT_IE, + Request::USER_AGENT_ANDROID_MOBILE_CHROME, + Request::USER_AGENT_FREEBOX, + ])) { + $response->addHeader('Content-Disposition', 'attachment; filename="' . rawurlencode($filename) . '"'); + } else { + $response->addHeader('Content-Disposition', 'attachment; filename*=UTF-8\'\'' . rawurlencode($filename) + . '; filename="' . rawurlencode($filename) . '"'); + } + } + +} diff --git a/apps/files_versions/lib/Sabre/VersionFile.php b/apps/files_versions/lib/Sabre/VersionFile.php index 2d630008d2a..ac28e0fd877 100644 --- a/apps/files_versions/lib/Sabre/VersionFile.php +++ b/apps/files_versions/lib/Sabre/VersionFile.php @@ -86,4 +86,8 @@ class VersionFile implements IFile { public function rollBack() { $this->versionManager->rollback($this->version); } + + public function getVersion(): IVersion { + return $this->version; + } } |