diff --git a/.gitea/workflows/build.yaml b/.gitea/workflows/build.yaml index 868d467..65dd8af 100644 --- a/.gitea/workflows/build.yaml +++ b/.gitea/workflows/build.yaml @@ -9,15 +9,12 @@ jobs: build: runs-on: remote steps: - - uses: https://git.simonis.lol/actions/checkout@v4 - - uses: https://git.simonis.lol/actions/login@v1 - with: - registry: git.simonis.lol - username: ${{ vars.DOCKER_USER }} - password: ${{ vars.DOCKER_PW }} - - name: build - run: docker build -t git.simonis.lol/sites/file-explorer:latest . + - name: Checkout + uses: https://git.simonis.lol/actions/checkout@v2 - - name: push - run: docker push git.simonis.lol/sites/file-explorer:latest + - name: Build + run: docker buildx build -t git.simonis.lol/projects/file-explorer:latest . + + - name: Push + run: docker push git.simonis.lol/projects/file-explorer:latest \ No newline at end of file diff --git a/composer.json b/composer.json index 4460c9e..e26274b 100644 --- a/composer.json +++ b/composer.json @@ -15,6 +15,7 @@ "symfony/flex": "^2", "symfony/form": "^7.1", "symfony/framework-bundle": "7.1.*", + "symfony/mime": "7.1.*", "symfony/runtime": "7.1.*", "symfony/stimulus-bundle": "^2.22", "symfony/twig-bundle": "7.1.*", @@ -22,7 +23,8 @@ "symfony/yaml": "7.1.*", "symfonycasts/tailwind-bundle": "^0.6.1", "twig/extra-bundle": "^2.12|^3.0", - "twig/twig": "^2.12|^3.0" + "twig/twig": "^2.12|^3.0", + "ext-fileinfo": "*" }, "config": { "allow-plugins": { diff --git a/composer.lock b/composer.lock index 8706be0..432b350 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "8278464727736866734f277693979fb2", + "content-hash": "46ba6e6e4f31d38d71c65f5acfdff136", "packages": [ { "name": "composer/semver", @@ -1993,6 +1993,90 @@ ], "time": "2024-11-13T14:25:32+00:00" }, + { + "name": "symfony/mime", + "version": "v7.1.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "caa1e521edb2650b8470918dfe51708c237f0598" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/caa1e521edb2650b8470918dfe51708c237f0598", + "reference": "caa1e521edb2650b8470918dfe51708c237f0598", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "conflict": { + "egulias/email-validator": "~3.0.0", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/mailer": "<6.4", + "symfony/serializer": "<6.4.3|>7.0,<7.0.3" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3.1|^4", + "league/html-to-markdown": "^5.0", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/serializer": "^6.4.3|^7.0.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows manipulating MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "support": { + "source": "https://github.com/symfony/mime/tree/v7.1.6" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-10-25T15:11:02+00:00" + }, { "name": "symfony/options-resolver", "version": "v7.1.9", @@ -2222,6 +2306,89 @@ ], "time": "2024-09-09T11:45:10+00:00" }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/c36586dcf89a12315939e00ec9b4474adcb1d773", + "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "symfony/polyfill-intl-normalizer": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.31.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, { "name": "symfony/polyfill-intl-normalizer", "version": "v1.31.0", diff --git a/src/Controller/ServeFileController.php b/src/Controller/ServeFileController.php new file mode 100644 index 0000000..0db9c3d --- /dev/null +++ b/src/Controller/ServeFileController.php @@ -0,0 +1,28 @@ +fileSystemService->getFile($filePath); + $path = $file->getPath() . '/' . $file->getName(); + + $response = new BinaryFileResponse($path); + $response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, $file->getName()); + + return $response; + } +} diff --git a/src/Objects/DirContent.php b/src/Objects/DirContent.php index 91d8d01..1e1a83c 100644 --- a/src/Objects/DirContent.php +++ b/src/Objects/DirContent.php @@ -14,6 +14,7 @@ readonly class DirContent private string $type, private string $path, private string $content, + private string $mimeType, ) { } @@ -24,7 +25,8 @@ readonly class DirContent $fileInfo->getSize() ?? 0, $fileInfo->getType() ?? 'N/A', $fileInfo->getPath(), - $content + $content, + mime_content_type($fileInfo->getPath() . '/' . $fileInfo->getFilename()), ); } @@ -57,6 +59,11 @@ readonly class DirContent return $this->content; } + public function getMimeType(): string + { + return $this->mimeType; + } + private function getHumanReadableSize(): string { $bytes = $this->size; diff --git a/templates/file.html.twig b/templates/file.html.twig index 6ed481f..81be9b4 100644 --- a/templates/file.html.twig +++ b/templates/file.html.twig @@ -15,7 +15,11 @@
{{ file.content|raw }}
+ {% if file.mimeType starts with 'image' %} +{{ file.content|raw }}
+ {% endif %}