feat: implement temporary signed URLs for attendance and assignment sharing routes

This commit is contained in:
Yoga Pangestu 2026-03-30 14:51:44 +07:00
parent f75f43fb2e
commit c738f4b5c2
5 changed files with 10 additions and 6 deletions

View File

@ -5,6 +5,7 @@
use App\Filament\Support\SystemNotification; use App\Filament\Support\SystemNotification;
use App\Models\ClassSession; use App\Models\ClassSession;
use Filament\Actions\Action; use Filament\Actions\Action;
use Illuminate\Support\Facades\URL;
class CopyAssignmentLinkAction extends Action class CopyAssignmentLinkAction extends Action
{ {
@ -24,7 +25,7 @@ protected function setUp(): void
$course = $livewire->course; $course = $livewire->course;
$session = ClassSession::find($arguments['session'] ?? null); $session = ClassSession::find($arguments['session'] ?? null);
$url = route('share.assignment', [ $url = URL::temporarySignedRoute('share.assignment', now()->addHour(), [
'course' => $course->id, 'course' => $course->id,
'session_id' => $session ? $session->id : null, 'session_id' => $session ? $session->id : null,
]); ]);

View File

@ -5,6 +5,7 @@
use App\Filament\Support\SystemNotification; use App\Filament\Support\SystemNotification;
use App\Models\ClassSession; use App\Models\ClassSession;
use Filament\Actions\Action; use Filament\Actions\Action;
use Illuminate\Support\Facades\URL;
class CopyAttendanceLinkAction extends Action class CopyAttendanceLinkAction extends Action
{ {
@ -25,7 +26,7 @@ protected function setUp(): void
$session = ClassSession::find($arguments['session'] ?? null); $session = ClassSession::find($arguments['session'] ?? null);
$date = $session ? $session->date->toDateString() : 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(() => {}); }"); $livewire->js("if (navigator.clipboard) { navigator.clipboard.writeText('{$url}').catch(() => {}); }");

View File

@ -5,6 +5,7 @@
use App\Models\ClassSession; use App\Models\ClassSession;
use Filament\Actions\Action; use Filament\Actions\Action;
use Filament\Support\Colors\Color; use Filament\Support\Colors\Color;
use Illuminate\Support\Facades\URL;
class ShareAssignmentAction extends Action class ShareAssignmentAction extends Action
{ {
@ -34,7 +35,7 @@ protected function setUp(): void
$course = $livewire->course; $course = $livewire->course;
$session = ClassSession::find($arguments['session'] ?? null); $session = ClassSession::find($arguments['session'] ?? null);
$url = route('share.assignment', [ $url = URL::temporarySignedRoute('share.assignment', now()->addHour(), [
'course' => $course->id, 'course' => $course->id,
'session_id' => $session ? $session->id : null, 'session_id' => $session ? $session->id : null,
]); ]);

View File

@ -5,6 +5,7 @@
use App\Models\ClassSession; use App\Models\ClassSession;
use Filament\Actions\Action; use Filament\Actions\Action;
use Filament\Support\Colors\Color; use Filament\Support\Colors\Color;
use Illuminate\Support\Facades\URL;
class ShareAttendanceAction extends Action class ShareAttendanceAction extends Action
{ {
@ -35,7 +36,7 @@ protected function setUp(): void
$session = ClassSession::find($arguments['session'] ?? null); $session = ClassSession::find($arguments['session'] ?? null);
$date = $session ? $session->date->toDateString() : 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}"; $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}";

View File

@ -8,5 +8,5 @@
return view('welcome'); return view('welcome');
}); });
Route::get('/share/presensi/{course}', [ShareAttendanceController::class, 'show'])->name('share.attendance'); Route::get('/share/attendance/{course}', [ShareAttendanceController::class, 'show'])->name('share.attendance')->middleware('signed');
Route::get('/share/tugas/{course}', [ShareAssignmentController::class, 'show'])->name('share.assignment'); Route::get('/share/assignment/{course}', [ShareAssignmentController::class, 'show'])->name('share.assignment')->middleware('signed');