Move public preview endpoint over
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
This commit is contained in:
parent
53a1b9a84e
commit
366981fba6
|
@ -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',
|
||||||
],
|
],
|
||||||
|
|
||||||
|
|
|
@ -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() {
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue