# Gmail Telegram Forwarder

Native PHP 8.1+ app untuk membaca email baru dari Gmail penampung dan meneruskannya ke Telegram. Mode utama sekarang cocok untuk shared hosting: admin klik tombol `Fetch Email Sekarang` dari dashboard.

## Konsep

Project ini dibuat seperti framework kecil agar mudah dirawat:

- `setup.php` untuk instalasi awal ala WordPress.
- `index.php` sebagai front page, login, dan admin dashboard.
- `app/Core` untuk core framework kecil: security, database, installer, auth, view.
- `app/Views` untuk layout front/admin dan halaman.
- `src` untuk client Gmail, Telegram, logger, dan state.
- `config/database.php` dibuat otomatis saat setup.
- Tabel database dibuat otomatis saat setup.

## Instalasi

1. Upload project ke VPS.
2. Buka `https://domain-kamu/setup.php`.
3. Masukkan:
   - Host database
   - Nama database
   - Username database
   - Password database
   - Table prefix
   - Data superadmin
4. Centang `Buat database jika belum ada` hanya kalau user database punya izin `CREATE DATABASE`.
5. Setelah sukses, installer membuat:
   - `config/database.php`
   - `storage/setup.lock`
   - tabel admin, settings, Gmail accounts, Telegram targets, state, processed messages

Setelah install selesai, akses admin dari:

```text
index.php?page=login
```

## Security

- Tidak ada default password.
- Password superadmin disimpan dengan `password_hash`, memakai Argon2id jika tersedia.
- Form memakai CSRF token.
- Session cookie memakai `HttpOnly` dan `SameSite=Strict`.
- Output HTML di-escape.
- `worker.php` dan `setup_oauth.php` hanya bisa dijalankan lewat CLI.
- Folder `app`, `src`, `config`, `tokens`, `storage`, dan `logs` ditutup via `.htaccess` untuk Apache.
- Jika memakai Nginx, tambahkan rule deny untuk folder sensitif tersebut.

## Menjalankan OAuth Gmail

Setelah akun Gmail dibuat di database/admin, simpan file credential Google OAuth di path yang kamu masukkan, lalu jalankan:

```bash
php setup_oauth.php penampung1
```

## Fetch Email di Shared Hosting

Karena shared hosting biasanya tidak mendukung background worker permanen, proses fetch dilakukan manual:

1. Login ke admin.
2. Buka dashboard.
3. Klik `Fetch Email Sekarang`.

Request ini akan:

- Cek akun Gmail aktif.
- Ambil email baru.
- Kirim ke target Telegram.
- Tandai email sebagai processed.
- Simpan log proses.

Pastikan `max_execution_time` hosting cukup untuk jumlah akun/email yang akan dicek.

## Admin CRUD

Menu admin yang tersedia:

- `Gmail Accounts`: tambah, update, delete Gmail penampung. Setelah account dibuat, copy `Authorization Link` dan kirim ke pemilik Gmail agar mereka mengizinkan akses.
- `Telegram Routes`: tambah, update, delete route dari Gmail account ke Telegram chat ID.
- `Admins`: tambah, update, delete admin. Password disimpan dengan hash aman.
- `Settings`: simpan Telegram Bot Token dan batas email per fetch.

## Link Authorization Gmail

Sistem sekarang memakai satu public authorization link umum dari halaman `Settings`. Kamu bisa kirim link itu ke siapa pun. Pemilik Gmail cukup membuka link, memilih Gmail di halaman Google, memberi izin, lalu selesai. Sistem akan otomatis membuat/update Gmail account berdasarkan email yang Google balikan.

Di Google Cloud OAuth Client, set redirect URI persis seperti ini:

```text
https://domain-kamu/index.php?page=oauth-callback
```

Gunakan OAuth client tipe `Web application` untuk flow shared hosting ini.

## Cara Setup Google Cloud Console

1. Buka `https://console.cloud.google.com`.
2. Buat project baru.
3. Masuk ke `APIs & Services` lalu `Library`.
4. Cari `Gmail API`, lalu klik `Enable`.
5. Masuk ke `APIs & Services` lalu `OAuth consent screen`.
6. Pilih user type sesuai kebutuhan. Untuk testing awal, pakai `External`.
7. Isi app name, support email, dan developer contact email.
8. Di bagian scopes, tambahkan scope:

```text
https://www.googleapis.com/auth/gmail.modify
```

9. Jika masih mode testing, tambahkan email Gmail yang boleh authorize ke `Test users`.
10. Masuk ke `Credentials`.
11. Klik `Create Credentials`, pilih `OAuth client ID`.
12. Pilih application type `Web application`.
13. Tambahkan Authorized redirect URI:

```text
https://domain-kamu/index.php?page=oauth-callback
```

14. Copy `Client ID` dan `Client Secret`.
15. Masuk admin website, buka `Settings`.
16. Paste `Google OAuth Client ID` dan `Google OAuth Client Secret`.
17. Simpan settings.
18. Copy `Public Gmail Authorization Link`, lalu kirim ke pemilik Gmail via WhatsApp.

Catatan: jika Google app masih testing, hanya email yang masuk `Test users` yang bisa authorize. Untuk dipakai banyak orang, publish app atau atur sesuai kebijakan Google.

## Cek Telegram Chat ID

Di menu `Telegram Routes`, isi Chat ID lalu klik `Cek Validitas`. Sistem akan memanggil Telegram `getChat` dan menampilkan apakah chat valid, typenya `private`, `group`, `supergroup`, atau `channel`, beserta nama/username jika tersedia.

Untuk grup/channel, pastikan bot sudah dimasukkan ke grup/channel dan punya akses. ID grup/channel biasanya diawali minus.

## Worker Opsional untuk VPS

Kalau suatu hari pindah ke VPS, worker CLI masih tersedia sebagai opsi.

Tes:

```bash
php worker.php
```

Jalankan background:

```bash
nohup php worker.php >> logs/worker.log 2>&1 &
```

Supervisor:

```ini
[program:gmail-forwarder]
command=php /path/to/gmail-telegram-forwarder/worker.php
directory=/path/to/gmail-telegram-forwarder
autostart=true
autorestart=true
stderr_logfile=/path/to/gmail-telegram-forwarder/logs/error.log
stdout_logfile=/path/to/gmail-telegram-forwarder/logs/output.log
```

## CDN UI

UI memakai CDN:

- Bootstrap 5.3
- jQuery 3.7
- Remix Icon 4.3

Tidak ada emoji di UI utama; icon memakai Remix Icon.
