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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @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');
|
||||
}
|
||||
});
|
||||
$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
|
||||
$this->create('heartbeat', '/heartbeat')->action(function(){
|
||||
|
|
Loading…
Reference in New Issue