Add direct preview link to single shared image files
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
This commit is contained in:
parent
29fb315ffc
commit
7d8c5f73f5
|
@ -101,4 +101,50 @@ class PublicPreviewController extends Controller {
|
||||||
return new DataResponse([], Http::STATUS_BAD_REQUEST);
|
return new DataResponse([], Http::STATUS_BAD_REQUEST);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @PublicPage
|
||||||
|
* @NoCSRFRequired
|
||||||
|
*
|
||||||
|
* @param $token
|
||||||
|
* @return DataResponse|FileDisplayResponse
|
||||||
|
*/
|
||||||
|
public function directLink($token) {
|
||||||
|
// No token no image
|
||||||
|
if ($token === '') {
|
||||||
|
return new DataResponse([], Http::STATUS_BAD_REQUEST);
|
||||||
|
}
|
||||||
|
|
||||||
|
// No share no image
|
||||||
|
try {
|
||||||
|
$share = $this->shareManager->getShareByToken($token);
|
||||||
|
} catch (ShareNotFound $e) {
|
||||||
|
return new DataResponse([], Http::STATUS_NOT_FOUND);
|
||||||
|
}
|
||||||
|
|
||||||
|
// No permissions no image
|
||||||
|
if (($share->getPermissions() & Constants::PERMISSION_READ) === 0) {
|
||||||
|
return new DataResponse([], Http::STATUS_FORBIDDEN);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Password protected shares have no direct link!
|
||||||
|
if ($share->getPassword() !== null) {
|
||||||
|
return new DataResponse([], Http::STATUS_FORBIDDEN);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
$node = $share->getNode();
|
||||||
|
if ($node instanceof Folder) {
|
||||||
|
// Direct link only works for single files
|
||||||
|
return new DataResponse([], Http::STATUS_BAD_REQUEST);
|
||||||
|
}
|
||||||
|
|
||||||
|
$f = $this->previewManager->getPreview($node, -1, -1, false);
|
||||||
|
return new FileDisplayResponse($f, Http::STATUS_OK, ['Content-Type' => $f->getMimeType()]);
|
||||||
|
} catch (NotFoundException $e) {
|
||||||
|
return new DataResponse([], Http::STATUS_NOT_FOUND);
|
||||||
|
} catch (\InvalidArgumentException $e) {
|
||||||
|
return new DataResponse([], Http::STATUS_BAD_REQUEST);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -135,6 +135,14 @@ $this->create('files_sharing.sharecontroller.downloadShare', '/s/{token}/downloa
|
||||||
throw new \OC\HintException('App file sharing is not enabled');
|
throw new \OC\HintException('App file sharing is not enabled');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
$this->create('files_sharing.publicpreview.directLink', '/s/{token}/preview')->get()->action(function($urlParams) {
|
||||||
|
if (class_exists(\OCA\Files_Sharing\AppInfo\Application::class, false)) {
|
||||||
|
$app = new \OCA\Files_Sharing\AppInfo\Application($urlParams);
|
||||||
|
$app->dispatch('PublicPreviewController', 'directLink');
|
||||||
|
} else {
|
||||||
|
throw new \OC\HintException('App file sharing is not enabled');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// used for heartbeat
|
// used for heartbeat
|
||||||
$this->create('heartbeat', '/heartbeat')->action(function(){
|
$this->create('heartbeat', '/heartbeat')->action(function(){
|
||||||
|
|
Loading…
Reference in New Issue