Files
login-vault-android/README.md

140 lines
5.2 KiB
Markdown

# Login Vault (Android)
Aplikasi Flutter untuk menyimpan **login & data pribadi** di database lokal
Android. Semua data tersimpan di perangkat (offline-first, tanpa server).
- Minimum Android: **10 (API 29)**
- Compile / Target SDK: 36
- Package: `com.omahcitra.loginvault`
---
## Fitur
- **Autentikasi lokal** — registrasi/login via **email + password aplikasi**.
Email disimpan di secure storage sebagai identitas.
- **Login dengan sidik jari (biometric)** — setelah registrasi, kamu dapat
mengaktifkan fingerprint di Pengaturan. Saat membuka aplikasi, dialog
sidik jari muncul otomatis dan **mem-bypass** form email/password bila
verifikasi sukses. Bila dibatalkan, tetap bisa login manual.
- **Session timeout** — login otomatis logout setelah periode tanpa aktivitas
(default 3 menit, bisa diubah: 5/10/15/30/60 menit atau Selamanya).
- **Penyimpanan lokal terenkripsi** — tiap entri punya:
- `id` : `String`, **unik** (primary key)
- `content` : `String`, disimpan terenkripsi (XOR + base64) menggunakan
**constant key** (`AppConstants.encryptionKey`)
- **Dashboard**:
1. Text search yang mencari `id` di local DB **setiap kali pengetikan**
(live filter, tampil sebagai list id)
2. Klik item list → konten ditampilkan di bawahnya (expandable)
3. Swipe ke kiri untuk hapus → muncul **dialog konfirmasi**
4. Tombol **edit** di tiap list untuk ubah konten
- **Menu Pengaturan**:
- Ubah password aplikasi
- Aktifkan/nonaktifkan login sidik jari (dengan dialog konfirmasi)
- Atur session timeout
- Ganti tema: **Gelap (Dark)** atau **Sistem (System)**
- **Menu Exit** — keluar dari aplikasi
---
## Arsitektur & Keamanan
```
lib/
├── constants.dart # AppConstants: encryptionKey (constant), session keys
├── encryptor.dart # XOR + base64 obfuscation (constant key)
├── database_helper.dart # sqflite: tabel 'vault' (id PK, content)
├── auth_service.dart # register/login, secure storage, biometric, session
├── theme_provider.dart # theme mode (system/dark), persist via SharedPreferences
├── auth_screen.dart # login/registrasi adaptif (email+password, bypass fingerprint)
├── dashboard_screen.dart # search live, list, expand, swipe-delete, edit
├── settings_screen.dart # ubah password, tema, fingerprint, timeout, exit
├── vault_entry_dialogs.dart# dialog add/edit/confirm
└── main.dart # entrypoint + routing + ThemeProvider
```
> **Catatan keamanan penting:** Enkripsi konten menggunakan **constant key**
> (`AppConstants.encryptionKey`) — ini obfuscation ringan, **bukan kriptografi
> yang aman**. Sesuai permintaan ("encrypt base64 dengan key sebagai constant"),
> konten di-database tidak dapat dibaca langsung tanpa key tersebut. Untuk
> proteksi produksi, ganti `Encryptor` dengan AES menggunakan key yang
> diturunkan dari password aplikasi + `flutter_secure_storage` (Android
> Keystore).
Email & password aplikasi disimpan via `flutter_secure_storage` (ter-enkripsi di
Android Keystore). Sidik jari menggunakan plugin `local_auth` (dialog biometric
bawaan Android, memerlukan `FlutterFragmentActivity`).
---
## Cara build APK
Prasyarat: Flutter SDK (stable), JDK 17, Android SDK (build-tools 34+, platforms
29 & 36).
```bash
flutter pub get
flutter build apk --release
# hasil: build/app/outputs/flutter-apk/app-release.apk
```
### Konfigurasi Android
- `android/app/build.gradle.kts`: `minSdk = 29`, `compileSdk = 36`,
`targetSdk = 36`, `applicationId = com.omahcitra.loginvault`
- `android/local.properties`: `sdk.dir=/path/to/android-sdk`
- `android/app/src/main/kotlin/.../MainActivity.kt`: extends
`FlutterFragmentActivity` (wajib untuk `local_auth`)
- `AndroidManifest.xml`: permission `INTERNET` (tidak wajib untuk fitur inti,
aman dihapus bila tidak ada panggilan jaringan)
> APK release di-build dengan **debug keystore** (signingConfig debug) agar
> bisa dihasilkan tanpa upload key. Untuk distribusi Play Store, ganti dengan
> keystore rilis milik Anda.
---
## Instal & jalankan
```bash
# mode debug di device/emulator
flutter run
# atau install APK hasil build
adb install build/app/outputs/flutter-apk/app-release.apk
```
---
## Alur penggunaan
1. **Pertama install** → layar registrasi: isi email + password aplikasi.
2. Setelah login → **Dashboard**:
- Ketik di kolom pencarian untuk filter `id` secara live.
- Tap sebuah `id` → kontennya muncul di bawah.
- Swipe kiri pada item → konfirmasi hapus.
- Tap ikon edit → ubah konten.
- Tombol `+` (FAB) → tambah entri baru (id unik + konten).
3. **Pengaturan** (ikon gear):
- Ubah password aplikasi
- Aktifkan "Login dengan sidik jari" (muncul dialog konfirmasi; batal = tetap off)
- Atur session timeout
- Ganti tema, atau Exit.
---
## Dependencies utama
| Paket | Fungsi |
|-------|--------|
| `sqflite` | local database SQLite |
| `flutter_secure_storage` | simpan email & password aplikasi (Keystore) |
| `local_auth` | login dengan sidik jari (biometric Android) |
| `provider` | state management (theme) |
| `shared_preferences` | persist tema & session timeout |
| `crypto` | utilitas (tidak wajib, tersedia) |
---
© OmahCitra — aplikasi vault login lokal.