3.7 KiB
3.7 KiB
🔐 Auth Verification Flow – GIS Crime App
Dokumentasi ini merinci alur autentikasi aplikasi termasuk biometric login, verifikasi identitas (NIK/KTP untuk user & NRP/KTA untuk officer), serta sistem anti-spam panic button dan auto-ban.
1. Biometric Login (Fingerprint / Face ID)
📍 Tujuan:
Mempercepat login pengguna dengan otentikasi biometrik.
🔄 Alur:
- App diluncurkan.
- Cek token atau NIK/NRP di
secure_storage
. - Jika tersedia → munculkan biometric prompt.
- Jika autentikasi sukses → login otomatis ke homepage.
- Jika gagal → redirect ke halaman login manual.
🔧 Teknologi:
local_auth
(Flutter)flutter_secure_storage
2. Registrasi dengan Verifikasi NIK (User) atau NRP (Officer)
📍 Tujuan:
Mencegah spam akun dan memastikan pengguna adalah individu sah.
🔄 Alur:
- User mengisi form registrasi:
- Email, password
- NIK (user) atau NRP (officer)
- Upload foto KTP/KTA (opsional)
- Validasi format NIK/NRP
- Cek apakah NIK/NRP sudah ada di database.
- Jika
is_banned = true
→ tolak registrasi. - Jika valid → simpan user baru.
🔧 Teknologi:
- Supabase/PostgreSQL (unique index + ban flag)
- Flutter form + validasi lokal
3. Verifikasi KTP/KTA (Opsional)
📍 Tujuan:
Validasi lanjutan jika diperlukan (manual atau otomatis).
🅱️ Otomatis (OCR):
- Gunakan
google_mlkit_text_recognition
dan sejenisnya - Ekstrak teks dari foto KTP atau KTA
- Cocokkan dengan data yang dimasukkan
4. Anti-Spam Panic Button + Auto Ban
📍 Tujuan:
Menghindari penyalahgunaan fitur panic alert.
🔄 Alur:
-
User menekan panic button.
-
Backend:
- Hitung jumlah panic alert dari user dalam 5 menit terakhir.
- Jika > 3 → tambahkan
panic_strike
. - Jika
panic_strike >= 3
→ setis_banned = true
.
-
Saat user login atau mendaftar:
- Cek
is_banned
berdasarkan NIK/NRP. - Jika ya → tolak akses.
- Cek
📍 Location & Anti-Fake GPS Flow – GIS Crime App
Dokumentasi ini merinci bagaimana sistem memverifikasi lokasi pengguna dan melindungi fitur penting seperti registrasi dan panic button dari penyalahgunaan melalui fake GPS (location spoofing).
teknologi
geolocator geocoding
🚦 1. REGISTRASI FLOW (NEW USER)
🔄 Alur:
- 📲 User membuka halaman registrasi
- 📍 Aplikasi meminta akses lokasi
- ✅ Jika lokasi berhasil didapat:
- Periksa apakah
position.isMocked == false
- Konversi koordinat → nama kota
- Jika kota "Jember":
- Lanjutkan proses registrasi
- Jika bukan Jember:
- Tampilkan alert: "Registrasi hanya tersedia di wilayah Jember."
- Blokir pendaftaran
- Periksa apakah
- ❌ Jika
position.isMocked == true
:- Blokir pendaftaran
- Tambahkan flag
spoofing_attempt = true
(opsional)
🚨 2. PANIC BUTTON FLOW
🔄 Alur:
- 📲 User membuka halaman Panic Button
- 📍 Aplikasi:
- Ambil posisi GPS terkini
- Periksa:
isMocked == false
- Lokasi berada di wilayah Jember
- ✅ Jika valid:
- Panic button aktif
- ❌ Jika:
- Lokasi palsu (
isMocked == true
) - Atau lokasi di luar Jember
- → Panic button dinonaktifkan
- Tampilkan alert: "Fitur Panic tidak dapat digunakan di luar Jember."
- Lokasi palsu (
- ⚠️ Jika user mencoba spam dari lokasi palsu:
- Tambahkan
spoofing_strike += 1
- Jika
spoofing_strike >= 2
→is_banned = true
- Tambahkan
🔧 Database Fields (liat schema.prisma untul lebih detail):
users:
.....
- is_banned BOOLEAN
- ban_reason TEXT
- panic_strike INT
- profile
......
- nik
officer:
- nrp TEXT UNIQUE
- is_banned BOOLEAN
- ban_reason TEXT
- panic_strike INT
panic_logs:
- user_id UUID
- timestamp TIMESTAMP
- location POINT