Ringkasan
Artikel ini menjelaskan cara membuat server sederhana menggunakan Golang yang menampilkan halaman landing sementara, meminta izin kamera dari pengguna (depan / belakang), menangkap foto, mengirim foto (base64 → bytes) dan data lokasi (diperoleh dari IP publik) ke Telegram. Setelah pengiriman selesai, pengguna diarahkan ke URL tujuan yang awalnya diberikan melalui query parameter ?url=
.
Catatan: artikel ini untuk tujuan pembelajaran / eksperimen. Jangan gunakan untuk melanggar privasi atau hukum.
Source code: github
Apa yang akan Anda pelajari
- Struktur aplikasi backend Golang yang melayani HTML + JavaScript.
- Cara meminta akses kamera di browser, menangkap gambar, dan mengirimkannya sebagai JSON.
- Mengubah data
data:image/jpeg;base64,...
menjadi byte di server Go. - Mengambil IP publik dan melakukan lookup lokasi menggunakan IP2Location API.
- Mengirim pesan dan foto ke Telegram melalui Bot API.
- Contoh konfigurasi
.env
untuk menyimpan token rahasia.
Persiapan & Persyaratan
Pastikan Anda memiliki:
- Go (disarankan 1.18+)
- Koneksi internet
- Akun Telegram + Bot (token dari BotFather)
- API key IP2Location
- Editor teks / terminal
Struktur proyek (sederhana)
camera-capture-server/
├── main.go
├── .env
└── README.md
Contoh isi .env
botToken = "YOUR_BOT_TOKEN"
chatID = "YOUT_BOT_CHAT_ID"
ip2LocationToken = "YOUR_API_IP2LOCATION"
botToken
= token Bot TelegramchatID
= ID chat (user atau grup) tujuan pesanip2LocationToken
= API key IP2Location
Potongan arsitektur & alur kerja singkat
- Pengguna mengunjungi:
http://localhost:8080/?url=https://example.com
- Server menyajikan halaman HTML yang menjalankan JavaScript:
- Meminta izin kamera (mencoba
front
laluback
). - Mengambil snapshot ke
canvas
→toDataURL('image/jpeg', 0.8)
. - Mengirim JSON POST ke
/upload-photo
berisi:image
,userId
,urlId
,camera
,message
.
- Server Go menerima JSON:
- Mengambil IP publik dengan
https://api.ipify.org/?format=json
. - Memanggil IP2Location:
https://api.ip2location.io/?key=TOKEN&ip=IP
. - Men-decode base64 image menjadi
[]byte
. - Menyusun pesan teks berisi IP, lokasi, Google Maps link, dan info ASN.
- Mengirim pesan teks dan foto ke Telegram via
sendMessageToTelegram
&sendPhotoToTelegram
.
- Setelah selesai, browser diarahkan ke URL tujuan (url query param).
Contoh payload JSON dari browser
{
"image": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD...",
"userId": "123456789",
"urlId": "https://example.com",
"camera": "front",
"message": "Foto berhasil diambil."
}
Keamanan & Etika
- Jangan jalankan server ini dalam lingkungan produksi tanpa penambahan kontrol akses, enkripsi transport (HTTPS), dan kebijakan privasi yang jelas.
- Selalu minta izin eksplisit dari pengguna sebelum mengakses kamera.
- Batasi penggunaan data, simpanan, dan akses bot Telegram agar tidak bocor.
- Gunakan hanya untuk eksperimen yang legal dan etis.
Contoh pesan yang dikirim ke Telegram
Pesan teks yang dikirim berisi:
- IP publik
- URL asal (
From URL
) - URL host (link yang mengarah kembali ke server dengan query
?url=...
) - Info lokasi: country, region, city, latitude, longitude
- Link Google Maps untuk koordinat
- AS/ISP, dan flag Is Proxy
Contoh format (tekstual):
IP Address : 103.123.45.67
From URL : https://example.com
URL Host : http://yourserver.com/?url=https://example.com
Location
Country Code: ID
Country Name: Indonesia
Region Name : Jawa Timur
City Name : Surabaya
Latitude : -7.2575
Longitude : 112.7521
Maps : https://www.google.co.id/maps/place/-7.2575,112.7521
Network
AS/ISP : PT Telkom Indonesia
Is Proxy : false
Foto akan diunggah sebagai file user_photo.jpg
ke chat Telegram tujuan.
Potensi perbaikan & fitur lanjutan
- Tambahkan HTTPS (TLS) agar komunikasi aman.
- Buat autentikasi / token validasi untuk endpoint
/upload-photo
agar tidak sembarang pihak bisa POST. - Simpan foto ke cloud storage (S3, GCS) atau database dengan retention policy.
- Batasi resolusi dan ukuran upload untuk efisiensi.
- Tampilkan fallback dan pemberitahuan bila kamera tidak tersedia.
Penutup
Proyek ini merupakan contoh praktis integrasi frontend-browser (akses kamera) dengan backend Golang serta layanan pihak ketiga (IP2Location dan Telegram Bot). Cocok sebagai eksperimen untuk memahami alur data (media + metadata) dari klien ke server dan integrasi API.