# 🔗 Panduan Integrasi RDP ↔ cPanel

Dokumen ini menjelaskan cara menghubungkan **server lokal RDP** dengan **server produksi cPanel**
agar data (voucher, akun, settings) tersinkronisasi otomatis.

---

## 🏗️ Arsitektur

```
┌──────────────────────┐         ┌──────────────────────┐
│  RDP (Local)         │         │  cPanel (Production) │
│  - Bot (Playwright)  │  ─────▶ │  - Web Server        │
│  - Server API        │  HTTPS  │  - User-facing UI    │
│  - Generate token    │  Sync   │  - User data store   │
└──────────────────────┘         └──────────────────────┘
       ▲                                   ▲
       │                                   │
   Admin/Owner                       Member/User
```

**RDP = Engine** (jalanin bot, generate token)
**cPanel = Display** (serve UI ke user publik, simpan data final)

---

## 🔑 Aturan Sinkronisasi

| Arah | Data | Trigger |
|------|------|---------|
| RDP → cPanel | Voucher baru dari bot | Setelah bot berhasil generate |
| RDP → cPanel | Token iCloud Setan | Setiap kali harvest token |
| RDP → cPanel | Settings owner | Manual via admin panel |
| cPanel → RDP | Read-only (GET) | Sync awal saat RDP start |

---

## ⚙️ Setup Step-by-Step

### STEP 1: Konfigurasi cPanel (server produksi)

Edit `.env` di server cPanel:

```env
# CORS: izinkan request dari RDP
CORS_ALLOWED_ORIGINS=http://localhost:3001,https://domain-anda.com

# (Opsional) Mode standalone — kosongkan REMOTE_SERVER_URL
# Jika Anda ingin cPanel sync ke tempat lain (misal backup server)
# REMOTE_SERVER_URL=
# REMOTE_ADMIN_PASSWORD=
```

Restart Passenger:
```bash
touch tmp/restart.txt
# atau klik "Restart" di cPanel → Setup Node.js App
```

### STEP 2: Konfigurasi RDP (server lokal)

Edit `.env` di RDP:

```env
# Arahkan ke cPanel produksi
REMOTE_SERVER_URL=https://domain-anda.com/
REMOTE_ADMIN_PASSWORD=PasswordOwnerYangSama

# CORS: izinkan browser akses RDP
CORS_ALLOWED_ORIGINS=http://localhost:3001
```

> **Penting**: `REMOTE_ADMIN_PASSWORD` di RDP harus SAMA dengan `OWNER_PASSWORD` di cPanel
> (lihat file `lib/owner-settings-store.js` di cPanel untuk default).

### STEP 3: Verifikasi Koneksi

Jalankan test dari RDP:

```powershell
# Test login ke cPanel
curl.exe -X POST https://domain-anda.com/api/admin/login `
  -H "Content-Type: application/json" `
  -d '{"password":"PasswordOwnerAnda"}'
```

Jika response `{"role":"owner","ok":true}` → koneksi BERHASIL.

### STEP 4: Test Sinkronisasi Voucher

1. Di RDP, buat voucher baru via API:
   ```powershell
   curl.exe -X POST http://localhost:3001/api/admin/vouchers `
     -H "Content-Type: application/json" `
     -H "X-Admin-Password: PasswordOwnerAnda" `
     -d '{
       "code": "TESTSYNC001",
       "tier": "pro",
       "whatsapp": "08123456789",
       "dailyLimit": 10,
       "expiresAt": "2026-12-31T23:59:59.000Z",
       "pricePaid": 50000
     }'
   ```

2. Cek di cPanel:
   ```powershell
   curl.exe https://domain-anda.com/api/admin/vouchers/TESTSYNC001
   ```

3. Voucher `TESTSYNC001` harus muncul di cPanel

---

## 🔐 Keamanan

- ✅ Semua komunikasi via HTTPS (cPanel harus punya SSL)
- ✅ Password owner hanya di-trust via `X-Admin-Password` header
- ✅ CORS whitelist mencegah cross-site attack
- ⚠️ **JANGAN** simpan password di file `.env` yang di-commit ke Git

---

## 📊 Status Sinkronisasi

Lihat status sync di log RDP:

```bash
pm2 logs kling-bot | grep "Sync"
```

Output yang diharapkan:
```
[Sync] Sinkronisasi data dengan remote server di https://domain-anda.com
[Sync] Voucher sync: 3 updated
[Sync] Account sync: 1 new
```

Jika ada error:
```
[Sync] Error sinkronisasi: HTTP 401
```
→ Cek `REMOTE_ADMIN_PASSWORD` di RDP cocok dengan `OWNER_PASSWORD` di cPanel.

---

## 🛠️ Troubleshooting

### RDP tidak bisa konek ke cPanel

- Test ping: `Test-NetConnection domain-anda.com -Port 443`
- Cek DNS: `nslookup domain-anda.com`
- Pastikan firewall RDP izinkan HTTPS outbound

### Sinkronisasi lambat

- Default: sync on-demand (tiap create/update). Bisa ditambah interval.
- Lihat `server.js` → fungsi `syncWithRemote()` untuk tuning

### CORS error di browser

- Tambahkan origin browser ke `CORS_ALLOWED_ORIGINS` di kedua sisi
- Cek Developer Console → tab Network → response header `Access-Control-Allow-Origin`

### Voucher dari RDP tidak muncul di cPanel

- Cek log RDP untuk error sync
- Cek cPanel log: `tail -f ~/logs/kling-motion.log`
- Verifikasi voucher dibuat dengan `createdBy="mitra_xxx"` (bukan `owner`)

---

## 📝 Catatan Penting

1. **RDP TIDAK BOLEH generate voucher untuk owner** (hanya untuk dirinya sendiri)
2. **cPanel adalah source of truth** untuk data user
3. **Token dari RDP akan selalu di-push ke cPanel** (bukan sebaliknya)
4. **Jangan aktifkan Playwright di cPanel** (tidak jalan di shared hosting)
