Move public preview endpoint over

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
This commit is contained in:
Roeland Jago Douma 2018-05-23 10:50:44 +02:00
parent 53a1b9a84e
commit 366981fba6
No known key found for this signature in database
GPG Key ID: F941078878347C0C
6 changed files with 44 additions and 26 deletions

View File

@ -34,13 +34,7 @@ return [
], ],
[ [
'name' => 'PublicPreview#getPreview', 'name' => 'PublicPreview#getPreview',
'url' => '/publicpreview', 'url' => '/publicpreview/{token}',
'verb' => 'GET',
],
[
'name' => 'PublicPreview#getPreview',
'url' => '/ajax/publicpreview.php',
'verb' => 'GET', 'verb' => 'GET',
], ],

View File

@ -112,7 +112,6 @@ OCA.Sharing.PublicApp = {
y: Math.ceil(previewHeight * window.devicePixelRatio), y: Math.ceil(previewHeight * window.devicePixelRatio),
a: 'true', a: 'true',
file: encodeURIComponent(this.initialDir + $('#filename').val()), file: encodeURIComponent(this.initialDir + $('#filename').val()),
t: token,
scalingup: 0 scalingup: 0
}; };
@ -150,7 +149,7 @@ OCA.Sharing.PublicApp = {
} else if ((previewSupported === 'true' && mimetype.substr(0, mimetype.indexOf('/')) !== 'video') || } else if ((previewSupported === 'true' && mimetype.substr(0, mimetype.indexOf('/')) !== 'video') ||
mimetype.substr(0, mimetype.indexOf('/')) === 'image' && mimetype.substr(0, mimetype.indexOf('/')) === 'image' &&
mimetype !== 'image/svg+xml') { mimetype !== 'image/svg+xml') {
img.attr('src', OC.filePath('files_sharing', 'ajax', 'publicpreview.php') + '?' + OC.buildQueryString(params)); img.attr('src', OC.linkTo('files_sharing', '/publicpreview/'+token) + '?' + OC.buildQueryString(params));
imgcontainer.appendTo('#imgframe'); imgcontainer.appendTo('#imgframe');
} else if (mimetype.substr(0, mimetype.indexOf('/')) !== 'video') { } else if (mimetype.substr(0, mimetype.indexOf('/')) !== 'video') {
img.attr('src', OC.Util.replaceSVGIcon(mimetypeIcon)); img.attr('src', OC.Util.replaceSVGIcon(mimetypeIcon));
@ -158,7 +157,7 @@ OCA.Sharing.PublicApp = {
imgcontainer.appendTo('#imgframe'); imgcontainer.appendTo('#imgframe');
} }
else if (previewSupported === 'true') { else if (previewSupported === 'true') {
$('#imgframe > video').attr('poster', OC.filePath('files_sharing', 'ajax', 'publicpreview.php') + '?' + OC.buildQueryString(params)); $('#imgframe > video').attr('poster', OC.linkTo('files_sharing', '/publicpreview/'+token) + '?' + OC.buildQueryString(params));
} }
if (this.fileList) { if (this.fileList) {
@ -223,8 +222,8 @@ OCA.Sharing.PublicApp = {
urlSpec.y *= window.devicePixelRatio; urlSpec.y *= window.devicePixelRatio;
urlSpec.x = Math.ceil(urlSpec.x); urlSpec.x = Math.ceil(urlSpec.x);
urlSpec.y = Math.ceil(urlSpec.y); urlSpec.y = Math.ceil(urlSpec.y);
urlSpec.t = $('#dirToken').val(); var token = $('#dirToken').val();
return OC.generateUrl('/apps/files_sharing/ajax/publicpreview.php?') + $.param(urlSpec); return OC.linkTo('files_sharing', '/publicpreview/'+token) + '?' + OC.buildQueryString(urlSpec);
}; };
this.fileList.updateEmptyContent = function() { this.fileList.updateEmptyContent = function() {
@ -427,4 +426,4 @@ $(document).ready(function () {
}; };
} }
}); });

View File

@ -27,15 +27,18 @@ use OCP\AppFramework\Controller;
use OCP\AppFramework\Http; use OCP\AppFramework\Http;
use OCP\AppFramework\Http\DataResponse; use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\Http\FileDisplayResponse; use OCP\AppFramework\Http\FileDisplayResponse;
use OCP\AppFramework\PublicShareController;
use OCP\Constants; use OCP\Constants;
use OCP\Files\Folder; use OCP\Files\Folder;
use OCP\Files\NotFoundException; use OCP\Files\NotFoundException;
use OCP\IPreview; use OCP\IPreview;
use OCP\IRequest; use OCP\IRequest;
use OCP\ISession;
use OCP\Share\Exceptions\ShareNotFound; use OCP\Share\Exceptions\ShareNotFound;
use OCP\Share\IManager as ShareManager; use OCP\Share\IManager as ShareManager;
use OCP\Share\IShare;
class PublicPreviewController extends Controller { class PublicPreviewController extends PublicShareController {
/** @var ShareManager */ /** @var ShareManager */
private $shareManager; private $shareManager;
@ -43,16 +46,38 @@ class PublicPreviewController extends Controller {
/** @var IPreview */ /** @var IPreview */
private $previewManager; private $previewManager;
public function __construct($appName, /** @var IShare */
private $share;
public function __construct(string $appName,
IRequest $request, IRequest $request,
ShareManager $shareManger, ShareManager $shareManger,
ISession $session,
IPreview $previewManager) { IPreview $previewManager) {
parent::__construct($appName, $request); parent::__construct($appName, $request, $session);
$this->shareManager = $shareManger; $this->shareManager = $shareManger;
$this->previewManager = $previewManager; $this->previewManager = $previewManager;
} }
protected function getPasswordHash(): string {
return $this->share->getPassword();
}
public function isValidToken(): bool {
try {
$this->share = $this->shareManager->getShareByToken($this->getToken());
return true;
} catch (ShareNotFound $e) {
return false;
}
}
protected function isPasswordProtected(): bool {
return $this->share->getPassword() !== null;
}
/** /**
* @PublicPage * @PublicPage
* @NoCSRFRequired * @NoCSRFRequired
@ -60,24 +85,23 @@ class PublicPreviewController extends Controller {
* @param string $file * @param string $file
* @param int $x * @param int $x
* @param int $y * @param int $y
* @param string $t
* @param bool $a * @param bool $a
* @return DataResponse|FileDisplayResponse * @return DataResponse|FileDisplayResponse
*/ */
public function getPreview( public function getPreview(
$file = '', string $token,
$x = 32, string $file = '',
$y = 32, int $x = 32,
$t = '', int $y = 32,
$a = false $a = false
) { ) {
if ($t === '' || $x === 0 || $y === 0) { if ($token === '' || $x === 0 || $y === 0) {
return new DataResponse([], Http::STATUS_BAD_REQUEST); return new DataResponse([], Http::STATUS_BAD_REQUEST);
} }
try { try {
$share = $this->shareManager->getShareByToken($t); $share = $this->shareManager->getShareByToken($token);
} catch (ShareNotFound $e) { } catch (ShareNotFound $e) {
return new DataResponse([], Http::STATUS_NOT_FOUND); return new DataResponse([], Http::STATUS_NOT_FOUND);
} }

View File

@ -372,7 +372,7 @@ class ShareController extends AuthPublicShareController {
$ogPreview = ''; $ogPreview = '';
if ($shareTmpl['previewSupported']) { if ($shareTmpl['previewSupported']) {
$shareTmpl['previewImage'] = $this->urlGenerator->linkToRouteAbsolute( 'files_sharing.PublicPreview.getPreview', $shareTmpl['previewImage'] = $this->urlGenerator->linkToRouteAbsolute( 'files_sharing.PublicPreview.getPreview',
['x' => 200, 'y' => 200, 'file' => $shareTmpl['directory_path'], 't' => $shareTmpl['dirToken']]); ['x' => 200, 'y' => 200, 'file' => $shareTmpl['directory_path'], 'token' => $shareTmpl['dirToken']]);
$ogPreview = $shareTmpl['previewImage']; $ogPreview = $shareTmpl['previewImage'];
// We just have direct previews for image files // We just have direct previews for image files

View File

@ -80,6 +80,7 @@ class PublicShareMiddleware extends Middleware {
} }
private function getFunctionForRoute(string $route): string { private function getFunctionForRoute(string $route): string {
return array_pop(explode('.', $route)); $tmp = explode('.', $route);
return array_pop($tmp);
} }
} }

View File

@ -262,7 +262,7 @@ function preview_icon( $path ) {
* @return string * @return string
*/ */
function publicPreview_icon ( $path, $token ) { function publicPreview_icon ( $path, $token ) {
return \OC::$server->getURLGenerator()->linkToRoute('files_sharing.PublicPreview.getPreview', ['x' => 32, 'y' => 32, 'file' => $path, 't' => $token]); return \OC::$server->getURLGenerator()->linkToRoute('files_sharing.PublicPreview.getPreview', ['x' => 32, 'y' => 32, 'file' => $path, 'token' => $token]);
} }
/** /**