pasax-secure-monitorInformasi Tambahan·5 min baca

Changelog

Riwayat lengkap perubahan paket pasax/secure-monitor. Versi terbaru: v1.7.4.

Versi terbaru: v1.7.4 · Packagist · Repositori GitHub

All notable changes to pasax/secure-monitor will be documented in this file.

[1.7.4] - 2026-11-10#

Added#

  • Favicon Resmi Pasax untuk Dashboard & Halaman Error Terblokir (stubs/blade/pages/pasax/layout.blade.php, stubs/blocked.blade.php):

    • Mengintegrasikan favicon default resolusi tinggi menggunakan logo/ikon resmi Pasax (berbasis SVG/PNG base64 yang selaras dengan ikon aplikasi di bagian bawah sidebar navigasi).
    • Melengkapi tag <link rel="icon">, <link rel="shortcut icon">, dan <link rel="apple-touch-icon"> untuk memastikan favicon tampil konsisten di semua peramban desktop maupun mobile.
    • Tetap mendukung kustomisasi penuh melalui konfigurasi config('pasax.dashboard.favicon') atau penimpaan langsung via Blade @section('favicon').
  • Konfigurasi URL Kembali Dashboard Dinamis (pasax.dashboard.back_url) (config/pasax.php, stubs/blade/pages/pasax/settings.blade.php, PasaxSettingController.php, PasaxSecuritySettingApiController.php):

    • Memungkinkan admin mengonfigurasi tautan tombol "Kembali ke Aplikasi Utama" di sidebar dashboard secara fleksibel melalui antarmuka Pengaturan Keamanan maupun file konfigurasi.

[1.7.3] - 2026-11-10#

Added#

  • Pembersihan Cache & Optimasi Sistem Sekali Klik (php artisan optimize:clear) via Tombol Refresh Header (stubs/blade/pages/pasax/layout.blade.php, PasaxServerController.php, PasaxServerSecurityApiController.php):

    • Tombol Refresh di sudut kanan atas header dashboard kini memicu endpoint POST {pasaxSlug}/optimize-clear dan API POST api/pasax/server/optimize-clear.
    • Secara otomatis mengeksekusi Artisan::call('optimize:clear') yang membersihkan seluruh cache aplikasi, compiled views, konfigurasi, rute, dan event cache.
    • Dilengkapi animasi putar halus (spinning icon), pengiriman pesan aman via session flash, serta penayangan notifikasi floating toast hijau (5 detik) saat halaman termuat ulang dalam kondisi segar.
  • Branding Resmi Pasax Adaptif pada Header & Sidebar Dashboard (stubs/blade/pages/pasax/layout.blade.php):

    • Menghadirkan logo resmi horizontal PASAX pada sisi kiri header (.sec-header-brand) lengkap dengan pemisah vertikal elegan dan tautan cepat ke Ringkasan Dashboard.
    • Varian logo dwitema adaptif otomatis: varian warna navy untuk Mode Terang (Light Mode) dan varian warna putih tajam (crisp white) untuk Mode Gelap (Dark Mode).
    • Menggantikan ikon perisai generik lama pada footer sidebar versi dengan ikon resmi Pasax (squircle biru P berlatar jaringan node dan pasax oranye) beresolusi tinggi (Retina-ready) tanpa dependensi aset eksternal.
  • Lencana Informasi & Fitur Salin Cepat Alamat IP Pengakses di Header (stubs/blade/pages/pasax/layout.blade.php):

    • Menambahkan informasi alamat IP publik/lokal yang sedang mengakses dashboard secara langsung di samping tombol Refresh (.sec-client-ip-badge).
    • Dilengkapi indikator status aktif (live green beacon), label teks responsif, serta fitur interaktif satu klik (click-to-copy) ke clipboard dengan feedback notifikasi toast.

Fixed#

  • Pencegahan Alert Dialog Ganda pada Hapus Berkas Server Audit (stubs/blade/pages/pasax/server.blade.php):
    • Menghilangkan konflik konfirmasi ganda bawaan peramban (onsubmit="return confirm(...)") sehingga aksi hapus berkas mencurigakan konsisten hanya memicu 1 modal konfirmasi alert-dialog terpadu Pasax.
  • Perbaikan Kebocoran Teks Skrip pada Visualisasi Threat Map (stubs/blade/pages/pasax/threat-map.blade.php):
    • Mengubah payload simulasi XSS menjadi format URL-encoded (%3Cscript%3Ealert(1)%3C%2Fscript%3E) guna mencegah penutupan prematur blok <script> oleh parser HTML browser yang sebelumnya menyebabkan teks kode tumpah ke bagian bawah layar.
  • Pencegahan Toast Duplikat & Konsistensi Aliran Radar Serangan:
    • Menambahkan deduplication guard pada sistem notifikasi toast untuk memblokir penayangan pesan identik secara simultan.
    • Mengalirkan data serangan database satu per satu (playback queue) secara real-time pada Threat Map sehingga statistik radar 100% konsisten dengan log riil tanpa menghasilkan phantom counters.

[1.7.2] - 2026-11-09#

Added#

  • Peta Intelijen Siber Interaktif & Dual-Engine Fallback pada Threat Map (stubs/blade/pages/pasax/threat-map.blade.php):

    • Visualisasi intelijen serangan siber real-time dengan HUD status taktis (ThreatsEye SOC Style), koordinat node yang dilindungi, dan status firewall WAF (Blocking / Monitoring).
    • Pilihan proyeksi peta fleksibel: 3D Globe (rotasi interaktif) dan 2D Tactical Flat Map (Mercator / Equirectangular).
    • Dual-Engine & Offline Resilience: Mendukung failover multi-CDN (jsdelivr & cdnjs), data benua offline bawaan (FALLBACK_WORLD_GEOJSON), dan engine Radar Cyber 2D Mandiri (Pure Canvas Standalone Engine) yang berjalan 100% tanpa dependensi eksternal bila CDN diblokir atau offline.
    • Perbaikan styling modal toast offline (.threat-map-offline[hidden] { display: none !important; }) sehingga mudah ditutup tanpa menghalangi visualisasi radar.
  • Pembaruan Menyeluruh & Pembersihan Berkas Usang via php artisan pasax:upgrade --force (dan Alias pasax:upgrae):

    • Menambahkan alias resmi pasax:upgrae pada perintah konsol sehingga salah ketik tetap berjalan mulus.
    • Opsi --force kini memperbarui dan menyinkronkan seluruh aset dari instalasi lama ke standar versi terbaru:
      • Deteksi & Laporan Migrasi Database: Menampilkan deteksi jumlah migrasi baru yang belum diterapkan (⚠ Terdeteksi X migrasi database baru...) dan laporan status pembaruan struktur database yang informatif.
      • Pembaruan Konfigurasi (config/pasax.php): Otomatis menyisipkan konfigurasi baru yang hilang (sentinel IPC socket daemon, threat_map globe visualizer, URL rotasi dinamis, dan migrasi nama tabel ke prefix pasax_) tanpa menimpa nilai kustomisasi pengguna.
      • Sinkronisasi Tampilan (resources/views/pages/pasax) & Rute: Secara otomatis menyinkronkan tampilan Blade dashboard dan rute ke versi terbaru, dengan opsi --clean-backups dan --no-backup.
      • Pembersihan Berkas & Direktori Usang: Otomatis mendeteksi dan menghapus berkas serta direktori peninggalan versi lama yang sudah tidak digunakan (routes/security.php, routes/security-api.php, config/security.php, resources/views/pages/security, resources/js/pages/security, resources/js/components/security, web-docs/, finis.sh, install-dash.sh), serta memangkas arsip cadangan berlebih (.backup-*) dengan mempertahankan 2 cadangan paling mutakhir.
  • Aksi Unduh Berkas & Modal Konfirmasi Verifikasi Berkas Aman pada Server Audit (stubs/blade/pages/pasax/server.blade.php, PasaxServerSecurityService.php, PasaxServerController.php):

    • Menambahkan tombol unduh aman (⬇️ Unduh) pada tabel berkas mencurigakan & modal detail inspeksi yang memungkinkan admin mengunduh berkas berbahaya/mencurigakan secara aman dengan header application/octet-stream dan X-Content-Type-Options: nosniff untuk analisis offline.
    • Menambahkan aksi 🛡️ Verifikasi dan modal konfirmasi 🛡️ Verifikasi Berkas Aman yang memungkinkan admin menandai false positive sebagai berkas aman/terverifikasi disertai catatan investigasi opsional.
    • Berkas terverifikasi dicatat secara permanen di storage (app/security/verified_files.json) lengkap dengan hash SHA-256, ukuran, identitas verifikator, dan waktu verifikasi, serta otomatis dikecualikan dari pemindaian mencurigakan masa depan selama hash berkas tidak dimanipulasi.
  • Tombol Aksi Cepat & Modal Dialog Karantina IP Interaktif pada Log Keamanan (stubs/blade/pages/pasax/logs.blade.php, PasaxBlockedIpController.php):

    • Menambahkan tombol aksi cepat 🚫 di sebelah alamat IP dan tombol 🚫 Blokir pada setiap baris riwayat log keamanan.
    • Menghadirkan modal dialog karantina terpadu 🚫 Blokir Alamat IP yang memungkinkan admin memblokir penyerang secara instan langsung dari halaman log.
    • Mendukung pemilihan cakupan pemblokiran berbasis kartu responsif: Hanya Perangkat (device - isolasi fingerprint peramban tanpa mengorbankan pengguna lain di jaringan NAT/Wi-Fi yang sama) dan Seluruh IP Router (ip - blokir penuh seluruh lalu lintas dari IP publik tersebut).
    • Pilihan durasi fleksibel (1 jam, 6 jam, 12 jam, 24 jam, 3 hari, 7 hari, 30 hari, atau Permanen) dengan auto-fill alasan ancaman dan catatan investigasi internal opsional.
    • Terintegrasi langsung dengan PasaxSentinelBridge untuk langsung meneruskan pemblokiran router IP ke kernel firewall Linux (nftables/iptables).
  • Chart Visual Tren Serangan (Line Chart) pada Halaman Security Logs (stubs/blade/pages/pasax/logs.blade.php, PasaxLogController.php):

    • Menambahkan kartu visualisasi grafik garis (line chart) interaktif berbasis vektor SVG murni (zero-dependency) pada halaman audit log keamanan.
    • Mendukung pergantian rentang waktu dinamis dengan tombol filter Minggu (7 hari), Bulan (30 hari), dan Tahun (12 bulan) dengan tetap mempertahankan filter pencarian, event, level keparahan, rentang tanggal, dan jumlah paginasi tabel.
    • Dilengkapi ringkasan telemetri eksekutif (total ancaman pada periode, tanggal & volume serangan puncak, rata-rata harian/bulanan), titik data interaktif (nodes) dengan tooltip rincian keparahan (Critical, High, Medium, Low), garis grid horizontal berlabel sumbu Y, serta gradien area visual (smooth area fill).

[1.7.1] - 2026-11-09#

Removed#

  • Pembersihan Direktori Dokumentasi Standalone Lama (web-docs/ & finis.sh):
    • Menghapus folder web-docs/ (Astro Starlight) seutuhnya (~462 MB) dan berkas pembungkus finis.sh.
    • Seluruh 29 modul dokumentasi teknis pasax-secure-monitor telah dialihkan permanen ke Pasax Cloud SOC (https://pasax.is-a.dev/docs) bertenaga Neon Serverless PostgreSQL Database.
    • Membersihkan referensi web-docs dan finis.sh dari composer.json, .gitattributes, push.sh, dan AGENTS.md.

[1.7.0] - 2026-11-09#

Added#

  • Jembatan IPC Unix Domain Socket ke Pasax Sentinel Host Daemon (PasaxSentinelBridge) — menambahkan jembatan komunikasi performa tinggi (< 0.2ms) antara aplikasi Laravel dan daemon pasax-sentinel melalui socket Unix (/run/pasax/agent.sock atau /tmp/pasax/agent.sock).
  • Delegasi Pemblokiran IP Otomatis ke Kernel Firewall Linux (nftables / iptables) — setiap pemblokiran IP yang dipicu oleh honeypot, tripwire, atau deteksi anomali di PasaxService::blockIp() kini otomatis diteruskan ke kernel firewall host melalui Sentinel untuk melakukan drop koneksi seketika sebelum paket menyentuh PHP-FPM atau thread web server.
  • Sinkronisasi Pembukaan Blokir Kernel Firewall — PasaxService::unblock() dan PasaxService::unblockIp() secara otomatis menginstruksikan daemon Sentinel untuk mencabut aturan drop IP dari kernel firewall saat blokir dicabut oleh admin.
  • Perintah Diagnostik CLI php artisan pasax:sentinel — menyediakan perintah artisan terpadu dengan opsi --ping, --status, --block=IP, dan --unblock=IP untuk menguji dan memverifikasi koneksi socket Unix dengan daemon Sentinel secara langsung dari terminal.
  • Konfigurasi Lingkungan Terpusat (config/pasax.php) — penambahan blok konfigurasi sentinel dengan opsi enabled, socket, dan timeout yang dapat disesuaikan lewat environment variable PASAX_SENTINEL_SOCKET.

[1.6.9] - 2026-11-07#

Added#

  • Modal Dialog Detail & Bukti Cuplikan Kode untuk Berkas Mencurigakan (stubs/blade/pages/pasax/server.blade.php) — menambahkan tombol 🔍 Detail dan tautan interaktif pada setiap baris temuan di tabel Suspicious files & webshells. Modal menyajikan nama berkas, jalur lengkap, kategori ancaman, ukuran, waktu modifikasi presisi, alasan lengkap, serta blok bukti cuplikan kode ($file['snippet']) yang terdeteksi dengan tombol hapus langsung dari dalam modal.
  • Kolom Tanggal Modifikasi Presisi pada Tabel Audit Server — menyajikan tanggal & jam berkas hingga satuan detik (d M Y, H:i:s) dengan timestamp relatif (diffForHumans) dan tooltip ISO 8601.

Fixed#

  • Perlindungan Ganda Konfirmasi Penghapusan Berkas (Native Fallback) — menambahkan onsubmit="return confirm(...)" pada form penghapusan berkas mencurigakan untuk menjamin dialog konfirmasi peringatan selalu muncul di peramban pengguna bahkan jika JavaScript kustom terhambat atau file view di VPS belum disinkronkan.

[1.6.8] - 2026-11-07#

Fixed#

  • Eliminasi False Positive Injeksi PHP Polyglot pada Berkas Media Biner (JPEG/PNG/Media) — memperketat pola regex deteksi short tag <? pada PasaxServerSecurityService dan PasaxSafeImageFile. Sebelumnya, pola <\?\s*\$[a-zA-Z_\x7f-\xff] mengizinkan sembarang byte tinggi (\x7f-\xff) sehingga tabrakan byte biner terkompresi acak seperti 3C 3F 24 56 (<?$V) dan 3C 3F 24 diikuti high-byte (<?$?) pada foto profil pengguna asli keliru dideteksi sebagai injeksi PHP polyglot kritis. Pola kini secara ketat mewajibkan token PHP valid, fungsi eksekusi berbahaya (eval, system, passthru, exec, shell_exec, assert, popen, proc_open), atau assignment variabel PHP nyata ($_GET, $_POST, $cmd = ...), menghilangkan false positive pada foto pengguna tanpa mengorbankan proteksi terhadap webshell nyata.
  • Penguatan Pengujian Regresi Media Acak — menambahkan assertion pada PolyglotImageTest untuk memastikan berkas foto biner dengan pola byte <?$V dan <?$? lolos verifikasi 100% pada pemindai audit server dan aturan validasi upload.

[1.6.7] - 2026-10-28#

Added#

  • Penyematan Badge Versi Aktif & Tautan Rilis pada Sidebar Dashboard (stubs/blade/pages/pasax/layout.blade.php) — menampilkan badge versi aktif paket Pasax (v1.6.7) berdesain modern monospace di bagian bawah navigasi sidebar (tepat di bawah tombol tema gelap/terang). Badge ini terhubung langsung ke catatan rilis resmi GitHub (https://github.com/pasax-dev/pasax-secure-monitor-laravel/releases) dan otomatis beradaptasi dengan mode gelap/terang sistem.
  • Deteksi Kedaluwarsa Layout pada pasax:upgrade — penambahan pemeriksaan penanda sec-sidebar-version pada perintah php artisan pasax:upgrade sehingga dapat mengingatkan pengguna jika berkas tampilan layout.blade.php yang terpublikasi di proyek host belum memuat komponen badge versi terbaru.
  • Sinkronisasi dan Pengujian Menyeluruh pada Host Sandbox (ring/pasax-yes) — pembaruan dan pengujian integrasi tampilan dashboard pada aplikasi percontohan ring/pasax-yes dengan assertion render HTML yang memastikan teks versi v1.6.7 dan selektor .sec-sidebar-version tersaji sempurna serta seluruh 42 tes unit/fitur tetap hijau.

[1.6.6] - 2026-10-28#

Added#

  • Penyelarasan Otomatis Constraint Versi Lengkap di composer.json Host — perintah php artisan pasax:install dan pasax:upgrade kini secara otomatis mendeteksi dan menyelaraskan constraint versi paket di composer.json proyek host ke versi semver lengkap (misal: "pasax/secure-monitor": "^1.6.6") jika sebelumnya Composer menyederhanakannya menjadi "^1.6" tanpa patch.
  • Tampilan Versi Lengkap pada CLI Wizard Instalasi — perintah pasax:install kini menampilkan identitas versi rilis lengkap paket di judul instalasi (Memulai instalasi Pasax (Bulwark) v1.6.6...) dan pada daftar pemeriksaan kesiapan lingkungan (Pasax Security Engine (v1.6.6)).
  • Rekomendasi Instalasi Versi Lengkap pada Dokumentasi — memperbarui seluruh panduan instalasi (README.md, documents/, web-docs/) agar menyarankan perintah composer require "pasax/secure-monitor:^1.6.6" guna memastikan deklarasi dependensi di aplikasi pengguna selalu terdefinisi secara presisi.

[1.6.5] - 2026-10-28#

Fixed#

  • Pencegahan False Positive Polyglot Webshell pada Berkas Citra (JPEG/PNG/Media) — memperketat pola pencocokan short echo tag <?= pada PasaxServerSecurityService, PasaxSafeImageFile, dan PasaxService. Sebelumnya, tabrakan 4-byte biner acak (3C 3F 3D 6B / <?=k) yang terjadi secara alami di dalam aliran kompresi piksel DCT/Huffman pada foto berita asli (seperti dokumentasi resmi pemerintah) keliru dideteksi sebagai webshell / backdoor injeksi PHP. Pola kini mewajibkan adanya sintaks PHP yang valid (seperti variabel $_GET/$_POST atau pemanggilan fungsi eksekusi) agar tidak mengorbankan keamanan polyglot sekaligus menghilangkan peringatan palsu pada berkas foto murni.
  • Pencegahan Anomali Null-Byte Palsu pada Ekstraksi Konten Unggahan — menyelaraskan deteksi token awal pada PasaxService::extractUploadedFileContents sehingga tidak lagi mengekstrak data biner mentah citra ke dalam inspection haystacks saat hanya terdapat karakter < dan ? secara kebetulan.
  • Penguatan Pengujian Regresi Media Aman — penambahan rangkaian unit test pada PolyglotImageTest untuk memastikan foto asli dengan pola byte biner serupa tetap lolos 100% pada pemindai audit server dan aturan validasi upload, sementara webshell sungguhan tetap diblokir seketika.

[1.6.4] - 2026-10-26#

Added#

  • Penyediaan Otomatis AI Agent Skill (pasax-skills) — saat instalasi (php artisan pasax:install), paket kini otomatis mempublikasikan skill asisten cerdas (stubs/skills/pasax/SKILL.md) ke direktori host .agents/skills/pasax/SKILL.md. Skill ini membekali agent AI dengan pemahaman menyeluruh tentang aturan Zero-Vendor-Edit, Facade Pasax, Model Eloquent berawalan dinamis, audit keamanan server, reverse proxy, serta pengujian keamanan.
  • Injeksi Panduan Idempoten ke AGENTS.md & CLAUDE.md — pasax:install dan pasax:upgrade otomatis menyematkan blok panduan terstruktur berbatas komentar aman (<!-- pasax-guidelines:start --> ... <!-- pasax-guidelines:end -->) pada berkas AGENTS.md (dan CLAUDE.md) di root proyek pengguna tanpa merusak panduan host yang sudah ada.
  • Pelepasan Bersih Skill pada pasax:uninstall — perintah uninstall kini membersihkan berkas skill dan menghapus blok panduan dari AGENTS.md serta CLAUDE.md, dengan opsi --keep-skills bila pengguna ingin mempertahankan skill tersebut.
  • Integrasi Penuh Portal Dokumentasi Resmi (https://pasax.is-a.dev/) — skill AI, installer wizard, dan panduan agent kini terhubung langsung dengan bab-bab dokumentasi resmi di https://pasax.is-a.dev/ (Instalasi, Konfigurasi, Deteksi ReDoS, Karantina Perangkat, Audit Server, Streaming Log, REST API, dan Hardening Server).
  • Implementasi Percontohan 8 Modul Dasbor & API Kustom Host — modul lengkap di aplikasi host percontohan (ring/pasax-yes/) mencakup Controller Web & REST API untuk Ringkasan, Log Deteksi, Blokir IP, Daftar Putih, Audit Server, Sesi Pengguna Masuk, Tiket Banding, dan Pengaturan Runtime beserta 42 pengujian fitur hijau.

[1.6.3] - 2026-10-26#

Added#

  • Dukungan Kustomisasi Mandiri Tanpa Mengubah Vendor — panduan resmi dan implementasi arsitektur headless yang memungkinkan pengembang aplikasi host membangun tampilan monitoring Blade kustom (selaras dengan layout utama aplikasi @extends('layouts.app')) dan REST API JSON mandiri menggunakan Facade Internal\Pasax\Facades\Pasax dan Model resmi PasaxLog, PasaxBlockedIp.
  • Penyelarasan Kontrak Facade Pasax — penambahan method isEnabled(), isBlockEnforcementEnabled(), dan blockIp(string $ip, ?string $reason = null, ?int $durationHours = null, ...) pada PasaxService untuk menyempurnakan pemanggilan skalar yang dideklarasikan pada Facade Pasax.
  • Bab Dokumentasi Integrasi 04 (documents/07-integration-guides/04-custom-dashboard-dan-api-tanpa-ubah-vendor.md) — panduan komprehensif mengenai kebijakan Zero-Vendor-Edit, pemisahan zona aman aplikasi host vs zona terlindung vendor/, serta tutorial lengkap pembuatan controller kustom.

Changed#

  • Pembersihan Distribusi Pustaka Vendor (.gitattributes) — mengeksklusikan direktori releases/ dan skills/ dari arsip Composer (export-ignore) sehingga instalasi pengguna lebih bersih, ramping, dan bebas dari berkas catatan pengembangan internal.

[1.6.2] - 2026-10-25#

Added#

  • Perintah Otomatisasi Deployment VPS Ramah Produksi (php artisan pasax:deploy) — perintah deploy idempoten yang dirancang khusus untuk deployment di server/VPS produksi tanpa risiko merusak atau menduplikasi data aplikasi yang sudah padat. Otomatis memastikan PASAX_DASHBOARD_SECRET siap di .env, mengeksekusi migrasi tabel Pasax secara terisolasi (--only-package), menyemai default knobs ke pasax_settings tanpa penumpukan data (seedDefaultSettings()), dan membersihkan stale cache/views. Dilengkapi opsi --clean-views, --skip-settings, --force, dan --dry-run.
  • Modern Alert-Dialog Konfirmasi Interaktif — seluruh aksi berbahaya dan mutasi data pada dasbor Blade (allowed-ips, blocked-ips, server, sessions, settings, tickets) kini dilindungi modal konfirmasi bertema (Danger, Warning, Success) sebelum formulir dikirimkan, menggantikan default browser dialog atau pengiriman tanpa konfirmasi.
  • Sistem Notifikasi Floating Toast Real-time — komponen toast modern otomatis muncul di pojok kanan bawah antarmuka dasbor saat aksi berhasil atau gagal, lengkap dengan auto-dismiss, progress timer bar, dan integrasi penuh dengan session flash Laravel.

Fixed#

  • Preservasi Session Flash pada Rotating Dashboard — memperbaiki hilangnya flash message notifikasi saat terjadi rotasi token URL atau redirect 302 ganda menggunakan session()->reflash() di middleware PasaxRotatingDashboard dan helper trait RespondsWithPasaxDashboard.
  • Penanganan Route Parameter pada Model Route Binding — memperbaiki parameter shifting ketika {pasaxSlug} hadir pada rute detail/aksi dasbor (blocked-ips/{id}, tickets/{id}, dsb.).
  • Harmonisasi Tampilan Mode Gelap & Terang — merapikan pewarnaan latar belakang, border, dan teks pada seluruh halaman dasbor Blade menggunakan variabel CSS terpusat (--sec-bg, --sec-card, --sec-text, --sec-border) sehingga transisi tema konsisten di seluruh elemen visual.

[1.6.1] - 2026-10-25#

Added#

  • Integrasi Konsol Strix AI Pentest Otonom (ring/app-waf) — konsol pengujian WAF kini terintegrasi penuh dengan agent AI pentesting otonom Strix (ghcr.io/usestrix/strix-sandbox:1.3.0). Mendukung multi-provider LLM (Google Gemini, OpenAI ChatGPT dengan chip gpt-5, OpenRouter, dan OpenCode/Local AI), peluncur scan otonom dengan pembatas budget token (mulai dari $1 USD), live streaming terminal console dengan filter log dan deteksi otomatis unduhan sandbox Docker, serta tab penampil laporan kerentanan (penetration_test_report.md & vulnerabilities.json).
  • Perintah php artisan pasax:secret — membuat atau membuat ulang (--force) PASAX_DASHBOARD_SECRET pada .env, dengan opsi --show untuk menampilkan nilai dan --path= untuk berkas env selain .env. Berguna setelah deploy atau git clone baru: .env.example hanya memuat baris kosong sehingga aplikasi hasil clone belum punya rahasia; jalankan pasax:secret lalu config:clear. Didaftarkan otomatis di service provider dan didokumentasikan pada documents/05-cli-and-automation/01-artisan-commands.md §9.
  • PASAX_DASHBOARD_SECRET kini benar-benar dipakai — PasaxDashboardUrlService menyimpan HMAC-SHA256 token dashboard aktif dan token "previous" di sesi, lalu memverifikasinya dengan rahasia per aplikasi. Mengganti rahasia otomatis membatalkan token lama (pengguna dialihkan mulus ke token baru, bukan 404); bila rahasia kosong (instalasi lama) validasi tetap kompatibel. Pengelola env dipusatkan di Support\PasaxDashboardSecret.

Changed#

  • pasax:install & pasax:upgrade hanya menulis rahasia nyata ke .env — sebelumnya nilai PASAX_DASHBOARD_SECRET hasil generate juga ditulis ke .env.example sehingga ikut ter-commit; kini .env.example hanya memuat baris kosong dan nilai nyata hanya ada di .env. pasax:install membuat rahasia pada setiap instalasi (selama --without-env tidak dipakai), termasuk saat dashboard belum diaktifkan.

Fixed#

  • Reload dashboard URL acak setelah masa tenggang berakhir 404 — pada mode PASAX_DASHBOARD_ROTATING=true, URL di address bar menjadi token "previous" segera setelah halaman disajikan, dan setelah grace_seconds (default 120 dtk) token itu dibuang sehingga reload beberapa menit kemudian — atau setelah 30 menit halaman dibiarkan terbuka — dijawab 404 Not Found meski sesi login masih sah. Middleware PasaxRotatingDashboard kini mengenali token lama milik sesi sendiri tanpa batas tenggang (via PasaxDashboardUrlService::previousSlugValue()) lalu mengalihkan 302 ke token aktif dengan path + query dipertahankan; token asing pada navigasi HTML (mis. setelah login ulang atau sesi baru) juga dialihkan ke token aktif sesi tersebut, bukan 404. Permintaan AJAX/feed dan aksi tulis dengan token asing tetap 404 agar dashboard tetap tersamar, sedangkan aksi tulis dengan token lama yang kedaluwarsa diloloskan memakai token aktif agar formulir yang lama terbuka tidak gagal. Dijaga test regresi di paket maupun aplikasi real (ring/pasax-yes).

[1.6.0] - 2026-10-24#

Added#

  • URL dashboard acak sekali pakai (moving-target, berubah tiap reload): saat dashboard dipasang, pasax:install kini mengaktifkan PASAX_DASHBOARD_ROTATING=true + membangkitkan PASAX_DASHBOARD_SECRET unik per aplikasi. Pintu stabil /pasax selalu 302 ke /pasax-{token}/ milik sesi tiap pengguna (mis. http://localhost:8000/pasax-95856857476jdhjs5/logs, lalu http://localhost:8000/pasax-634664873647jbdjshf/threat-map); token 16 karakter diputar setiap halaman HTML sehingga reload browser selalu berganti URL. URL lama hidup selama masa tenggang PASAX_DASHBOARD_GRACE_SECONDS (120 dtk, agar polling threat-map/feed & submit form tidak balapan) lalu dialihkan ke URL baru; slug asing dijawab 404 agar dashboard tersamar. Seluruh route('pasax.dashboard.*') di Blade otomatis memakai token terbaru tanpa mengubah view (via URL::defaults). Kunci baru pasax.dashboard.{rotating,secret,token_length,single_use,grace_seconds} + env PASAX_DASHBOARD_*, middleware pasax.rotating (PasaxRotatingDashboard), layanan PasaxDashboardUrlService, dan kontroler pintu masuk PasaxDashboardEntryController; host berkas rute lama memperolehnya via pasax:upgrade --sync-routes. Nonaktifkan (PASAX_DASHBOARD_ROTATING=false) untuk kembali ke prefix statis.

[1.5.0] - 2026-10-22#

Added#

  • Threat Map — peta live lintasan penyerang menuju server: halaman dashboard Blade baru (/pasax/threat-map, blindon Threat Map di sidebar) yang menggambar bola dunia interaktif: kulit negara memakai UNAD, panar lintasan serangan berwarna sesuai tingkat ancaman dari asal geografis IP penyerang menuju titik server yang dipantau, gelombang kejut saat kena, serta panel real-time intrusion logs berisi lokasi kota/negara, IP, deskripsi aturan, path, dan status blokir dari pasax_logs riil 24 jam terakhir (top attacker per IP).
  • Live feed real-time: GET /pasax/threat-map/feed mengembalikan JSON log serangan terbaru (default 20) sejak id terakhir (?after=), rincian statistik hari ini, dan lokasi geoIP per IP; halaman memandu polling (pembacaan berulang) tiap 8 detik dan menumbuhkan arka baru seketika saat serangan masuk tanpa reload halaman.
  • Resolver geoIP dipakai bersama: lokasi IP penyerang memakai PasaxUserLoginService::resolveLocation() dengan cache 30 hari yang sama seperti perekam sesi sehingga hemat panggilan API; IP lokal/intranet otomatis dipetakan ke koordinat pusat server default.
  • Konfigurasi peta: kunci pasax.dashboard.threat_map.* + env PASAX_DASHBOARD_TARGET_NAME|LAT|LON, PASAX_DASHBOARD_MAP_WINDOW_HOURS (default 24), PASAX_DASHBOARD_MAP_MAX_ORIGINS (10), PASAX_DASHBOARD_MAP_REFRESH_SECONDS (8) untuk menyetel jendela data, jumlah asal panah, cadence polling, dan titik server.
  • Rute dashboard: Route::get('threat-map') → PasaxThreatMapController::index (halaman) + threat-map/feed → feed (JSON) pada routes/pasax-web-blade.php dan stub pasax-blade.php.stub, dilindungi middleware web+auth sama seperti seluruh halaman dashboard; item navigasi sidebar dilindungi @if (\Route::has(...)) agar aman bagi berkas layout host yang lama.
  • Pengingat upgrade untuk menu baru: pasax:upgrade kini memeriksa penanda pasax.dashboard.threat-map pada layout.blade.php terpublikasi dan memperingatkan menjalankan --sync-views (dengan pencadangan otomatis) bila menu Threat Map belum ada.
  • Mode layar penuh Threat Map: tombol ⛶ Full screen di sudut kanan atas kanvas menyematkan kartu peta di seluruh jendela (position:fixed; inset:0 + kelas body penahan skrol) sehingga dapat dipakai apa pun tata letak dasbor host; kanvas mematuhi ukuran baru lewat ResizeObserver, tombol Escape keluar dari mode, dan pada ponsel panel sisi dibatasi 45vh agar peta tetap dominan.
  • Pengaturan berbasis database dengan ambang per tingkat ancaman: seluruh perilaku auto-block WAF kini dapat diatur langsung dari dashboard tanpa menyentuh .env — ambang blokir per tingkat (critical, high, medium, low, default 1/2/3/5) disimpan pada tabel pasax_settings dan disemai otomatis oleh seeder PasaxDefaultSettingsSeeder saat pasax:install maupun pasax:upgrade.
  • Lingkup blokir adaptif auto: mode 'device,ip,auto' pada pengaturan auto-block — perangkat bila identitas device_id eksplisit terdeteksi, fallback ke isolasi IP utuh saat fingerprint tidak tersedia (aman bagi pengguna lain di WiFi yang sama).
  • Sanksi kombinasi: blokir gabungan hanya bila ancaman datang dari minimal 2 tingkat berbeda dan total kejadian melampaui auto_block.combined_threshold (default 3) sehingga serangan satu jenis berfrekuensi rendah tidak tersapu salah.
  • Penghalaman pengaturan dashboard diperbarui: kartu lingkup 3 pilihan (Device/IP/Auto dengan pill "WiFi-Safe"), kartu ambang per tingkat dengan warna tingkat ancaman, pilihan durasi blokir berjenjang (6 jam s.d. 1 tahun/permanen), ambang kombinasi, modul brute-force login, mitigasi retensi log, dan kotak simulasi live auto-block — seluruhnya memakai JavaScript vanilla tanpa NPM.
  • Data Table interaktif di seluruh tabel dashboard: penambahan filter rentang tanggal (date_from dan date_to), selector entri per halaman (10, 25, 50, 100), dan footer pagination lengkap dengan ringkasan entri ("Showing X to Y of Z entries") serta tombol navigasi halaman terpadu di logs.blade.php, blocked-ips.blade.php, allowed-ips.blade.php, sessions.blade.php, dan tickets.blade.php melalui komponen reusable pagination.blade.php.
  • Visualisasi Top Attackers 24h & animasi real-time pada Overview: panel penyerang teratas di overview.blade.php kini menyajikan data aktual dari pasax_logs dengan persentase bahaya dinamis, animasi bar CSS halus, serta rincian serangan terklasifikasi.
  • pasax_settings kini menyetel throttle login & retensi log: PasaxLoginThrottleService membaca konfigurasi lockout dari database terlebih dahulu (fallback .env/config) sehingga operasional harian dapat menyetel dari dashboard.
  • Env core-only: stubs/env.stub dirampingkan hanya berisi kunci bootstrap inti (PASAX_MONITOR_ENABLED, PASAX_IP_WHITELIST, PASAX_AUTO_REGISTER_MIDDLEWARE, flag rute/dashboard, PASAX_SUPPORT_EMAIL); kunci lain lama tetap didukung sebagai fallback senyap namun tidak lagi ditulis installer.

Fixed#

  • Uninstall: pembersihan middleware pada bootstrap/app.php gaya import use + nama kelas pendek — pemasangan yang mendaftarkan WAF lewat use Internal\Pasax\...\PasaxBlockIpAddress; + unqualified PasaxBlockIpAddress::class tidak ikut dibersihkan sehingga aplikasi host mati 500 setelah paket dilepas (class not found); penghapus kini mengenali baris import maupun pemakaian nama pendek dengan pemeriksaan batas kata agar nama kelas host yang kebetulan berakhiran sama (mis. SomeBlockIpAddress) tetap aman — dijaga 2 test regresi.
  • Pasang ulang non-interaktif kini menyemai pengaturan bawaan — opsi baru --migrate pada pasax:install menjalankan migrasi sehingga alias seeding berjalan di mode script (--no-interaction); seeding juga tereksekusi bila tabel pasax_settings sudah ada meski migrasi dijalankan terpisah setelah wizard.
  • Stubs rute dashboard terpublikasi kini memuat Threat Map: stub routes/pasax.php yang diterbitkan host (tag pasax-routes) sempat kehilangan dua rute threat-map sehingga tautan petanya mati setelah proyek host memuat berkas rute kustom; kini keduanya ikut pasax-web-blade.php dan tervalidasi di aplikasi real (ring/pasax-yes) lewat alur pasax:upgrade --sync-routes.
  • Petunjuk CLI memakai rute dashboard resmi: keluaran pasax:scan-logs kini mengarah ke /pasax/logs dan /pasax/blocked-ips (bukan alias lama /security/*), wizard pasax:install menyebut prefix API /api/pasax/*, dan hasil pemindaian access log tercatat dengan path rute konsisten.
  • Halaman pengaturan gagal render karena penanganan @json Blade: ekspresi @json([...larik inline...]) dengan lebih dari 2 koma (mis. larik 4 pasang ambang per tingkat) dipangkas senyap oleh parser komma compileJson milik Laravel sehingga elemen terakhir hilang dan sisa tanda ]/) membuat Blade error Unclosed '['; daftar referensi JS kini dihitung via @php lalu dikirim sebagai variabel (@json($simLevels) dst.) yang aman terhadap penyectaan koma — regresi dijaga test render halaman pengaturan.
  • Panel serangan terbaru Threat Map mengulang data arsip alih-alih streaming: polling tiap 8 detik mem-fetch feed tanpa kursor ?after= sehingga 20 log arsip yang sama muncul kembali berulang dan jumlah serangan hari ini seolah hidup; kini JS menyemai lastId dari sampel payload, setiap poll memakai ?after=lastId, dan kursor diperbarui dari data.last_id sehingga hanya serangan baru sungguhan dari pasax_logs yang mengalir masuk (last_id hanya maju, tidak pernah mundur) — sampel seed kini membawa id + stempel waktu ISO asli dari logToArray($log, true); diverifikasi end-to-end di aplikasi real: serangan baru dari IP 198.51.100.23 menghasilkan tepat 2 baris baru saat polling ?after=8, tanpa arsip yang dikirim ulang.
  • Pemberitahuan kegagalan Globe CDN: menangani kegagalan pemuatan skrip eksternal Three.js/Globe.gl secara anggun dengan antarmuka fallback yang informatif dan ramah pengguna tanpa memblokir seluruh fungsionalitas peta.
  • Isolasi cache pengaturan PasaxService::getSetting(): mencegah caching nilai fallback default ke memori internal ketika nilai pada database belum tersimpan atau berubah secara dinamis, serta melengkapi metode flushSettingsCache().

[1.4.5] - 2026-10-21#

Fixed#

  • Penyelarasan resolusi IP dan perangkat pada PasaxService::inspect(): pemeriksaan daftar putih (whitelist) di awal inspeksi kini menggunakan resolveClientIp($request) dan resolveDeviceId($request) secara penuh sehingga permintaan di balik proxy/tunnel dengan header forwarding tidak terkecoh oleh soket IP mentah.
  • Deteksi pemindai ffuf dengan banner lengkap: regex signature pemindai keamanan kini mendeteksi format banner bawaan Fuzz Faster U Fool selain singkatan ffuf.
  • Pengerasan simulasi server pengembangan: penanganan rute berkas konfigurasi rahasia (.htaccess, .env, composer.json) diuji dan diverifikasi memicu respons blokir instan 403 secara konsisten.

[1.4.4] - 2026-10-21#

Fixed#

  • Whitelisting rute tiket banding di middleware PasaxBlockIpAddress: rute publik untuk pengajuan dan pengecekan status tiket banding (api/pasax/unblock-tickets/*, api/security/unblock-tickets/*, dan pola wildcard */unblock-tickets/*) kini dikecualikan dari pencegatan PasaxBlockIpAddress sehingga pengguna yang sah namun terblokir tetap dapat mengirimkan tiket banding melalui form modal maupun REST API.
  • Validasi payload pengujian aplikasi real: seluruh pengujian end-to-end WAF dan dashboard di ring/pasax-yes diverifikasi dan dipastikan berjalan hijau dengan status code dan payload yang valid.

[1.4.3] - 2026-10-21#

Added#

  • Prefix Pasax* pada seluruh komponen & berkas yang diterima pengguna:
    • Seluruh komponen yang dipublikasikan atau diintegrasikan ke proyek host saat composer require pasax/secure-monitor dan php artisan pasax:install kini menggunakan awalan Pasax yang konsisten agar mudah dibedakan dari kelas bawaan aplikasi host:
      • Models: PasaxBlockedIp, PasaxLog, PasaxLoginAttempt, PasaxIpUnblockRequest, PasaxUserLogin, PasaxTrustedIp, PasaxAllowedIp, PasaxSetting (dan tabel bawaan pasax_*).
      • Middleware: PasaxBlockIpAddress, PasaxDetectSecurityThreats, PasaxEnsureSecurityAdmin, PasaxInjectAnnouncementBanner, PasaxTrackUserActivity.
      • Listeners: PasaxLogFailedLoginAttempt, PasaxRecordUserLogin, PasaxResetLoginAttempts.
      • Validation Rules: PasaxSafeAssetPath, PasaxSafeImageFile.
      • Services: PasaxAccessLogScannerService, PasaxLoginThrottleService, PasaxServerSecurityService, PasaxUserLoginService, PasaxVersionCheckService, PasaxService.
      • Support: PasaxDashboardView, PasaxTableResolver.
      • Concerns / Traits: HasPasaxSecurityRelations, ResolvesPasaxTable, RespondsWithPasaxDashboard.
      • Console Commands: PasaxInstallCommand, PasaxUpgradeCommand, PasaxBaselineCommand, PasaxPruneSecurityLogsCommand, PasaxPurgeInjectedDataCommand, PasaxScanAccessLogsCommand, PasaxUnblockIpCommand, PasaxUninstallCommand.
      • API Controllers: PasaxAllowedIpApiController, PasaxBlockedIpApiController, PasaxIpUnblockRequestApiController, PasaxSecurityLogApiController, PasaxSecuritySettingApiController, PasaxServerSecurityApiController, PasaxUserSessionApiController.
      • Dashboard Controllers: PasaxAllowedIpController, PasaxBlockedIpController, PasaxLogController, PasaxOverviewController, PasaxServerController, PasaxSessionController, PasaxSettingController, PasaxTicketController.
    • 100% Kompatibilitas Mundur: Seluruh nama kelas lama (BlockedIp, SecurityLog, BlockIpAddress, HasSecurityRelations, ServerSecurityService, dll.) tetap disediakan sebagai subclass dan class_alias transparan di src/compat.php dan berkas kelas lama, sehingga kode pengguna lama, test, maupun import yang sudah ada tidak mengalami pemecahan (zero breaking changes).
    • Upgrade Mulus: Migrasi 2026_10_21_000001_prefix_pasax_tables.php dan ResolvesPasaxTable mendeteksi status tabel secara runtime sehingga aplikasi tidak error table not found sebelum maupun sesudah migrasi dijalankan.
    • Installer & Uninstaller: pasax:install otomatis menyematkan HasPasaxSecurityRelations dan PasaxBlockIpAddress / PasaxDetectSecurityThreats. pasax:uninstall membersihkan kedua versi nama (berawalan Pasax maupun lama).

Fixed#

  • pasax:uninstall kini total bersih: path stub .env salah ('__DIR__/....' literal + dirname(..., 2)) sehingga komentar stub tidak pernah terhapus — diperbaiki; receiver $middleware gantung ikut dihapus saat blok append() dikosongkan (sebelumnya merusak sintaks bootstrap/app.php); file *.backup-* milik Pasax dan direktori induk kosong (views/errors, views/pages, js/pages, js/components) ikut dihapus. Tercakup 2 test regresi baru.
  • Tautan mati di banner web-docs: announce.ts menaut ke /cli-automation/upgrade-guide/ yang tidak ada — dibetulkan ke /cli-automation/upgrade-and-uninstall/; tambah public/.htaccess (ErrorDocument 404 /404.html + redirect 301 URL lama) karena production memakai Apache.

Changed#

  • Pengumuman hanya di local + debug: banner/dialog InjectAnnouncementBanner dan modal pasaxAnnounce dashboard tidak lagi dirender kecuali APP_ENV=local dan APP_DEBUG=true.

  • PHPStan level 5 hijau kembali (CI merah sejak v1.3.x): AllowedIp::isValidPattern() ditulis ulang tanpa perbandingan !== null yang selalu benar (terdeteksi sebagai notIdentical.alwaysTrue) — validasi CIDR kini memakai early-return yang setara perilakunya. Seluruh 12 kombinasi matriks pest + Pint sudah hijau; hanya job PHPStan yang gagal.

Added#

  • Pilihan cakupan API dan Web saat instalasi (bawaan: keduanya): wizard pasax:install kini menanyakan dua hal — "Pasang dukungan API?" dan "Pasang dashboard web Blade murni?" — masing-masing bawaan Ya. Flag baru --without-web (pasangan --without-api); --api-only tetap sebagai jalan pintas "API ya, Web tidak". Menolak keduanya menghasilkan instalasi inti saja (kelola via Artisan). Kombinasi baru dicakup test (--without-web hanya menerbitkan rute API, --without-api hanya halaman web).

Removed#

  • Dashboard kini Blade murni saja — pilihan starterkit Livewire/React/TSX dihapus: pasax:install tidak lagi memiliki opsi --with-livewire, --with-react-dashboard, --with-tsx, --with-both, dan --stack; sebagai gantinya satu opsi --with-dashboard (alias: --with-plain, --with-blade) plus konfirmasi wizard ya/tidak. PasaxServiceProvider selalu mendaftarkan rute Blade (routes/pasax-web-blade.php) tanpa cabang driver; RespondsWithDashboard selalu me-render view Blade (parameter $inertia warisan diabaikan); controller dashboard tidak lagi bergantung pada inertiajs/inertia-laravel maupun livewire/livewire. Direktori stubs/react/, stubs/livewire/, rute pasax-web.php / pasax-web-react.php, stub rute pasax-livewire / pasax-react, dan tag publish starterkit-* / staterkit-* / pasax-web-{react,tsx,all} dihapus. pasax:install dan pasax:upgrade otomatis membersihkan sisa resources/js/pages/pasax + resources/js/components/pasax dari instalasi lama; pasax:upgrade memperingatkan bila PASAX_DASHBOARD_DRIVER masih bernilai warisan (livewire/react/tsx). Kunci config dashboard.driver dipertahankan sebagai no-op kompatibilitas (selalu diperlakukan blade). Aplikasi React/Inertia yang butuh panel dalam stack-nya dapat membangun dashboard kustom via headless REST API /api/security/* (lihat panduan integrasi React/Inertia).

Added#

  • Banner + dialog pengumuman otomatis di halaman utama: middleware baru InjectAnnouncementBanner (alias pasax.announce) menyuntikkan banner atas + dialog sambutan pada respons HTML GET / tanpa mengubah view host — mandiri (tanpa dependensi), banner tampil sampai ditutup, dialog sekali per versi paket, nonaktif via PASAX_ANNOUNCEMENT_ENABLED=false. Terdaftar otomatis saat auto_register_middleware aktif dan disematkan installer ke grup global.

  • CRUD Allowed IPs (global allowlist): model AllowedIp + tabel allowed_ips (migrasi baru untuk instalasi lama, plus masuk migrasi konsolidasi), pola IP tunggal/wildcard/CIDR yang ikut diperiksa isWhitelisted(), endpoint API allowed-ips.* (index/store/show/toggle/destroy, admin-only), halaman dashboard Blade murni + Livewire + React/TSX, entri navigasi, dan relasi $user->allowedIps(). Uninstall ikut menghapus tabelnya.

  • Halaman detail dashboard (Logs, Blocked IPs, Appeals): rute logs/{id}, blocked-ips/{id}, tickets/{id} (*.show) di semua varian (Blade, Livewire, React, gabungan) dengan tampilan evidence/konteks request, log pemicu, tiket terkait, dan aksi langsung (hapus, toggle/unblock, approve/reject). Kolom Detail ditambahkan di ketiga tabel index.

  • Toggle dark mode manual di semua stack dashboard (Blade, Livewire, React): tombol Auto → Terang → Gelap di navigasi, tersimpan di localStorage (pasax-theme), tanpa flicker (tema diterapkan sebelum paint). Layout Blade kini memakai color-scheme dan background body mengikuti tema (sebelumnya body terkunci terang).

  • Ringkasan akhir pasax:install mencantumkan URL akses dashboard (overview, logs, blocked-ips, server, sessions, tickets, settings) berdasarkan APP_URL + prefix terkonfigurasi, plus langkah khusus untuk pilihan Livewire saja.

  • Overview Livewire: topAttackers dikonversi via toArray() (sebelumnya (array) cast pada Eloquent Model menghasilkan key internal sehingga badge level/timestamp memicu warning dan data hilang). Ditemukan saat uji starter kit Livewire asli.

  • syncDashboardChoice ditulis ulang tanpa pola && yang selalu benar (CI PHPStan booleanAnd.leftAlwaysTrue pada SecurityInstallCommand.php:527); perilaku strict-by-choice tidak berubah.

  • Varian stub rute per-driver (stubs/routes/pasax-blade/livewire/react.php.stub): pasax:install kini menulis routes/pasax.php hanya berisi rute stack terpilih (varian gabungan untuk both; file dilewati untuk none/--api-only). Stub gabungan pasax.php.stub tetap dipakai untuk both dan sinkronisasi pasax:upgrade --sync-routes.

Fixed#

  • pasax:install strict by choice: installer kini menghapus direktori dashboard dari stack yang TIDAK dipilih (syncDashboardChoice), sehingga hasil instalasi hanya berisi pilihan user — plain/livewire hanya menyisakan resources/views/pages/pasax, react hanya resources/js/pages+components/pasax, none/--api-only menghapus keduanya.
  • Stub routes/pasax.php menghormati dashboard.driver: cabang Livewire kini mensyaratkan driver bernilai livewire/all/both (sebelumnya hanya class_exists(Livewire), sehingga app Blade yang kebetulan memasang Livewire jatuh ke rute Livewire walau memilih plain).
  • Ringkasan akhir instalasi ganda untuk plain: baris duplikat "Dashboard Blade: ..." dihapus, tersisa satu baris "Dashboard Blade murni: ...".
  • pasax:uninstall membersihkan blok $middleware->append([]) yang kosong di bootstrap/app.php (regex lama hanya cocok pola panah ganda).

Verified#

  • Suite 136 passed (577 assertions) termasuk 3 test baru strict-by-choice (plain menghapus sisa React, react menghapus sisa Blade, api-only menghapus keduanya) + asersi uninstall tanpa sisa ->append.

[1.1.5] - 2026-10-11#

Added#

  • Plain-Blade monitoring dashboard (no Livewire/Inertia required): new stubs/blade/pages/pasax/ views (standalone layout + Overview, Logs, Blocked IPs, Server, Sessions, Appeals, Settings) published with php artisan vendor:publish --tag=plain-views or php artisan pasax:install --with-plain / --with-blade. Dashboard controllers now dual-render via RespondsWithDashboard: driver blade (new default) serves plain views, react serves Inertia, with graceful fallback when a stack is missing.
  • Dashboard route file for plain Blade (routes/pasax-web-blade.php) covering all CRUD endpoints with the same pasax.dashboard.* names.
  • Installer wizard choice for plain Blade (auto-default when Livewire is absent), --with-livewire flag, and --stack values blade / livewire.

Changed#

  • BREAKING (minor, pre-1.2): --with-blade now means plain Blade (was Livewire alias); use --with-livewire / --with-dashboard for the single-file Livewire version. --with-both and --stack=both now pair plain Blade + TSX.
  • Dashboard driver default is now blade; livewire only serves the Livewire routes.
  • Fixed the routes/pasax.php stub fallback which rendered non-existent pages.security.* views; it now wires the dashboard controllers directly. Default dashboard prefix in stubs corrected to pasax.
  • pasax:upgrade blade sync follows the host stack (Livewire tag vs plain-views).

Verified#

  • All 7 plain-Blade pages render HTTP 200 with working mutations on a real laravel new app; suite at 133 passed (566 assertions).

[1.1.4] - 2026-10-11#

Fixed#

  • Dashboard styling gaps: added 5 missing CSS classes to the Livewire layout (sec-badge-warning, sec-card-body, sec-card-desc, sec-content, sec-label) plus scope-selector styles; replaced emoji nav icons with inline SVGs on Blade and React.
  • React dashboard: pasax-nav.tsx no longer hardcodes /security (prefix derived at runtime); added missing sec-header/title/subtitle, sec-alert*, sec-card-desc, sec-badge-warning styles; fixed ui.tsx prop types (id, onKeyDown, title, warning) — tsc --noEmit and vite build pass.
  • Dashboard controllers rendered Inertia::render('security/*') while pages live at js/pages/pasax/* — corrected to pasax/*.
  • pasax:uninstall left migration records behind, so reinstalls reported "Nothing to migrate" with missing tables (dashboard 500s). Uninstall now deletes its migration rows; legacy security_* tables are also dropped.

Verified#

  • Render-tested on real Livewire + React apps (login, all pages 200, block-IP mutation persisted).

[1.1.3] - 2026-10-11#

Fixed#

  • PasaxService::VERSION was stale (2.0.8), making pasax:upgrade report a phantom version and silencing update notices. Synced to the release line; push.sh now rewrites the constant to the new tag on every push.
  • Installer/uninstaller normalize edited host files (single trailing newline, collapsed blank lines) so they stay Pint-clean; laravel-test/ excluded from pint.json.
  • Install guide curl probe documented the localhost whitelist exclusion (PASAX_IP_WHITELIST).

[1.1.2] - 2026-10-11#

Changed#

  • Internal maintenance commit (no user-facing changes).

[1.1.1] - 2026-10-11#

Added#

  • Interactive install wizard (php artisan pasax:install): language choice (ID default / EN, --lang), API-only mode (--api-only: core + security, no pages or web dashboard routes), starterkit picker (Livewire / React / both / none, skipped for API-only), environment readiness check (PHP, Laravel, DB, .env), optional immediate php artisan migrate, and numbered next steps each with a docs link to https://pasax.is-a.dev/.
  • New --with-tsx, --with-both, --stack handling unified with the wizard.

[1.1.0] - 2026-10-11#

Fixed#

  • Quoted Mermaid node labels containing () (User::logins(), Gate::define(...)) which broke diagram rendering in the docs portal and Starlight site.

[1.0.10] - 2026-10-11#

Changed#

  • Docs: last security.activity alias references renamed to pasax.activity.

[1.0.9] - 2026-10-11#

Changed#

  • Docs: stale middleware aliases, manage-security-monitor gate, and security.* route names updated to pasax.* across guides.

[1.0.8] - 2026-10-11#

Fixed#

  • BREAKING (minor, pre-1.1): pasax:upgrade no longer force-overwrites customized host routes/views; --sync-routes / --sync-views back up to *.backup-* first.
  • Fixed installer writing require security.php (non-existent file, fatal on hosts) instead of require pasax.php, plus duplicate-require guard.
  • New PasaxLifecycleEdgeTest (10 simulations): fresh/partial/legacy hosts, Laravel 10 Kernel style, combined-trait removal, upgrade backup behavior.

[1.0.7] - 2026-10-11#

Added#

  • New php artisan pasax:uninstall command: removes all package traces from host apps without breaking them — drops only Pasax tables, removes published routes/config/views/migrations, detaches middleware and the User trait, strips PASAX_* from .env, restores .htaccess from backup, and runs composer remove. Supports --force, --keep-tables, --keep-env.

[1.0.6] - 2026-10-11#

Changed#

  • Auto-generated web-docs files (changelog.md, src/data/package.json) are untracked + gitignored so git pull never conflicts with local build output.

[1.0.5] - 2026-10-11#

Added#

  • Root finis.sh wrapper forwarding to web-docs/finis.sh so docs build/deploy runs from the repo root without changing directories.

[1.0.4] - 2026-10-11#

Changed#

  • push.sh now regenerates documents/index.html and runs the web-docs build (finis.sh --no-pull --no-deploy) before every commit (--no-docs-build to skip).

[1.0.3] - 2026-10-11#

Changed#

  • Docs: web-docs site titles, SEO keywords, tracker defaults, and integration-guide examples renamed to Pasax.

[1.0.2] - 2026-10-11#

Changed#

  • push.sh version policy: patch numbers cap at .10 then roll over to the next minor (v1.0.10 → v1.1.0); major bumps are never automatic — only via explicit -t vX.0.0.

[1.0.1] - 2026-10-11#

Changed#

  • push.sh auto-tags every push with the recommended version (opt out with --no-tag); Dependabot config ignores major updates to protect the CI matrix.

[1.0.0] - 2026-10-11#

Changed#

  • BREAKING — package renamed to pasax/secure-monitor: namespace Internal\SecurityMonitor → Internal\Pasax; SecurityMonitorService → PasaxService; SecurityMonitorServiceProvider → PasaxServiceProvider; facade SecurityMonitor → Pasax. Backward-compatible class aliases ship in src/compat.php.
  • BREAKING — pasax naming across the stack: config/security.php → config/pasax.php with PASAX_* env vars (legacy SECURITY_* still work as fallback); Artisan security:* → pasax:*; middleware aliases pasax.*; gate manage-pasax; single consolidated migration create_pasax_tables with pasax_logs / pasax_settings tables (legacy tables auto-renamed with data preserved).

[2.1.0] - 2026-10-09#

Added#

  • Hardened Apache 2 VirtualHost Configuration (stubs/apache2.conf.stub):
    • Menyediakan template VirtualHost Apache 2 hardened siap pakai untuk server Ubuntu / Debian / CentOS.
    • Tag vendor publish baru: php artisan vendor:publish --tag=security-apache (menghasilkan berkas apache2.conf di root aplikasi host).
    • Terintegrasi penuh ke dalam perintah instalasi php artisan security:install dan grup tag --tag=security-all.
    • Opsi CLI baru: --without-apache pada php artisan security:install untuk melewati publikasi apache2.conf.
    • Fitur pengamanan VirtualHost mencakup:
      • Mitigasi Slowloris DoS via mod_reqtimeout (header=15-30,MinRate=500 body=15,MinRate=500).
      • Buffer request body (5MB) dan header buffer (LimitRequestFieldSize 32768) untuk mencegah DoS dan error token JWT/Cookie besar.
      • Penolakan HTTP method berisiko (TRACE, TRACK) untuk mitigasi Cross-Site Tracing (XST).
      • Header keamanan lengkap: X-Frame-Options, X-Content-Type-Options: nosniff, Referrer-Policy, Permissions-Policy, dan penyembunyian X-Powered-By.
      • Resolusi IP asli via mod_remoteip (X-Forwarded-For / CF-Connecting-IP).
      • Restriksi eksekusi PHP: hanya /index.php yang diizinkan dieksekusi, semua berkas .php lain ditolak dengan 403 Forbidden.
      • Pencegahan eksekusi berkas double extension (.php.jpg, .phtml.zip, dll.).
      • Sandboxing folder /storage/ dengan Content-Security-Policy: sandbox untuk mencegah eksekusi polyglot/SVG berbahaya.
      • Integrasi PHP-FPM aman melalui mod_proxy_fcgi.

[2.0.10] - 2026-10-09#

Changed#

  • Hardening Template Nginx (stubs/nginx.conf.stub):
    • Peningkatan FastCGI buffer: fastcgi_buffers 16 16k;, fastcgi_buffer_size 32k;, fastcgi_busy_buffers_size 64k; untuk mencegah 502 Bad Gateway saat respons besar.
    • Penambahan buffer header klien (client_header_buffer_size 16k;, large_client_header_buffers 4 32k;).
    • Penambahan timeout mitigasi Slowloris DoS (client_body_timeout 15s;, client_header_timeout 15s;, send_timeout 15s;).
    • Restriksi HTTP method (GET|HEAD|POST|PUT|PATCH|DELETE|OPTIONS).
    • Blueprint pemulihan real IP dari reverse proxy / Cloudflare / Docker.

[2.0.9] - 2026-10-05#

Fixed#

  • Kompatibilitas CI & Test Matrix L10 - L13:
    • Menambahkan dependensi guzzlehttp/guzzle: ^7.8|^8.0 pada composer.json untuk menjamin ketersediaan PSR-7 Response saat pengujian Http::fake() dan fitur VersionCheckService pada lingkungan Laravel 10.
    • Memperbaiki analisis statis PHPStan pada evaluasi tipe dinamis LoginThrottleService dan SecurityInstallCommand.
    • Mengoptimalkan assertion command options pada SecurityInstallAutoInjectTest.

[2.0.8] - 2026-10-05#

Added#

  • Pemeriksaan Versi Otomatis & Notifikasi Upgrade di Terminal (php artisan serve & composer run dev):

    • Secara otomatis memeriksa apakah terdapat versi rilis terbaru di Packagist/GitHub saat pengembang menjalankan php artisan serve atau composer run dev (artisan dev).
    • Menampilkan notifikasi visual di terminal konsol yang elegan dan informatif jika versi baru telah dirilis, lengkap dengan saran perintah upgrade.
    • Pemeriksaan dirancang sangat ringan, non-blocking (timeout 2 detik), dan di-cache selama 1 jam (SECURITY_VERSION_CHECK_CACHE_TTL=3600) sehingga tidak pernah memperlambat atau mengganggu startup server.
    • Dapat diaktifkan/dinonaktifkan melalui konfigurasi security.version_check.enabled atau variabel .env: SECURITY_VERSION_CHECK_ENABLED=true.
  • Perintah Baru php artisan security:upgrade:

    • Perintah artisan terpadu untuk memeriksa, memperbarui, dan menyinkronkan seluruh komponen package:
      • php artisan security:upgrade: Memperbarui package via Composer (composer update pasax/secure-monitor), menerapkan migrasi database terbaru (php artisan migrate), menyinkronkan rute kustom (routes/security.php & routes/security-api.php), menyinkronkan tampilan dashboard monitoring (Blade/Livewire & React/TSX), serta membersihkan cache framework.
      • Opsi --check: Hanya memeriksa status versi tanpa menjalankan proses pembaruan.
      • Opsi --force: Memaksa pembaruan dan sinkronisasi aset meskipun sudah di versi terbaru.
      • Opsi --no-composer: Melewati pembaruan Composer (hanya sinkronisasi aset lokal).
      • Opsi --no-migrate: Melewati eksekusi migrasi database.
      • Opsi --sync-routes & --sync-views: Memaksa pembaruan berkas rute dan tampilan dashboard.
  • Integrasi Informasi Versi pada Dashboard Pengaturan & REST API:

    • Halaman Pengaturan Keamanan (/security/settings) pada Livewire dan React kini menampilkan status versi aktif dan banner notifikasi pembaruan secara visual.
    • Endpoint REST API GET /api/security/settings menyertakan metadata version (current, latest, update_available).

[2.0.7] - 2026-10-05#

Added#

  • Interactive Security Settings Page & Dynamic Configuration (Livewire, React, & REST API):
    • Added dedicated Security Settings dashboard page accessible via /security/settings in both Livewire (pages/security/settings.blade.php) and React (pages/security/settings.tsx).
    • Added Settings link (⚙️) to the sidebar navigation in both Blade and React dashboard layouts.
    • Interactive radio cards allowing administrators to configure blocking scope with clear visual guidance:
      • Isolasi Perangkat Saja (device) (Default / Rekomendasi): Only quarantines the offending device based on Device ID / Fingerprint / LAN IP, keeping innocent users sharing the same WiFi or NAT router completely safe.
      • Seluruh IP Router Publik (ip): Quarantines the entire public router IP address.
    • Dynamic configuration controls for:
      • Automatic blocking scope (auto_block_scope: device or ip)
      • Zero tolerance instant blocking scope (instant_block_scope: device or ip)
      • Threshold count (auto_block_threshold)
      • Accumulation window in minutes (auto_block_window)
      • Quarantine duration in hours (auto_block_duration)
      • Zero tolerance instant duration (instant_block_duration)
      • HTTP 403 block enforcement master toggle (block_enforcement)
    • Dynamic multi-layer persistence: SecuritySetting database model/migration, high-performance in-memory and Cache layer, with automatic .env synchronization.
    • Headless REST API endpoints:
      • GET /api/security/settings (retrieves current configuration)
      • POST /api/security/settings (updates and applies settings with zero downtime)
    • Added comprehensive feature tests in tests/Feature/SecuritySettingsTest.php.

[2.0.6] - 2026-10-05#

Added#

  • Device-Scoped Automatic & Instant Blocking (WiFi & NAT Router Isolation):
    • Enforced device-level isolation for both threshold-based automatic blocking (autoBlockIfNeeded) and zero-tolerance instant blocking (blockImmediately), ensuring that only the specific attacking device is quarantined rather than blocking the entire public router IP or office/cafe WiFi network.
    • Innocent users and colleagues sharing the same NAT public IP address can continue accessing the application without being affected or receiving HTTP 403 Forbidden.
    • Added configurable blocking scopes in config/security.php and stubs/env.stub:
      • SECURITY_AUTO_BLOCK_SCOPE=device (options: device or ip, default: device).
      • SECURITY_INSTANT_BLOCK_SCOPE=device (options: device or ip, default: device).
    • Deterministic client device fingerprinting (generateDeviceFingerprint()): automatically synthesizes client identifiers (dev_*) from User-Agent, language, and client platform hints when custom headers (X-Device-Id, X-Client-Id) are not explicitly sent.
    • Persistent device cookie attachment: BlockIpAddress middleware attaches an app_device_id cookie to responses (including 403 Forbidden response pages) to guarantee seamless device tracking across subsequent visits.
    • Updated LogFailedLoginAttempt and LoginThrottleService to track and pass device IDs and private LAN IPs discovered via WebRTC to brute-force lockout evaluations.
    • Added end-to-end feature tests in tests/Feature/DeviceLevelBlockingTest.php verifying that two clients on the identical public router IP (REMOTE_ADDR) are isolated so that the attacker receives 403 Forbidden while the innocent device receives 200 OK.

[2.0.5] - 2026-10-05#

Added#

  • Automated API Setup & Customizable Route Files (routes/security.php & routes/security-api.php):
    • Automatically checks and executes php artisan install:api during security:install if API routes are not yet initialized in Laravel 11/12/13 host applications.
    • Generates routes/security-api.php for headless REST API endpoints and wires it into routes/api.php (require __DIR__.'/security-api.php';).
    • Generates routes/security.php for web dashboard routes and wires it into routes/web.php (require __DIR__.'/security.php';).
    • Web routes in routes/security.php render directly to views (pages::security.* / resources/views/pages/security/* for Livewire/Blade or Inertia controllers for React) so developers have full control to customize URL prefixes, middleware, layout wrappers, and custom pages.
    • Added security-routes, security-routes-web, and security-routes-api publication tags to php artisan vendor:publish.
    • Added --without-routes and --without-api flags to php artisan security:install.
    • Smart route loading in PasaxServiceProvider: prioritized host route files if customized and prevents route duplication with host routes/web.php and routes/api.php.

[2.0.4] - 2026-10-05#

Added#

  • Pure Vanilla CSS Architecture for Dashboard Views:
    • Migrated both Blade (Livewire) and React (TSX) dashboard stubs to pure Vanilla CSS.
    • Eliminated external UI library dependencies (removed Livewire Flux UI, Shadcn UI, @/lib/utils, and sonner).
    • Added standalone security.css stylesheet and zero-dependency ui.tsx helper components (Card, Button, Badge, Input, Label).
    • Unified themeable CSS Custom Properties (--sec-*) with built-in automatic dark mode (prefers-color-scheme: dark and .dark / [data-theme="dark"]).
    • 100% responsive layout across mobile, tablet, and desktop viewports with accessible modal dialogs and pure CSS trend chart bars.

[2.0.3] - 2026-10-05#

Added#

  • Automated Host Setup in security:install:
    • Automatically detects and injects the HasSecurityRelations trait and import into app/Models/User.php.
    • Automatically registers WAF middlewares (BlockIpAddress and DetectSecurityThreats) in bootstrap/app.php (Laravel 11 & 12) or app/Http/Kernel.php (Laravel 10).
    • Both injections are idempotent and preserve existing code formatting and PHPDoc tags.
    • Added --without-user-trait and --without-middleware flags to bypass automatic registration if needed.

[2.0.2] - 2026-10-04#

Added#

  • Blade & TSX Starter Kit Tags:
    • Added --with-blade, --with-tsx, and --with-all flags to php artisan security:install alongside interactive stack selection.
    • Added starterkit-blade, starterkit-tsx, starterkit-all, security-dashboard-blade, security-dashboard-tsx, and security-dashboard-all publication tags.
    • Enforced authentication and login requirement across all /security monitoring routes.

[2.0.1] - 2026-10-03#

Changed#

  • Refinements to post-2.0.0 headless architecture and route bindings.

[2.0.0] - 2026-10-03#

Changed#

  • BREAKING — version corrected to a major. Removing the CAPTCHA subsystem deletes public API (CaptchaService, ValidCaptcha, CaptchaApiController), routes, config keys, and CAPTCHA_* environment variables, so it is a breaking change. The same removal was briefly tagged 1.1.4; 2.0.0 is the canonical release. See the 1.1.4 entry below for the full list of removals.

[1.1.4] - 2026-10-03#

Removed#

  • CAPTCHA subsystem removed. The zero-dependency SVG CAPTCHA has been dropped to keep the package focused on WAF/threat protection. Deleted: CaptchaService, ValidCaptcha rule, CaptchaApiController, the /api/security/captcha endpoints, the security.captcha config block, and the CAPTCHA_* environment variables. Login brute-force protection is still provided by the multi-tier stepped login lockout.

[1.1.3] - 2026-10-03#

Added#

  • Log4Shell / JNDI detection (log4shell_jndi): new zero-tolerance instant-block signature that detects ${jndi:...} payloads in any request part (User-Agent, query string, body, headers), including the common obfuscations ${${lower:j}ndi:...} and ${j${lower:n}di:...} as well as URL-encoded forms such as %24%7Bjndi%3A.... Previously these payloads were neither detected nor logged, so a Log4Shell probe passed straight through.

Changed#

  • README: the install command now uses the explicit stable constraint (composer require pasax/secure-monitor:^1.1) and warns against @dev, which forces the unreleased dev-main branch instead of a tagged release.

[1.1.2] - 2026-10-02#

Changed#

  • README: installation guidance refresh (explicit stable constraint and the @dev warning).

[1.1.1] - 2026-10-02#

Changed#

  • Distribution: the Astro documentation site (web/) and the documents/ folder are now excluded from the Composer/Packagist archive via export-ignore and archive.exclude. The previous /DOCS entry was case-sensitive and never matched the lowercase documents/ folder, so the documentation was shipped to consumers by accident.

Added#

  • Official documentation site (Astro + Starlight) maintained in a separate repository (pasax-dev/web-laravel-security). It is not part of the package distribution.

[1.1.0] - 2026-10-02#

Added#

  • Livewire Starter Kit monitoring dashboard (optional): publish six single-file Livewire pages (Overview, Security Logs, Blocked IPs, Server Audit, User Sessions, Unblock Appeals) with php artisan vendor:publish --tag=starterkit-livewire. The dashboard is disabled by default and served under /security behind the web + auth + security.admin middleware.
  • React (Inertia) Starter Kit monitoring dashboard (optional): publish six server-rendered Inertia + React pages and shared components with php artisan vendor:publish --tag=starterkit-react. Backed by the new Internal\Pasax\Http\Controllers\Dashboard\* controllers, so no separate API token is required. Enable with SECURITY_DASHBOARD_DRIVER=react.
  • --with-dashboard and --with-react-dashboard options on php artisan security:install.
  • documents/generate.php: regenerates the documents/index.html portal (Tailwind CSS Play CDN + marked.js + Mermaid.js) from the markdown chapters.

Changed#

  • The dashboard configuration block gained a driver option (livewire | react) and the new SECURITY_DASHBOARD_DRIVER environment variable. Both starter-kit dashboards share the same route prefix and authorization middleware.
  • The documentation portal documents/index.html now uses the Tailwind CSS Play CDN instead of hand-written CSS, and its content is generated from the markdown chapters so it never drifts from documents/.

Documentation#

  • Documented the Livewire and React dashboards in the README, the installation guide, and the frontend integration guides, including the new .env variables (SECURITY_DASHBOARD_ENABLED, SECURITY_DASHBOARD_DRIVER, SECURITY_DASHBOARD_PREFIX).

[1.0.12] - 2026-10-02#

Fixed#

  • PHP 8.2 / 8.3 compatibility (critical): UserLoginService chained a method call directly off a new expression (new $model()->newQuery()). That syntax only parses from PHP 8.4, so on PHP 8.2/8.3 it raised a ParseError that failed every PHP 8.2/8.3 test-matrix job as well as the Pint job. It now uses $model::query(), which parses and formats identically on every supported PHP version.
  • PHPStan: the view()->exists('errors.blocked') suppression now matches both the true and false evaluation, since the result depends on whether the host application has published the view.

[1.0.11] - 2026-10-02#

Fixed#

  • CI: laravel/pint and larastan/larastan are no longer require-dev dependencies. Pint requires PHP 8.3 and Larastan 3 requires Laravel 11+, which broke the PHP 8.2 / Laravel 10 matrix jobs. Both tools are now installed only in their dedicated CI jobs; run composer dev:tools locally to use them.
  • PHPStan: replaced the environment-dependent view()->exists() ignore with an identifier-scoped ignore for src/Http/Middleware/BlockIpAddress.php.

[1.0.10] - 2026-10-02#

Changed#

  • The application audit now reads PUBLIC_API_KEY and TRUSTED_PROXIES via config('security.server_scan.*') instead of calling env() inside a service, and the weak-key placeholder list no longer references an app-specific value.

Fixed#

  • PHPStan: added tests/*-scoped ignores for Pest's magic $this / TestCall so IDE analysis of the test suite stays quiet, plus reportUnmatchedIgnoredErrors: false.

[1.0.9] - 2026-10-02#

Added#

  • Static analysis setup: Larastan + PHPStan (phpstan.neon.dist, phpstan-baseline.neon), a composer analyse script, and a dedicated "Static Analysis" CI job.
  • Regression tests covering the CAPTCHA endpoint, login recording, session logout, trusted IP storage, admin auto-unblock, and server scan with admins.

Fixed#

  • pushMiddleware() was called on the Illuminate\Contracts\Http\Kernel interface; middleware auto-registration now narrows to the concrete Foundation kernel before calling it.
  • CaptchaApiController called the protected CaptchaService::render(); the public /captcha endpoint now uses generate() and verifies with the correct signature.
  • Several listeners and services referenced a non-existent User class (RecordUserLogin, ResetLoginAttempts, UserLoginService::trustIp(), UserLoginService::getRealtimeActiveUsers(), and ServerSecurityService::accountChecks()), which silently disabled login recording, admin auto-unblock, and the 2FA server audit. All now resolve the configured user model dynamically.
  • Added the missing UserLoginService::logoutSession() method used by the admin session endpoint.
  • Corrected model relationship PHPDoc that referenced a non-existent User class, and used getAuthIdentifier() where the authenticated user contract is in play.

[1.0.8] - 2026-10-02#

Added#

  • Publishable default 403 page resources/views/errors/blocked.blade.php (vendor:publish --tag=security-views), including a self-contained appeal form wired to the public unblock-ticket endpoint. Integrated into security:install with a new --without-views option.
  • Laravel Pint configuration (pint.json), composer format / composer lint scripts, and a dedicated "Code Style" CI job.

Changed#

  • Applied Laravel Pint code style across the source and test suites.

[1.0.7] - 2026-10-02#

Added#

  • Presentation deck for the package under paparan/ (Laravel-Security-Monitor-Bulwark.pptx, 20 slides) with a reproducible generator (paparan/generate.php). Excluded from the Composer distribution.

[1.0.4] - 2026-10-02#

Changed#

  • Exclude development-only assets (.agents/, AGENTS.md, DOCS/, .github/, push.sh) from the Composer distribution archive via .gitattributes export-ignore rules and the archive.exclude Composer setting, so composer require installs only the runtime package.

[1.0.0] - 2026-10-01#

Added#

  • Self-Hosted WAF & Threat Engine:
    • Zero-tolerance instant block signatures (null byte, double extensions, path traversal, webshell probes, SSTI canary, polyglot uploads).
    • Multi-tier progressive threat scoring and auto-blocking with sliding time windows.
    • ReDoS-hardened regex patterns tuned against real-world incidents.
    • Reverse proxy support (CF-Connecting-IP, X-Real-IP, X-Forwarded-For).
  • Device-Level Quarantine & Scope:
    • Granular blocking via device_id and local_ip (WebRTC / device fingerprint) to avoid punishing innocent users on shared NAT/router public IPs.
    • Block scopes: ip (entire router) vs device (specific client device).
  • Public Appeal & Ticket Submissions:
    • Public headless REST API for unblock appeal ticket submission and verification.
    • Admin approval/rejection endpoints with automatic IP/device quarantine release.
  • Multi-Tier Stepped Login Protection:
    • Stepped progressive lockouts (1m -> 5m -> 15m -> 1h -> 24h) preventing brute force and credential stuffing attacks.
    • Automatic failed login security event logging.
  • Zero-Dependency SVG CAPTCHA:
    • Pure SVG vector-matrix challenge generator without GD or Imagick PHP extension requirements.
    • Cryptographically secure one-time stateless session tokens.
  • Server Integrity & Security Scanner:
    • SHA-256 baseline creation and change verification.
    • Suspicious file & webshell scanner with safe admin deletion capabilities (traversal protected, vital files protected).
    • Server configuration audit (PHP version, debug mode, HTTPS cookies, Fortify 2FA).
  • Apache / Nginx Access Log Scanner:
    • Streaming log parser to detect web attacks rejected before reaching Laravel.
    • Auto-import and zero-tolerance IP blocking from raw server logs.
  • Headless REST API Architecture:
    • 100% decoupled from any specific frontend (React/Inertia/Blade/Livewire/Mobile).
    • Pure JSON endpoints for logs, blocked IPs, server scans, sessions, appeals, and captcha.
  • Enterprise Extensibility:
    • Configurable user model (config('security.user_model')).
    • Configurable table names (config('security.table_names.*')).
    • HasSecurityRelations model trait for seamless user relationship bindings.
    • Laravel 10, 11, 12, and 13 compatibility.