SyncToken::query()->with('creator')->latest()->get(), 'plainToken' => $request->session()->get('sync_token_plain'), ]); } public function store(Request $request): RedirectResponse { $data = $request->validate([ 'name' => ['required', 'string', 'max:255'], 'abilities' => ['nullable', 'array'], 'abilities.*' => ['string', 'max:100'], ]); $plainToken = 'dksync_' . Str::random(48); SyncToken::query()->create([ 'name' => $data['name'], 'token_hash' => Hash::make($plainToken), 'abilities' => $data['abilities'] ?? ['academic_years', 'departments', 'classes', 'students'], 'created_by' => $request->user()->id, ]); return redirect() ->route('settings.sync-tokens.index') ->with('status', 'Token sinkronisasi berhasil dibuat.') ->with('sync_token_plain', $plainToken); } public function revoke(SyncToken $syncToken): RedirectResponse { $syncToken->delete(); return redirect() ->route('settings.sync-tokens.index') ->with('status', 'Token sinkronisasi berhasil dihapus.'); } }