<?php namespace BookStack\Theming; use BookStack\Facades\Theme; use BookStack\Http\Controller; use BookStack\Util\FilePathNormalizer; class ThemeController extends Controller { /** * Serve a public file from the configured theme. */ public function publicFile(string $theme, string $path) { $cleanPath = FilePathNormalizer::normalize($path); if ($theme !== Theme::getTheme() || !$cleanPath) { abort(404); } $filePath = theme_path("public/{$cleanPath}"); if (!file_exists($filePath)) { abort(404); } $response = $this->download()->streamedFileInline($filePath); $response->setMaxAge(86400); return $response; } }