# Catatan Modifikasi V8 — UX Lapangan, Dashboard Pimpinan, dan Keamanan Dasar Tanggal modifikasi: 27 April 2026 ## Fokus perubahan Versi ini memodifikasi sistem berdasarkan sudut pandang: 1. masyarakat / user umum, 2. petugas lapangan, 3. operator/admin, 4. pimpinan, 5. keamanan dasar aplikasi web. ## Perubahan utama ### 1. Form publik dibuat lebih mudah untuk masyarakat File yang diubah: - `lapor.html` - `assets/js/public-report.js` - `assets/css/style.css` Perubahan: - Form publik menjadi wizard 5 langkah: 1. pilih jenis masalah, 2. pilih tingkat kerusakan, 3. ambil lokasi / isi patokan, 4. upload foto, 5. isi data pelapor. - Istilah teknis seperti latitude/longitude disembunyikan di bagian "Koordinat teknis". - Tersedia tombol besar: Buat Laporan, Cek Status, WhatsApp. - Foto dikompresi di browser sebelum dikirim agar lebih ringan untuk HP. - Setelah laporan dikirim, nomor tiket tampil besar dan bisa disalin. - Ditambahkan fitur cek status laporan publik tanpa login. ### 2. Endpoint status laporan publik File yang diubah: - `server.js` Endpoint baru: ```txt GET /api/reports/public/:id ``` Endpoint ini hanya menampilkan data aman untuk publik: - nomor laporan, - tanggal, - status, - jenis laporan, - tingkat kerusakan, - wilayah umum, - ringkasan status, - riwayat status. Data pribadi pelapor seperti nomor HP tidak ditampilkan. ### 3. Dashboard pimpinan dibuat lebih ringkas File yang diubah: - `main.html` - `assets/js/main.js` Perubahan: - Dashboard Atasan sekarang bisa menampilkan ringkasan seluruh D.I, bukan hanya satu D.I. - Ditambahkan opsi "Semua D.I — Ringkasan wilayah". - Data pimpinan difokuskan pada: - status umum, - luas terdampak indikatif, - aset prioritas tinggi, - laporan aktif, - cakupan layanan, - rekomendasi keputusan. - Urutan D.I pada tabel perbandingan mengikuti risiko tertinggi. - Ditambahkan tombol: - Mode Rapat, - Cetak Ringkasan. ### 4. Keamanan dasar backend diperkuat File yang diubah: - `server.js` Perubahan: - Akses publik ke folder/file sensitif diblokir: - `/backend`, - `/node_modules`, - `/patch`, - `/server.js`, - `/package.json`, - `/.env`. - Header keamanan dasar ditambahkan: - `X-Content-Type-Options`, - `X-Frame-Options`, - `Referrer-Policy`, - `Permissions-Policy`. - Rate limit sederhana ditambahkan untuk: - login, - laporan publik. - Batas JSON request diturunkan dari 20 MB ke 10 MB. - Penulisan JSON dibuat atomic menggunakan file sementara lalu rename. ### 5. RBAC backend diperketat File yang diubah: - `server.js` Perubahan: - Update laporan, ubah status, komentar, dan link aset hanya untuk `admin`, `operator`, atau `manager`. - Hapus laporan hanya untuk `admin`. - Create/update data OP hanya untuk `admin`, `operator`, atau `manager`. - Hapus data OP hanya untuk `admin`. - Endpoint approval lama dibatasi hanya untuk `admin`. ### 6. Upload base64 divalidasi File yang diubah: - `server.js` Perubahan: - Maksimum upload default 5 MB. - Validasi base64. - Deteksi MIME dasar berdasarkan magic number. - Jenis file dibatasi ke: - JPG, - PNG, - WEBP, - PDF, - TXT. ### 7. `data/di_list.json` diperbaiki Sebelumnya file ini bukan JSON valid karena berisi teks placeholder. Sekarang file tersebut dibuat menjadi JSON valid berdasarkan folder `data/D.I ...`. ## Cara menjalankan ```bash npm start ``` Lalu buka: ```txt http://localhost:8008/ http://localhost:8008/login.html http://localhost:8008/lapor.html ``` ## Catatan penting untuk produksi Perubahan ini sudah menutup beberapa risiko penting, tetapi untuk produksi serius masih disarankan: 1. pindahkan data dari JSON file ke PostgreSQL + PostGIS, 2. gunakan HTTPS, 3. pindahkan token login ke HttpOnly cookie, 4. aktifkan CORS allowlist melalui `.env`, 5. nonaktifkan akun demo/default, 6. pasang backup otomatis, 7. verifikasi signature webhook WhatsApp dari Meta.