feat: implement LicenseGate for feature checking
- Thread-safe AtomicReference-based license holder - Defaults to open mode (all features enabled) when no license loaded - Runtime license loading with feature/limit queries - Unit tests for open mode and licensed mode
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
package com.cameleer3.server.core.license;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
|
||||
public class LicenseGate {
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(LicenseGate.class);
|
||||
|
||||
private final AtomicReference<LicenseInfo> current = new AtomicReference<>(LicenseInfo.open());
|
||||
|
||||
public void load(LicenseInfo license) {
|
||||
current.set(license);
|
||||
log.info("License loaded: tier={}, features={}, expires={}",
|
||||
license.tier(), license.features(), license.expiresAt());
|
||||
}
|
||||
|
||||
public boolean isEnabled(Feature feature) {
|
||||
return current.get().hasFeature(feature);
|
||||
}
|
||||
|
||||
public String getTier() {
|
||||
return current.get().tier();
|
||||
}
|
||||
|
||||
public int getLimit(String key, int defaultValue) {
|
||||
return current.get().getLimit(key, defaultValue);
|
||||
}
|
||||
|
||||
public LicenseInfo getCurrent() {
|
||||
return current.get();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user