Node.js 20+ ยท Express ยท SQLite ยท node:crypto ยท TaskHub
Repositori ini adalah implementasi referensi lengkap untuk silabus resmi pelatihan API Development Training Hari 2 (Sesi 4 dan 5 NQA). Seluruh kode, pustaka, middleware, dan skrip pengujian dibangun dari dasar untuk membuktikan konsep keamanan dan perilaku API saat dependensi pihak ketiga mengalami kegagalan.
- ๐ฎ Interactive Web Playground (
/playground): Antarmuka web modern dengan dark-mode glassmorphism untuk menguji seluruh materi: BOLA/IDOR, Mass Assignment, Rate Limiting 429, simulasi manipulasi AES-256-GCM 1-bit, dan Fault Injection Mock Provider secara visual tanpa perlu menghafal curl. - ๐ 8 Modul Bahan Ajar Komprehensif (
bahan_ajar/): Menjelaskan seluruh 77 slide pelatihan NQA dari dasar filosofi hingga arsitektur produksi, disertai diagram alur (Mermaid) dan petunjuk praktikum. - ๐ Glosarium Lengkap 51 Kosakata Teknis (
bahan_ajar/08_glosarium_dan_kamus_istilah.md): Menerjemahkan dan menguraikan seluruh kosakata sulit bahasa Inggris (BOLA, IDOR, Nonce, AAD, DEK, KEK, Jitter, Backoff, Circuit Breaker, Bulkhead, SSRF, scrypt, HMAC, dll.) beserta analogi dunia nyata. - ๐ Komentar Lini demi Lini di Setiap File Kode: Setiap berkas kode sumber dilengkapi dokumentasi berbahasa Indonesia yang menerangkan apa fungsinya, mengapa dibuat demikian sesuai slide, dan risiko keamanan apa yang dicegah.
- ๐ Arsitektur Dwi-Server Terisolasi:
- TaskHub API Gateway (
port 8000): Server utama yang menerapkan autentikasi Bearer, otorisasican_access, validasi skema Zod, Pino structured logging, rate limiting, dan adapter out-bound. - Provider Mock Service (
port 8001): Server tiruan pihak ketiga yang mengimplementasikan persistensi Idempotency Key di SQLite serta 5 mode kegagalan (fault injection:ok,busy,fail,slow,bad).
- TaskHub API Gateway (
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ BROWSER CLIENT / CURL (Zona Tidak Tepercaya) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 1. HTTP Request (Bearer Token + Idempotency-Key)
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ TASKHUB API GATEWAY (Express :8000) โ
โ ------------------------------------------------------ โ
โ โข Request ID Middleware (crypto.randomUUID) โ
โ โข Structured Logging (Pino dengan sensor token) โ
โ โข CORS Middleware & Rate Limiter (60 req/min/IP) โ
โ โข 5 Lapisan Kontrol Input: 413 โ 415 โ 400 โ 422 โ
โ โข BOLA / IDOR Protection (can_access Policy) โ
โ โข SQLite Database (Prepared Statements anti-injeksi) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 2. NotificationAdapter (Timeout 1500ms,
โ Exponential Backoff & Jitter, Circuit Breaker)
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ PROVIDER MOCK SERVICE (Express :8001) โ
โ ------------------------------------------------------ โ
โ โข Persistensi Idempotency Key & Hash di SQLite โ
โ โข Deteksi Konflik Payload (409 Conflict) โ
โ โข 5 Mode Fault Injection: ok, busy, fail, slow, bad โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Tip
๐ Panduan Instalasi Khusus Pemula s/d Menengah: Jika Anda baru pertama kali menjalankan proyek Node.js atau membutuhkan panduan langkah-demi-langkah yang sangat detail disertai penjelasan setiap perintah dan pemecahan masalah (troubleshooting), silakan baca: ๐ PANDUAN_INSTALASI.md (Klik di sini untuk panduan ramah pemula)
Pastikan Anda menggunakan Node.js versi 20 ke atas:
node -v # Minimal v20.x.x
npm -vcd /Users/sulaimansaleh/Documents/API-Development-2
npm installIsi data awal pengguna (Alice, Bob, Charlie Manager, Diana Admin, Eve) dan tugas:
npm run seedBuka dua terminal terpisah:
Terminal 1 (Jalankan Mock Provider di port 8001):
npm run mockTerminal 2 (Jalankan TaskHub API di port 8000):
npm startBuka peramban favorit Anda dan kunjungi: ๐ http://127.0.0.1:8000/playground
Repositori ini menyertakan skrip otomatis untuk membuktikan seluruh teori di slide:
Membuktikan bahwa manipulasi bit (tampering) pada ciphertext akan ditolak secara kriptografis oleh GMAC Authentication Tag:
npm run crypto-demoMenjalankan pengujian end-to 8A1E -end:
- Penolakan akses Bob terhadap tugas Alice (BOLA โ 403 Forbidden).
- Penolakan Manager Tim A terhadap tugas Bob di Tim B (403 Forbidden).
- Penolakan injeksi
is_admin/role(Mass Assignment โ 422 Unprocessable Entity). - Jaminan Idempotency Key (pengulangan transaksi menghasilkan respons identik).
- 3 intent gagal berturut-turut memicu Circuit Breaker jeglek ke posisi OPEN selama 10 detik (503 CIRCUIT_OPEN).
npm run test:fault| Modul | Judul Materi | Rujukan Slide |
|---|---|---|
| Modul 00 | Prasyarat Belajar & Arsitektur Lab TaskHub | Slide 1 โ 5, 8, 50 |
| Modul 01 | Threat Modeling & Mitigasi BOLA / IDOR | Slide 6 โ 14 |
| Modul 02 | Kontrol Input, Mass Assignment & Error Handling | Slide 15 โ 24 |
| Modul 03 | Rate Limiting & Kebijakan Browser CORS | Slide 25 โ 31 |
| Modul 04 | Kriptografi, Key Management & Secret Safety | Slide 32 โ 46 |
| Modul 05 | Integrasi Pihak Ketiga & Pola Reliability | Slide 47 โ 64, 71 |
| Modul 06 | Panduan Praktik Lab Provider Mock & Fault Injection | Slide 65 โ 72 |
| Modul 07 | Evaluasi, Threat Review & Analisis Gap Produksi | Slide 73 โ 77 |
| Modul 08 | Glosarium Komprehensif Kosakata & Istilah Teknis | Semua 77 Slide |
API-Development-2/
โโโ package.json # Konfigurasi dependensi Node.js ES Modules & skrip
โโโ .env.example # Contoh template environment variables (Slide 45)
โโโ .env # Variabel lingkungan aktif untuk laboratorium
โโโ .gitignore # Larangan commit secret, token, dan sqlite (Slide 44)
โโโ openapi.yaml # Spesifikasi resmi OpenAPI 3.1.0 untuk TaskHub API
โโโ postman_collection.json # Koleksi Postman siap pakai untuk pengujian
โโโ README.md # Dokumentasi utama proyek
โโโ bahan_ajar/ # Modul kurikulum edukasi lengkap (Modul 00 s/d 08)
โ โโโ README.md
โ โโโ 00_prasyarat_dan_arsitektur.md
โ โโโ 01_threat_modeling_dan_bola.md
โ โโโ 02_input_control_dan_mass_assignment.md
โ โโโ 03_rate_limiting_dan_cors.md
โ โโโ 04_kriptografi_dan_secret_management.md
โ โโโ 05_integrasi_eksternal_dan_reliability.md
โ โโโ 06_lab_provider_mock_dan_fault_injection.md
โ โโโ 07_evaluasi_checklist_dan_gap_produksi.md
โ โโโ 08_glosarium_dan_kamus_istilah.md
โโโ playground/ # Antarmuka web interaktif (HTML5 + CSS Modern + JS)
โ โโโ index.html
โ โโโ style.css
โ โโโ app.js
โโโ provider-mock/ # Layanan eksternal tiruan (Port 8001)
โ โโโ index.js # Server Express Mock (mode: ok, busy, fail, slow, bad)
โ โโโ db.js # Persistensi SQLite untuk rekaman idempotensi (Slide 56)
โโโ scripts/ # Skrip utilitas dan pengujian otomatis
โ โโโ aes_gcm_demo.js # Demonstrasi mandiri round-trip AES-256-GCM (Slide 38-40)
โ โโโ seed.js # Inisialisasi basis data awal (Alice, Bob, Charlie, dll)
โ โโโ test_fault_injection.js# Test runner otomatis BOLA, Idempotency & Circuit Breaker
โโโ src/ # Server inti TaskHub API (Port 8000)
โโโ index.js # Titik masuk utama server Express
โโโ config.js # Validasi konfigurasi lingkungan dengan Zod (Slide 45)
โโโ logger.js # Logging terstruktur Pino dengan sensor data rahasia
โโโ db.js # SQLite database helper & prepared statements
โโโ middleware/
โ โโโ auth.js # Validasi Bearer Token (SHA-256 opaque hash)
โ โโโ corsConfig.js # Konfigurasi keamanan CORS (Slide 30)
โ โโโ errorHandler.js # Penanganan error konsisten Express (Slide 23)
โ โโโ policy.js # Kebijakan can_access anti-BOLA/IDOR (Slide 14)
โ โโโ rateLimiter.js # Rate limiter 60 req/min/IP (Slide 27)
โ โโโ requestId.js # Generator Request ID (crypto.randomUUID) (Slide 24)
โโโ routes/
โ โโโ authRoutes.js # /api/v1/auth/login dan /me
โ โโโ debugRoutes.js # Endpoint diagnostik untuk Web Playground
โ โโโ taskRoutes.js # /api/v1/tasks CRUD, /notify, dan AES-GCM secret
โโโ schemas/
โ โโโ taskSchemas.js # Skema Zod .strict() & output serializers (Slide 20-22)
โโโ services/
โโโ circuitBreaker.js # State machine Circuit Breaker (Slide 58-60)
โโโ cryptoService.js # scrypt, SHA-256, dan AES-256-GCM AEAD (Slide 34-40)
โโโ notificationAdapter.js # Adapter ke vendor dengan timeout & retry (Slide 49-63)
Seluruh akun menggunakan kata sandi default: Password123!
| Pengguna | Peran (Role) | Tim | Tenant | Peruntukan Pengujian |
|---|---|---|---|---|
| alice | member |
team-a |
tenant-1 |
Pemilik tugas task-alice-101, pengirim notifikasi |
| bob | member |
team-b |
tenant-1 |
Simulasi penyerang BOLA (mencoba mengakses data Alice) |
| charlie | manager |
team-a |
tenant-1 |
Pengujian wewenang manajerial tim (ditolak atas tugas Bob Tim B) |
| diana | admin |
team-admin |
tenant-1 |
Pengujian hak akses menyeluruh dalam satu tenant |
| eve | member |
team-x |
tenant-2 |
Pengujian isolasi multi-tenant batas tenant |
Materi pembelajaran ini dikembangkan berdasarkan silabus resmi API Development Training Hari 2 untuk tujuan edukasi internal dan riset arsitektur perangkat lunak.