Fix 40+ codebase issues: security, performance, duplication, dead code, and routes

HIGH:
- Add missing import RadioSongRequestFormRequest (fixes crash on POST)
- Add Purify XSS sanitization for article full_story
- Fix duplicate radio API routes (/api/radio vs /api/radio/v2)
- Add try-catch guards in InstallationController for missing records

MEDIUM:
- Fix N+1: eager load comments.user in ArticleController::show()
- Fix GuestbookController authorization logic
- Remove dead doSetup() method and duplicate route
- Extract shared HasRadioDefaults trait (remove code duplication)
- Use named routes in ForceStaffTwoFactorMiddleware
- Fix WebsiteHelpCenterTicket::isOpen() (no permission leak)
- Enable  on WebsiteHelpCenterTicket (matches schema)
- Replace WebsiteTeam::all()->pluck() with direct pluck()
- Replace CatalogPage::all()->pluck() with direct pluck()
- Replace WebsiteBadge::all() with direct pluck()
- Add throttle middleware to guestbook store, logo-generator, radio embed

LOW:
- Remove unused imports
- Remove dead /inertia-test route
- Consolidate cache keys in RadioController
This commit is contained in:
root
2026-06-08 18:56:34 +02:00
parent 6eeb85fcf2
commit 4094f0fb14
19 changed files with 97 additions and 101 deletions
+1 -1
View File
@@ -114,7 +114,7 @@ Route::post('/photos/upload', [MediaApiController::class, 'upload'])->middleware
Route::post('/shop/packages/{packageId}/purchase', [ShopApiController::class, 'purchase'])->middleware('auth:sanctum');
// Protected Radio API (requires API key)
Route::prefix('radio')->middleware(['radio.api', 'throttle:radio'])->group(function () {
Route::prefix('radio/v2')->middleware(['radio.api', 'throttle:radio'])->group(function () {
Route::get('/current-dj', [RadioController::class, 'currentDJ'])->name('api.radio.v2.current-dj');
Route::get('/now-playing', [RadioController::class, 'nowPlaying'])->name('api.radio.v2.now-playing');
Route::get('/listeners', [RadioController::class, 'listeners'])->name('api.radio.v2.listeners');