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\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,
]);

View File

@ -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(() => {}); }");

View File

@ -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,
]);

View File

@ -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}";

View File

@ -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');