diff --git a/CHANGELOG.md b/CHANGELOG.md index 3dc35eb..0ef29e7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ + Added ability to add custom HTML in \ tag. + Added ability to show a preview of PDF files. + Added remember me functionality. ++ Added delete button on the preview page if the user is logged in. + Raw URL now accept file extensions. + The linux script can be used on headless systems. + Improved installer. diff --git a/app/Controllers/MediaController.php b/app/Controllers/MediaController.php index 2687e2c..7f88b5a 100644 --- a/app/Controllers/MediaController.php +++ b/app/Controllers/MediaController.php @@ -16,19 +16,19 @@ use Slim\Exception\HttpUnauthorizedException; class MediaController extends Controller { /** - * @param Request $request - * @param Response $response - * @param string $userCode - * @param string $mediaCode - * @param string|null $token + * @param Request $request + * @param Response $response + * @param string $userCode + * @param string $mediaCode + * @param string|null $token * + * @return Response * @throws HttpNotFoundException * @throws \Twig\Error\LoaderError * @throws \Twig\Error\RuntimeError * @throws \Twig\Error\SyntaxError * @throws FileNotFoundException * - * @return Response */ public function show(Request $request, Response $response, string $userCode, string $mediaCode, string $token = null): Response { @@ -42,47 +42,47 @@ class MediaController extends Controller if (isBot($request->getHeaderLine('User-Agent'))) { return $this->streamMedia($request, $response, $filesystem, $media); - } else { - try { - $media->mimetype = $filesystem->getMimetype($media->storage_path); - $size = $filesystem->getSize($media->storage_path); + } - $type = explode('/', $media->mimetype)[0]; - if ($type === 'image' && !isDisplayableImage($media->mimetype)) { + try { + $media->mimetype = $filesystem->getMimetype($media->storage_path); + $size = $filesystem->getSize($media->storage_path); + + $type = explode('/', $media->mimetype)[0]; + if ($type === 'image' && !isDisplayableImage($media->mimetype)) { + $type = 'application'; + $media->mimetype = 'application/octet-stream'; + } + if ($type === 'text') { + if ($size <= (200 * 1024)) { // less than 200 KB + $media->text = $filesystem->read($media->storage_path); + } else { $type = 'application'; $media->mimetype = 'application/octet-stream'; } - if ($type === 'text') { - if ($size <= (200 * 1024)) { // less than 200 KB - $media->text = $filesystem->read($media->storage_path); - } else { - $type = 'application'; - $media->mimetype = 'application/octet-stream'; - } - } - $media->size = humanFileSize($size); - } catch (FileNotFoundException $e) { - throw new HttpNotFoundException($request); } - - return view()->render($response, 'upload/public.twig', [ - 'delete_token' => $token, - 'media' => $media, - 'type' => $type, - 'extension' => pathinfo($media->filename, PATHINFO_EXTENSION), - ]); + $media->size = humanFileSize($size); + } catch (FileNotFoundException $e) { + throw new HttpNotFoundException($request); } + + return view()->render($response, 'upload/public.twig', [ + 'delete_token' => $token, + 'media' => $media, + 'type' => $type, + 'url' => urlFor("/{$userCode}/{$mediaCode}"), + ]); } /** - * @param Request $request - * @param Response $response - * @param int $id - * - * @throws FileNotFoundException - * @throws HttpNotFoundException + * @param Request $request + * @param Response $response + * @param int $id * * @return Response + * @throws HttpNotFoundException + * + * @throws FileNotFoundException */ public function getRawById(Request $request, Response $response, int $id): Response { @@ -96,17 +96,17 @@ class MediaController extends Controller } /** - * @param Request $request - * @param Response $response - * @param string $userCode - * @param string $mediaCode - * @param string|null $ext + * @param Request $request + * @param Response $response + * @param string $userCode + * @param string $mediaCode + * @param string|null $ext * - * @throws FileNotFoundException + * @return Response * @throws HttpBadRequestException * @throws HttpNotFoundException * - * @return Response + * @throws FileNotFoundException */ public function getRaw(Request $request, Response $response, string $userCode, string $mediaCode, ?string $ext = null): Response { @@ -124,15 +124,15 @@ class MediaController extends Controller } /** - * @param Request $request - * @param Response $response - * @param string $userCode - * @param string $mediaCode - * - * @throws FileNotFoundException - * @throws HttpNotFoundException + * @param Request $request + * @param Response $response + * @param string $userCode + * @param string $mediaCode * * @return Response + * @throws HttpNotFoundException + * + * @throws FileNotFoundException */ public function download(Request $request, Response $response, string $userCode, string $mediaCode): Response { @@ -146,13 +146,13 @@ class MediaController extends Controller } /** - * @param Request $request - * @param Response $response - * @param int $id - * - * @throws HttpNotFoundException + * @param Request $request + * @param Response $response + * @param int $id * * @return Response + * @throws HttpNotFoundException + * */ public function togglePublish(Request $request, Response $response, int $id): Response { @@ -172,14 +172,14 @@ class MediaController extends Controller } /** - * @param Request $request - * @param Response $response - * @param int $id - * - * @throws HttpNotFoundException - * @throws HttpUnauthorizedException + * @param Request $request + * @param Response $response + * @param int $id * * @return Response + * @throws HttpUnauthorizedException + * + * @throws HttpNotFoundException */ public function delete(Request $request, Response $response, int $id): Response { @@ -197,20 +197,24 @@ class MediaController extends Controller throw new HttpUnauthorizedException($request); } + if ($request->getMethod() === 'GET') { + return redirect($response, route('home')); + } + return $response; } /** - * @param Request $request - * @param Response $response - * @param string $userCode - * @param string $mediaCode - * @param string $token - * - * @throws HttpNotFoundException - * @throws HttpUnauthorizedException + * @param Request $request + * @param Response $response + * @param string $userCode + * @param string $mediaCode + * @param string $token * * @return Response + * @throws HttpUnauthorizedException + * + * @throws HttpNotFoundException */ public function deleteByToken(Request $request, Response $response, string $userCode, string $mediaCode, string $token): Response { @@ -245,9 +249,9 @@ class MediaController extends Controller } /** - * @param Request $request - * @param string $storagePath - * @param int $id + * @param Request $request + * @param string $storagePath + * @param int $id * * @throws HttpNotFoundException */ @@ -281,15 +285,15 @@ class MediaController extends Controller } /** - * @param Request $request - * @param Response $response - * @param Filesystem $storage + * @param Request $request + * @param Response $response + * @param Filesystem $storage * @param $media - * @param string $disposition - * - * @throws FileNotFoundException + * @param string $disposition * * @return Response + * @throws FileNotFoundException + * */ protected function streamMedia(Request $request, Response $response, Filesystem $storage, $media, string $disposition = 'inline'): Response { @@ -320,15 +324,15 @@ class MediaController extends Controller } /** - * @param Filesystem $storage + * @param Filesystem $storage * @param $media - * @param null $width - * @param null $height - * @param string $disposition - * - * @throws FileNotFoundException + * @param null $width + * @param null $height + * @param string $disposition * * @return Response + * @throws FileNotFoundException + * */ protected function makeThumbnail(Filesystem $storage, $media, $width = null, $height = null, string $disposition = 'inline') { @@ -342,10 +346,10 @@ class MediaController extends Controller } /** - * @param Response $response - * @param Stream $stream - * @param string $range - * @param string $disposition + * @param Response $response + * @param Stream $stream + * @param string $range + * @param string $disposition * @param $media * @param $mime * @@ -367,11 +371,11 @@ class MediaController extends Controller } if ($range === '-') { - $start = $stream->getSize() - (int) substr($range, 1); + $start = $stream->getSize() - (int)substr($range, 1); } else { $range = explode('-', $range); - $start = (int) $range[0]; - $end = (isset($range[1]) && is_numeric($range[1])) ? (int) $range[1] : $stream->getSize(); + $start = (int)$range[0]; + $end = (isset($range[1]) && is_numeric($range[1])) ? (int)$range[1] : $stream->getSize(); } $end = ($end > $stream->getSize() - 1) ? $stream->getSize() - 1 : $end; diff --git a/app/Controllers/UploadController.php b/app/Controllers/UploadController.php index 017aef7..74b7502 100644 --- a/app/Controllers/UploadController.php +++ b/app/Controllers/UploadController.php @@ -9,14 +9,14 @@ use Psr\Http\Message\ServerRequestInterface as Request; class UploadController extends Controller { /** - * @param Request $request - * @param Response $response + * @param Request $request + * @param Response $response * - * @throws \Twig\Error\LoaderError + * @return Response * @throws \Twig\Error\RuntimeError * @throws \Twig\Error\SyntaxError * - * @return Response + * @throws \Twig\Error\LoaderError */ public function webUpload(Request $request, Response $response): Response { @@ -34,12 +34,12 @@ class UploadController extends Controller } /** - * @param Request $request - * @param Response $response - * - * @throws FileExistsException + * @param Request $request + * @param Response $response * * @return Response + * @throws FileExistsException + * */ public function upload(Request $request, Response $response): Response { @@ -113,7 +113,7 @@ class UploadController extends Controller ]); $json['message'] = 'OK.'; - $json['url'] = urlFor("/$user->user_code/$code.$fileInfo[extension]"); + $json['url'] = urlFor("/{$user->user_code}/{$code}.{$fileInfo['extension']}"); $this->logger->info("User $user->username uploaded new media.", [$this->database->getPdo()->lastInsertId()]); diff --git a/app/routes.php b/app/routes.php index c690999..748b53f 100644 --- a/app/routes.php +++ b/app/routes.php @@ -57,7 +57,7 @@ $app->group('', function (RouteCollectorProxy $group) { $group->post('/upload/{id}/publish', [MediaController::class, 'togglePublish'])->setName('upload.publish'); $group->post('/upload/{id}/unpublish', [MediaController::class, 'togglePublish'])->setName('upload.unpublish'); $group->get('/upload/{id}/raw', [MediaController::class, 'getRawById'])->add(AdminMiddleware::class)->setName('upload.raw'); - $group->post('/upload/{id}/delete', [MediaController::class, 'delete'])->setName('upload.delete'); + $group->map(['GET', 'POST'],'/upload/{id}/delete', [MediaController::class, 'delete'])->setName('upload.delete'); })->add(App\Middleware\CheckForMaintenanceMiddleware::class)->add(AuthMiddleware::class); $app->get('/', [DashboardController::class, 'redirects'])->setName('root'); diff --git a/resources/templates/comp/modal_delete.twig b/resources/templates/comp/modal_delete.twig new file mode 100644 index 0000000..c4e484d --- /dev/null +++ b/resources/templates/comp/modal_delete.twig @@ -0,0 +1,19 @@ + \ No newline at end of file diff --git a/resources/templates/upload/public.twig b/resources/templates/upload/public.twig index 191ef98..4c07f71 100644 --- a/resources/templates/upload/public.twig +++ b/resources/templates/upload/public.twig @@ -3,8 +3,8 @@ {% block title %}{{ media.filename }}{% endblock %} {% block head %} - {% if type in ['image', 'text'] %} - + {% if type == 'image' %} + {% endif %} {% endblock %} @@ -17,10 +17,13 @@ @@ -30,12 +33,12 @@
{% if delete_token is not null %} -
+

{{ lang('public.delete_text') }}

- {{ lang('no') }} + {{ lang('no') }}
@@ -43,7 +46,7 @@ {% if type is same as ('image') %}
- {{ media.filename }} + {{ media.filename }}
@@ -65,23 +68,23 @@ {% elseif type is same as ('audio') %}
{% elseif type is same as ('video') %}
{% elseif media.mimetype is same as ('application/pdf') %} - + Your browser does not support PDF previews. - Download + Download {% else %}
@@ -102,7 +105,7 @@
@@ -123,11 +126,12 @@ + {% include 'comp/modal_delete.twig' %} {% endblock %} \ No newline at end of file diff --git a/resources/templates/upload/web.twig b/resources/templates/upload/web.twig index 623bc6c..c0aad8c 100644 --- a/resources/templates/upload/web.twig +++ b/resources/templates/upload/web.twig @@ -8,15 +8,26 @@ {% include 'comp/alert.twig' %}
-
-
-
-
-
- +
+
+
+
+
- - +
+ +
+
+
+
+
+
+ +
+ +
+
+
diff --git a/resources/templates/user/index.twig b/resources/templates/user/index.twig index cccff9b..14a549d 100644 --- a/resources/templates/user/index.twig +++ b/resources/templates/user/index.twig @@ -54,7 +54,7 @@
- +
@@ -68,23 +68,5 @@ - + {% include 'comp/modal_delete.twig' %} {% endblock %} \ No newline at end of file diff --git a/src/js/app.js b/src/js/app.js index b461b34..330885d 100644 --- a/src/js/app.js +++ b/src/js/app.js @@ -18,6 +18,7 @@ var app = { $('[data-toggle="popover"]').popover(); $('.user-delete').click(app.modalDelete); + $('.public-delete').click(app.modalDelete); $('.media-delete').click(app.mediaDelete); $('.publish-toggle').click(app.publishToggle); $('.refresh-token').click(app.refreshToken);