dhzid.group / dgl-client
Library for license client side.
v1.0.2
2025-08-19 19:33 UTC
README
Paket Laravel untuk integrasi sistem lisensi dengan keamanan RSA. Memudahkan aplikasi Anda terhubung ke server lisensi untuk registrasi, validasi, dan manajemen lisensi secara otomatis.
Fitur Utama
- 🔐 Keamanan RSA: Tanda tangan digital per-klien (private key tetap di sisi Anda)
- ⚡ Auto-generate Keys: Library otomatis membuat key pair jika belum ada
- 🔄 Dual Flow: Dukung registrasi langsung atau klaim token undangan
- 🛡️ Anti-replay: Proteksi terhadap serangan replay dengan timestamp
- 📦 Siap Produksi: Penyimpanan terenkripsi, scheduler, dan middleware proteksi
Instalasi
1. Install via Composer
composer require dhzid-group/dgl-client
2. Publish Assets
php artisan vendor:publish --tag=license-config php artisan vendor:publish --tag=license-migrations php artisan vendor:publish --tag=license-views
3. Jalankan Migrasi
php artisan migrate
4. Konfigurasi Environment
Tambahkan ke file .env
:
# URL server lisensi (sertakan /api) LICENSE_SERVER_URL=http://license-management.test/api # Private key RSA (opsional - library auto-generate jika kosong) LICENSE_PRIVATE_KEY=-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n # Atau path ke file private key LICENSE_PRIVATE_KEY_PATH=/absolute/path/to/private.key # Enkripsi lokal (opsional) LICENSE_ENCRYPTION_KEY=your-encryption-key LICENSE_ENCRYPTION_IV=your-encryption-iv # Scheduler untuk cek berkala LICENSE_SCHEDULER_ENABLED=true LICENSE_SCHEDULE_FREQUENCY=hourly # Domain aplikasi (opsional - auto-detect jika kosong) APP_DOMAIN=yourapp.test
Cara Penggunaan
Opsi 1: Registrasi Langsung
- Buka halaman registrasi:
GET /license/register
- Isi data customer dan produk
- Library otomatis generate key pair dan kirim ke server
- Setelah sukses, halaman verifikasi akan cek aktivasi sampai lisensi valid
Opsi 2: Klaim Token Undangan (Pola A)
- Terima tautan dari admin:
https://yourapp.com/license/claim?token=abc123...
- Buka halaman claim:
GET /license/claim
- Library auto-generate key pair dan kirim public key ke server
- Setelah claim sukses, lanjut ke verifikasi lisensi
Programatik
use DhzidGroup\DglClient\Libraries\LicenseClient; // Registrasi lisensi $client = new LicenseClient(); $success = $client->registerLicense([ 'customer_name' => 'John Doe', 'customer_email' => 'john@example.com', 'customer_whatsapp' => '08123456789', 'customer_address' => 'Jl. Merdeka 1', 'product_slug' => 'my-product', 'license_subscription' => 30, 'domain' => 'yourapp.test', ]); if ($success) { // Verifikasi aktivasi $active = $client->verifyActivation(); if ($active) { echo "Lisensi aktif!"; } }
Rute yang Tersedia
GET /license/register
- Form registrasiPOST /license/register
- Proses registrasiGET /license/claim
- Form klaim tokenPOST /license/claim
- Proses klaim public keyPOST /license/verify
- Polling verifikasi status
Middleware Proteksi
Tambahkan middleware ke rute yang perlu lisensi:
Route::middleware('license')->group(function () { Route::get('/dashboard', 'DashboardController@index'); // Rute lain yang memerlukan lisensi });
Keamanan
- Private Key: Disimpan di
storage/app/license/private.key
(permission 600) - Public Key: Dikirim ke server saat registrasi/claim
- Signature: Header
X-Signature
= Base64 RSA-SHA256 - Anti-replay: Timestamp dengan toleransi ±5 menit
Checklist Produksi
- Folder
storage/app/license
tidak dapat diakses publik - Permission file private key ketat (600)
- URL server lisensi menggunakan HTTPS
- Scheduler aktif:
* * * * * php /path/to/artisan schedule:run
- Database sudah dimigrasi
- Environment variables terkonfigurasi
Troubleshooting
Error "Invalid signature"
- Pastikan private key valid
- Biarkan library auto-generate jika belum ada
- Cek permission file private key
Error "Request expired"
- Periksa sinkronisasi waktu server
- Pastikan timestamp dalam toleransi ±5 menit
Error "Gagal claim/registrasi"
- Cek token undangan masih valid
- Pastikan rate limit server tidak terlampaui
- Verifikasi format public key (PEM)
Error "Gagal simpan lisensi"
- Jalankan
php artisan migrate
- Cek permission folder storage
Support
Untuk bantuan lebih lanjut, silakan buka issue di repository GitHub atau hubungi tim support.
Lisensi
MIT License