dhzid.group/dgl-client

Library for license client side.

v1.0.2 2025-08-19 19:33 UTC

This package is auto-updated.

Last update: 2025-08-19 19:37:37 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

  1. Buka halaman registrasi: GET /license/register
  2. Isi data customer dan produk
  3. Library otomatis generate key pair dan kirim ke server
  4. Setelah sukses, halaman verifikasi akan cek aktivasi sampai lisensi valid

Opsi 2: Klaim Token Undangan (Pola A)

  1. Terima tautan dari admin: https://yourapp.com/license/claim?token=abc123...
  2. Buka halaman claim: GET /license/claim
  3. Library auto-generate key pair dan kirim public key ke server
  4. 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 registrasi
  • POST /license/register - Proses registrasi
  • GET /license/claim - Form klaim token
  • POST /license/claim - Proses klaim public key
  • POST /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