use Nazrulalif\LaravelPemLicenseValidator\LicenseValidator;
$validator = new LicenseValidator(config('license'));
if ($validator->isValid()) {
$license = $validator->getLicenseData();
echo "Valid until: " . $license['expiryDate'];
} else {
abort(403, 'Invalid license');
}
use Nazrulalif\LaravelPemLicenseValidator\Facades\License;
if (License::isValid()) {
$daysLeft = License::getDaysRemaining();
echo "License expires in {$daysLeft} days";
}
public function boot()
{
try {
$validator = app(\Nazrulalif\LaravelPemLicenseValidator\LicenseValidator::class);
if (!$validator->isValid()) {
abort(403, 'Invalid or expired license: ' . $validator->getError());
}
// Check grace period
if ($validator->isInGracePeriod()) {
logger()->warning('License in grace period. Days remaining: ' . $validator->getDaysRemaining());
}
} catch (\Exception $e) {
abort(500, 'License validation error: ' . $e->getMessage());
}
}
use Nazrulalif\LaravelPemLicenseValidator\Facades\License;
// Check if feature exists
if (License::hasFeature('api_access')) {
// Enable API routes
}
// Get feature value with default
$maxUsers = License::getFeature('UserLimit', 10);
// Get all features
$features = License::getLicenseData()['features'];
// Validate license
$validator->validate(): array
// Check if valid
$validator->isValid(): bool
// Get license data
$validator->getLicenseData(): array
// Get days remaining
$validator->getDaysRemaining(): int
// Check grace period
$validator->isInGracePeriod(): bool
// Get feature value
$validator->getFeature(string $key, mixed $default = null): mixed
// Check feature exists
$validator->hasFeature(string $key): bool
// Get error message
$validator->getError(): ?string
use Nazrulalif\LaravelPemLicenseValidator\Exceptions\LicenseException;
try {
$validator->validate();
} catch (LicenseException $e) {
switch ($e->getCode()) {
case LicenseException::FILE_NOT_FOUND:
// Handle missing file
break;
case LicenseException::INVALID_SIGNATURE:
// Handle tampered license
break;
case LicenseException::EXPIRED:
// Handle expiry
break;
case LicenseException::HARDWARE_MISMATCH:
// Handle hardware binding
break;
case LicenseException::PRODUCT_KEY_MISMATCH:
// Handle product key validation failure
break;
}
}