diff --git a/.env.example b/.env.example index f83b47a4f4..6348c4552b 100644 --- a/.env.example +++ b/.env.example @@ -23,6 +23,11 @@ LIVEWIRE_ENABLED=true # enable or disable log viewer. By default it is enabled. LOG_VIEWER_ENABLED=true +# If you spread old links of to your albums in your Lychee instance starting with +# https://lychee.text/#albumID/PhotoId +# Set this value to true to enable redirection. +LEGACY_V4_REDIRECT=false + ############################################################################## # IMPORTANT: To migrate from Lychee v3 you *MUST* use the same MySQL/MariaDB # # server as v3. # diff --git a/app/Http/Controllers/RedirectController.php b/app/Http/Controllers/RedirectController.php index 2384b28229..74517600ed 100644 --- a/app/Http/Controllers/RedirectController.php +++ b/app/Http/Controllers/RedirectController.php @@ -13,6 +13,7 @@ use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Routing\Controller; +use Illuminate\View\View; use Symfony\Component\HttpFoundation\Response as SymfonyResponse; class RedirectController extends Controller @@ -87,4 +88,23 @@ public function photo(Request $request, string $albumID, ?string $photoID): Symf throw new FrameworkException('Lychee redirection component', $e); } } + + /** + * Redirection to landing or gallery depending on the settings. + * Otherwise attach a JS hook if legacy is enabled. + * + * @return View|SymfonyResponse + */ + public function view(): View|SymfonyResponse + { + $base_route = Configs::getValueAsBool('landing_page_enable') ? route('landing') : route('livewire-gallery'); + if (config('app.legacy_v4_redirect') === false) { + return redirect($base_route); + } + + return view('hook-redirection', [ + 'gallery' => route('livewire-gallery'), + 'base' => $base_route, + ]); + } } diff --git a/config/app.php b/config/app.php index 8a4546c7d4..c3637387e8 100644 --- a/config/app.php +++ b/config/app.php @@ -92,6 +92,8 @@ function renv(string $cst, ?string $default = null): string 'asset_url' => null, + 'legacy_v4_redirect' => env('LEGACY_V4_REDIRECT', false), + /* |-------------------------------------------------------------------------- | Application URL diff --git a/resources/views/hook-redirection.blade.php b/resources/views/hook-redirection.blade.php new file mode 100644 index 0000000000..a6ae97f436 --- /dev/null +++ b/resources/views/hook-redirection.blade.php @@ -0,0 +1,13 @@ + \ No newline at end of file diff --git a/routes/web-livewire.php b/routes/web-livewire.php index c2834ae65b..59bf610f3a 100644 --- a/routes/web-livewire.php +++ b/routes/web-livewire.php @@ -4,10 +4,10 @@ use App\Enum\OauthProvidersType; use App\Http\Controllers\Oauth; +use App\Http\Controllers\RedirectController; use App\Livewire\Components\Pages\Gallery\Album; use App\Livewire\Components\Pages\Gallery\Albums; use App\Livewire\Components\Pages\Gallery\Search; -use App\Models\Configs; use Illuminate\Support\Facades\Route; /* @@ -47,9 +47,7 @@ Route::get('/search/{albumId?}', Search::class)->name('livewire-search'); Route::get('/gallery/{albumId}/', Album::class)->name('livewire-gallery-album'); Route::get('/gallery/{albumId}/{photoId}', Album::class)->name('livewire-gallery-photo'); - Route::get('/', function () { - return redirect(Configs::getValueAsBool('landing_page_enable') ? route('landing') : route('livewire-gallery')); - })->name('livewire-index'); + Route::get('/', [RedirectController::class, 'view'])->name('livewire-index'); }); });