feat: implement temporary signed URLs for attendance and assignment sharing routes
This commit is contained in:
parent
f75f43fb2e
commit
c738f4b5c2
@ -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,
|
||||||
]);
|
]);
|
||||||
|
|||||||
@ -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(() => {}); }");
|
||||||
|
|
||||||
|
|||||||
@ -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,
|
||||||
]);
|
]);
|
||||||
|
|||||||
@ -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}";
|
||||||
|
|
||||||
|
|||||||
@ -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');
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user