UnleashClient.java
package no.nav.data.common.unleash;
import io.getunleash.DefaultUnleash;
import io.getunleash.MoreOperations;
import io.getunleash.Unleash;
import io.getunleash.UnleashContext;
import io.getunleash.impactmetrics.MetricsAPI;
import io.getunleash.util.UnleashConfig;
import io.getunleash.variant.Variant;
import lombok.extern.slf4j.Slf4j;
import no.nav.data.common.security.azure.AzureUserInfo;
import org.springframework.context.annotation.Profile;
import org.springframework.core.env.Environment;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.Optional;
import java.util.function.BiPredicate;
@Slf4j
@Service
@Profile("!test")
public class UnleashClient {
private final Unleash client;
public UnleashClient(Environment environment) {
if(Arrays.asList(environment.getActiveProfiles()).contains("local")) {
// dummy unleash when local
this.client = new Unleash(){
@Override
public boolean isEnabled(String s, UnleashContext unleashContext, BiPredicate<String, UnleashContext> biPredicate) {
return false;
}
@Override
public Variant getVariant(String s, UnleashContext unleashContext) {
return null;
}
@Override
public Variant getVariant(String s, UnleashContext unleashContext, Variant variant) {
return null;
}
@Override
public MoreOperations more() {
return null;
}
@Override
public MetricsAPI getImpactMetrics() {
return null;
}
};
return;
}
UnleashConfig config = UnleashConfig.builder()
.appName("team-catalog-backend")
.unleashAPI(environment.getRequiredProperty("UNLEASH_SERVER_API_URL") + "/api")
.apiKey(environment.getRequiredProperty("UNLEASH_SERVER_API_TOKEN"))
.unleashContextProvider(() -> UnleashContext.builder()
.userId(getUserNavident().orElse("Missing-Navident"))
.build())
.build();
this.client = new DefaultUnleash(config);
}
private Optional<String> getUserNavident() {
var auth = SecurityContextHolder.getContext().getAuthentication();
if (auth != null) {
var maybeUserInfo = auth.getDetails();
if (maybeUserInfo instanceof AzureUserInfo userInfo) {
return Optional.ofNullable(userInfo.getIdent());
}
}
return Optional.empty();
}
public boolean isEnabled(String toggleName) {
return this.client.isEnabled(toggleName);
}
}