MIF_E31221222/sigap-mobile/auth_and_panic_button_flow.md

191 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🔐 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:
1. App diluncurkan.
2. Cek token atau NIK/NRP di `secure_storage`.
3. Jika tersedia → munculkan biometric prompt.
4. Jika autentikasi sukses → login otomatis ke homepage.
5. 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:
1. 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:
1. User menekan panic button.
2. Backend:
- Hitung jumlah panic alert dari user dalam 5 menit terakhir.
- Jika > 3 → tambahkan `panic_strike`.
- Jika `panic_strike >= 3` → set `is_banned = true`.
3. Saat user login atau mendaftar:
- Cek `is_banned` berdasarkan NIK/NRP.
- Jika ya → tolak akses.
# 📍 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:
1. 📲 User membuka halaman registrasi
2. 📍 Aplikasi meminta akses lokasi
3. ✅ 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
4. ❌ Jika `position.isMocked == true`:
- Blokir pendaftaran
- Tambahkan flag `spoofing_attempt = true` (opsional)
---
## 🚨 2. PANIC BUTTON FLOW
### 🔄 Alur:
1. 📲 User membuka halaman Panic Button
2. 📍 Aplikasi:
- Ambil posisi GPS terkini
- Periksa:
- `isMocked == false`
- Lokasi berada di wilayah Jember
3. ✅ Jika valid:
- Panic button aktif
4. ❌ Jika:
- Lokasi palsu (`isMocked == true`)
- Atau lokasi di luar Jember
- → Panic button **dinonaktifkan**
- Tampilkan alert: *"Fitur Panic tidak dapat digunakan di luar Jember."*
5. ⚠️ Jika user mencoba spam dari lokasi palsu:
- Tambahkan `spoofing_strike += 1`
- Jika `spoofing_strike >= 2``is_banned = true`
---
### 🔧 Database Fields (liat schema.prisma untul lebih detail):
```sql
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
```
Splash Screen
Token Valid?
┌─────────────┐
│ Ya │ → Biometric Prompt
│ Tidak │
└─────┬───────┘
Onboarding Completed?
┌─────────────┐
│ Ya │ → geolocator verification
│ Tidak │ → Tampilkan Onboarding
└─────┬───────┘
Location Valid?
┌─────────────┐
│ Ya │ → Role Selection
│ Tidak │ → Tampilkan Sreen warning geolocator
└─────┬───────┘
Role Selection
Registrasi Step Form (NIK/NRP + Upload KTP/KTA + OCR AI untuk validasi KTP/KTA)
Submit & Buat Akun
Login Manual
Login Success?
┌─────────────┐
│ Ya │ → Home sesuai Role
│ Tidak │ → Tampilkan Error
└─────────────┘