Lewati ke isi

Sentra Membership — Ops (Security + Deployment + Testing)

Security — Membership Delta

Baseline security patterns: _shared/security-patterns.md

Overrides

  • (no overrides — baseline patterns apply)

Tambahan Sistem-Spesifik

Anti-Passback Audit Trail: - Setiap percobaan akses gate (sukses maupun gagal) dicatat permanen di tabel gate_logs dengan kolom is_success dan failure_reason. - Log tidak dapat dihapus atau dimodifikasi oleh role apapun di bawah Owner — hanya append-only. - Anti-passback violation secara otomatis memicu alert ke resepsionis dan menciptakan entri audit yang dapat di-export untuk investigasi fraud.

Wallet Ledger Immutability: - Tabel wallet_transactions bersifat append-only — tidak ada operasi UPDATE atau DELETE yang diizinkan. - Setiap baris transaksi memiliki transaction_signature unik (HMAC-SHA256 dari detail transaksi). - Saldo di tabel wallets dilindungi oleh wallet_signature_hash: Signature = HMAC-SHA256(wallet_id || balance || updated_at, Secret_Key) - Sebelum setiap transaksi baru, sistem memverifikasi ulang signature. Ketidakcocokan = saldo dimanipulasi paksa = wallet dibekukan otomatis + security alert.

Biometric Data Privacy (UU PDP Compliant): - Raw foto wajah dihapus dari RAM edge device dalam < 2 detik setelah ekstraksi. - Hanya 128-dimensi face embedding hash (AES-256 encrypted) yang disimpan di database. - Tidak ada foto mentah yang tersimpan di cloud storage manapun. - Biometric hash tidak dapat di-reverse-engineer kembali menjadi foto asli (one-way).

Dynamic QR Code Anti-Replay: - QR code check-in adalah token JWT dinamis yang berisi ID Member + timestamp pembuatan. - Token diperbarui otomatis setiap 30 detik di aplikasi mobile. - Edge Gateway menolak token QR dengan selisih waktu > 30 detik dari jam server lokal.


Deployment — Membership Delta

Baseline deployment: _shared/deployment-baseline.md

Overrides

  • (no overrides)

Tambahan Sistem-Spesifik

Edge Gateway Raspberry Pi per Cabang: - Setiap cabang gym memiliki satu unit Raspberry Pi (atau Industrial PC) yang menjalankan Edge Gateway daemon (Go binary). - Edge Gateway terhubung ke cloud via Secure MQTT over WebSockets TLS 1.3. - Perangkat edge harus tahan 24 jam operasi nonstop dengan UPS backup. - Update firmware edge gateway dilakukan via OTA (Over-The-Air) push dari cloud admin.

Cloud Architecture (AWS Multi-AZ):

AWS Route 53 → AWS ALB
  ├─ AZ-A: EKS Pod (Go API Engine) + EKS Pod (NestJS Core)
  └─ AZ-B: EKS Pod (Go API Engine) + EKS Pod (NestJS Core)
       └─ Redis Cluster (Active Locks & Session Cache)
            └─ Amazon RDS PostgreSQL (Active-Passive Multi-AZ Replica)

Edge-to-Cloud Communication:

Branch Physical Site
  └─ Raspberry Pi (Mosquitto MQTT Broker + Go Daemon)
       ├─ Turnstile Gate 1 (Face Camera + NFC/RFID Reader)
       └─ Turnstile Gate 2 (Face Camera + NFC/RFID Reader)
            └─ Secure MQTT over WebSockets TLS 1.3
                 └─ AWS Cloud Backend


Testing Checklist (QA)

19.1 Core Automation Test Suite Scenarios

Category Test Case Scenario Validation Target Test Type
High Concurrency Booking Simulasi 3.000 request booking slot kelas dalam milidetik yang sama saat kuota tersisa tinggal 1 Tepat 1 request sukses mendapatkan slot. 2.999 lainnya masuk waiting list tanpa deadlock Concurrency / Load Test
Offline Gate Access Internet cabang diputus paksa. Member aktif men-scan wajah di kamera gerbang Gateway lokal Raspberry Pi memproses biometrik menggunakan SQLite lokal dan membuka turnstile gate Offline / Chaos Test
Anti-Passback Rule Member mencoba men-scan QR code check-in kedua kalinya berturut-turut tanpa scan keluar Sistem menolak izin masuk, is_success: false, turnstile tetap terkunci Functional / E2E Gate
Wallet Anti-Tampering Memodifikasi nilai kolom balance secara manual di PostgreSQL via pgAdmin Transaksi berikutnya ditolak karena ketidakcocokan wallet_signature_hash (Error: TAMPERED_DATA) Security / Penetration
Payment Gateway Sync Simulasi delay webhook Midtrans hingga 10 menit saat top-up saldo via QRIS Sistem memproses transaksi asinkron tanpa duplikasi saldo meskipun webhook dikirim berulang Integration / Webhook