Tolong audit dan amankan alur login WhatsApp OTP serta integrasikan Cloudflare Turnstile pada proyek Node.js, SQLite, dan Tailwind CSS ini. Lakukan langkah-langkah berikut: 1. Konfigurasi Environment Variables (.env): - Gunakan variabel .env untuk menyimpan WA_API_KEY, WA_GATEWAY_URL, CF_TURNSTILE_SITE_KEY, dan CF_TURNSTILE_SECRET_KEY. - Pastikan tidak ada API Key atau rahasia yang tertulis langsung (hardcoded) di kode backend maupun frontend. 2. Pengamanan Backend (Express / Node.js & SQLite): - Kunci Template Pesan: Hapus/abaikan parameter teks pesan dari frontend. Backend harus membuat kode OTP 6-digit secara acak dan mengunci format teks pesan WhatsApp di backend. - Verifikasi Cloudflare Turnstile Server-Side: Pada endpoint kirim OTP (misal /api/send-otp), terima token cf-turnstile-response dari frontend. Verifikasi token ini ke API Cloudflare (https://challenges.cloudflare.com/turnstile/v0/siteverify) menggunakan CF_TURNSTILE_SECRET_KEY. Jika verifikasi gagal/kadaluwarsa, kembalikan response error HTTP 403. - Pasang Rate Limiter: Batasi request kirim OTP (misalnya maksimal 3 kali per 10 menit per IP / nomor telepon) menggunakan middleware seperti express-rate-limit. - SQLite Prepared Statements: Pastikan query simpan/update OTP ke database SQLite menggunakan parameterized query / prepared statement untuk mencegah SQL Injection. 3. Pembaruan Frontend (HTML & Tailwind CSS): - Tambahkan skrip Cloudflare Turnstile (https://challenges.cloudflare.com/turnstile/v0/api.js) pada halaman login. - Sisipkan div widget Turnstile
di dalam form login OTP. - Saat form disubmit, ambil token Turnstile (cf-turnstile-response) dan sertakan bersama nomor WhatsApp ke payload request backend. - Jika kirim OTP gagal atau terjadi error, tambahkan fungsi untuk me-reset widget Turnstile (turnstile.reset()). Tolong periksa seluruh berkas terkait dan jalankan refactoring ini secara menyeluruh.