MIF_E31221222/sigap-mobile/auth_and_panic_button_flow.md

4.7 KiB
Raw Blame History

🔐 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 >= 2is_banned = true

🔧 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

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 └─────────────┘