From c738f4b5c2f329bc991d510c8e5e08fe08288792 Mon Sep 17 00:00:00 2001 From: Yoga Pangestu Date: Mon, 30 Mar 2026 14:51:44 +0700 Subject: [PATCH] feat: implement temporary signed URLs for attendance and assignment sharing routes --- .../ClassSessions/Actions/CopyAssignmentLinkAction.php | 3 ++- .../ClassSessions/Actions/CopyAttendanceLinkAction.php | 3 ++- .../Learning/ClassSessions/Actions/ShareAssignmentAction.php | 3 ++- .../Learning/ClassSessions/Actions/ShareAttendanceAction.php | 3 ++- routes/web.php | 4 ++-- 5 files changed, 10 insertions(+), 6 deletions(-) diff --git a/app/Filament/Resources/Learning/ClassSessions/Actions/CopyAssignmentLinkAction.php b/app/Filament/Resources/Learning/ClassSessions/Actions/CopyAssignmentLinkAction.php index 9c11fb0..4f0c9f5 100644 --- a/app/Filament/Resources/Learning/ClassSessions/Actions/CopyAssignmentLinkAction.php +++ b/app/Filament/Resources/Learning/ClassSessions/Actions/CopyAssignmentLinkAction.php @@ -5,6 +5,7 @@ use App\Filament\Support\SystemNotification; use App\Models\ClassSession; use Filament\Actions\Action; +use Illuminate\Support\Facades\URL; class CopyAssignmentLinkAction extends Action { @@ -24,7 +25,7 @@ protected function setUp(): void $course = $livewire->course; $session = ClassSession::find($arguments['session'] ?? null); - $url = route('share.assignment', [ + $url = URL::temporarySignedRoute('share.assignment', now()->addHour(), [ 'course' => $course->id, 'session_id' => $session ? $session->id : null, ]); diff --git a/app/Filament/Resources/Learning/ClassSessions/Actions/CopyAttendanceLinkAction.php b/app/Filament/Resources/Learning/ClassSessions/Actions/CopyAttendanceLinkAction.php index c53276f..155055d 100644 --- a/app/Filament/Resources/Learning/ClassSessions/Actions/CopyAttendanceLinkAction.php +++ b/app/Filament/Resources/Learning/ClassSessions/Actions/CopyAttendanceLinkAction.php @@ -5,6 +5,7 @@ use App\Filament\Support\SystemNotification; use App\Models\ClassSession; use Filament\Actions\Action; +use Illuminate\Support\Facades\URL; class CopyAttendanceLinkAction extends Action { @@ -25,7 +26,7 @@ protected function setUp(): void $session = ClassSession::find($arguments['session'] ?? null); $date = $session ? $session->date->toDateString() : null; - $url = route('share.attendance', ['course' => $course->id, 'date' => $date]); + $url = URL::temporarySignedRoute('share.attendance', now()->addHour(), ['course' => $course->id, 'date' => $date]); $livewire->js("if (navigator.clipboard) { navigator.clipboard.writeText('{$url}').catch(() => {}); }"); diff --git a/app/Filament/Resources/Learning/ClassSessions/Actions/ShareAssignmentAction.php b/app/Filament/Resources/Learning/ClassSessions/Actions/ShareAssignmentAction.php index a3a7b2a..f168dc6 100644 --- a/app/Filament/Resources/Learning/ClassSessions/Actions/ShareAssignmentAction.php +++ b/app/Filament/Resources/Learning/ClassSessions/Actions/ShareAssignmentAction.php @@ -5,6 +5,7 @@ use App\Models\ClassSession; use Filament\Actions\Action; use Filament\Support\Colors\Color; +use Illuminate\Support\Facades\URL; class ShareAssignmentAction extends Action { @@ -34,7 +35,7 @@ protected function setUp(): void $course = $livewire->course; $session = ClassSession::find($arguments['session'] ?? null); - $url = route('share.assignment', [ + $url = URL::temporarySignedRoute('share.assignment', now()->addHour(), [ 'course' => $course->id, 'session_id' => $session ? $session->id : null, ]); diff --git a/app/Filament/Resources/Learning/ClassSessions/Actions/ShareAttendanceAction.php b/app/Filament/Resources/Learning/ClassSessions/Actions/ShareAttendanceAction.php index 649dba1..5073598 100644 --- a/app/Filament/Resources/Learning/ClassSessions/Actions/ShareAttendanceAction.php +++ b/app/Filament/Resources/Learning/ClassSessions/Actions/ShareAttendanceAction.php @@ -5,6 +5,7 @@ use App\Models\ClassSession; use Filament\Actions\Action; use Filament\Support\Colors\Color; +use Illuminate\Support\Facades\URL; class ShareAttendanceAction extends Action { @@ -35,7 +36,7 @@ protected function setUp(): void $session = ClassSession::find($arguments['session'] ?? null); $date = $session ? $session->date->toDateString() : null; - $url = route('share.attendance', ['course' => $course->id, 'date' => $date]); + $url = URL::temporarySignedRoute('share.attendance', now()->addHour(), ['course' => $course->id, 'date' => $date]); $text = "*Info Kelas {$course->name}*\nSesi ke-".($session->session_number ?? '-').' ('.($session->date->translatedFormat('d M Y') ?? '').")\n\nSilakan cek detail/rekap kehadiran melalui tautan ini:\n\n{$url}"; diff --git a/routes/web.php b/routes/web.php index 86354d3..8417b2b 100644 --- a/routes/web.php +++ b/routes/web.php @@ -8,5 +8,5 @@ return view('welcome'); }); -Route::get('/share/presensi/{course}', [ShareAttendanceController::class, 'show'])->name('share.attendance'); -Route::get('/share/tugas/{course}', [ShareAssignmentController::class, 'show'])->name('share.assignment'); +Route::get('/share/attendance/{course}', [ShareAttendanceController::class, 'show'])->name('share.attendance')->middleware('signed'); +Route::get('/share/assignment/{course}', [ShareAssignmentController::class, 'show'])->name('share.assignment')->middleware('signed');