Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ansattgrupper kan oversstyres fra Env #1394

Merged
merged 2 commits into from
Dec 2, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package no.nav.vedtak.sikkerhet.kontekst;

public enum AnsattGruppe {

SAKSBEHANDLER,
BESLUTTER,
OVERSTYRER,
OPPGAVESTYRER,
VEILEDER,
DRIFTER,
FORTROLIG, // Aka Kode7
STRENGTFORTROLIG, // Aka Kode6
SKJERMET // Aka EgenAnsatt

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
package no.nav.vedtak.sikkerhet.kontekst;

import java.io.IOException;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.Properties;
import java.util.Set;
import java.util.UUID;
import java.util.stream.Collectors;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import no.nav.foreldrepenger.konfig.Environment;

public class AnsattGruppeProvider {

private static final Logger LOG = LoggerFactory.getLogger(AnsattGruppeProvider.class);
private static final Environment ENV = Environment.current();
private static final String SUFFIX = ".properties";

private static final Map<AnsattGruppe, String> PROPERTY_NAME = Map.of(
AnsattGruppe.SAKSBEHANDLER, "gruppe.oid.saksbehandler",
AnsattGruppe.BESLUTTER, "gruppe.oid.beslutter",
AnsattGruppe.OVERSTYRER, "gruppe.oid.overstyrer",
AnsattGruppe.VEILEDER, "gruppe.oid.veileder",
AnsattGruppe.OPPGAVESTYRER, "gruppe.oid.oppgavestyrer",
AnsattGruppe.DRIFTER, "gruppe.oid.drifter",
AnsattGruppe.FORTROLIG, "gruppe.oid.fortrolig",
AnsattGruppe.STRENGTFORTROLIG, "gruppe.oid.strengtfortrolig",
AnsattGruppe.SKJERMET, "gruppe.oid.skjermet"
);

private static final Map<String, AnsattGruppe> PROPERTY_NAME_REVERSE = PROPERTY_NAME.entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getValue, Map.Entry::getKey));

private static AnsattGruppeProvider INSTANCE;

private final Map<AnsattGruppe, UUID> ansattGruppeOid = new LinkedHashMap<>();
private final Map<UUID, AnsattGruppe> oidAnsattGruppe = new LinkedHashMap<>();


private AnsattGruppeProvider() {
this(init());
}

private AnsattGruppeProvider(Map<AnsattGruppe, UUID> gruppeOidMap) {
this.ansattGruppeOid.putAll(gruppeOidMap);
gruppeOidMap.forEach((k,v) -> oidAnsattGruppe.put(v, k));
}

public static synchronized AnsattGruppeProvider instance() {
var inst = INSTANCE;
if (inst == null) {
inst = new AnsattGruppeProvider();
INSTANCE = inst;
}
return INSTANCE;
}

// Test usage only
static synchronized void refresh() {
INSTANCE = new AnsattGruppeProvider();
}

public UUID getAnsattGruppeOid(AnsattGruppe gruppe) {
return ansattGruppeOid.get(gruppe);
}

public AnsattGruppe getAnsattGruppeFra(String value) {
return Optional.ofNullable(value).map(AnsattGruppeProvider::safeUuidFraString).map(this::getAnsattGruppeFra).orElse(null);
}

public Set<AnsattGruppe> getAnsattGrupperFraStrings(List<String> values) {
return values.stream().map(this::getAnsattGruppeFra).filter(Objects::nonNull).collect(Collectors.toSet());
}

public AnsattGruppe getAnsattGruppeFra(UUID value) {
return Optional.ofNullable(value).map(oidAnsattGruppe::get).orElse(null);
}

public Set<AnsattGruppe> getAnsattGrupperFra(List<UUID> values) {
return values.stream().map(this::getAnsattGruppeFra).filter(Objects::nonNull).collect(Collectors.toSet());
}


private static Map<AnsattGruppe, UUID> init() {
Map<AnsattGruppe, UUID> resultat = new LinkedHashMap<>();
lesFraResource(getInfix(), new Properties())
.forEach((k, v) -> resultat.put(PROPERTY_NAME_REVERSE.get(k.toString()), UUID.fromString(v.toString())));
resultat.putAll(lesFraEnv());
return resultat;
}

private static Map<AnsattGruppe, UUID> lesFraEnv() {
Map<AnsattGruppe, UUID> resultat = new LinkedHashMap<>();
Arrays.stream(AnsattGruppe.values())
.forEach(ag -> Optional.ofNullable(PROPERTY_NAME.get(ag)).map(ENV::getProperty).map(AnsattGruppeProvider::safeUuidFraString)
.ifPresent(e -> resultat.put(ag, e)));
return resultat;
}

private static Properties lesFraResource(String infix, Properties p) {
if (infix == null) {
return p;
}
String navn = AnsattGruppeProvider.class.getSimpleName().toLowerCase() + infix + SUFFIX;
try (var is = AnsattGruppeProvider.class.getResourceAsStream(navn)) {
if (is != null) {
LOG.info("Laster groups fra {}", navn);
p.load(is);
return p;
}
} catch (IOException e) {
LOG.info("Propertyfil {} ikke lesbar", navn);
}
LOG.info("Propertyfil {} ikke funnet", navn);
return p;
}

private static String getInfix() {
var cluster = Environment.current().getCluster();
if (cluster.isLocal()) {
return "-vtp";
}
return cluster.isProd() ? "-prod" : "-dev";
}

private static UUID safeUuidFraString(String string) {
try {
return UUID.fromString(string);
} catch (Exception e) {
return null;
}
}

}

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
gruppe.oid.saksbehandler=27e77109-fef2-48ce-a174-269074490353
gruppe.oid.beslutter=6e31f9db-7e46-409d-809c-143d3863e4f6
gruppe.oid.overstyrer=542269ee-090b-4017-bbcc-6791580290ac
gruppe.oid.oppgavestyrer=e6508a2a-2e74-450e-ad24-eb1b2b4625c6
gruppe.oid.veileder=8cddda87-0a22-4d35-9186-a2c32a6ab450
gruppe.oid.drifter=f1b82579-c5b5-4617-9673-8ace5ff67f63
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
gruppe.oid.saksbehandler=73107205-17ec-4a07-a56e-e0a8542f90c9
gruppe.oid.beslutter=237ec744-da1f-455b-a794-b2d59c7ce7ee
gruppe.oid.overstyrer=8200240e-d76d-4d48-a655-728d1d8c3641
gruppe.oid.oppgavestyrer=1a59da27-4c55-4a9d-8480-6abd1a856cd2
gruppe.oid.veileder=77f05833-ebfd-45fb-8be7-88eca8e7418f
gruppe.oid.drifter=0d226374-4748-4367-a38a-062dcad70034
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
gruppe.oid.saksbehandler=eb211c0d-9ca6-467f-8863-9def2cc06fd3
gruppe.oid.beslutter=803b1fd5-27a0-46a2-b1b3-7152f44128b4
gruppe.oid.overstyrer=503f0cae-5bcd-484b-949c-a7e92d712858
gruppe.oid.oppgavestyrer=d18989ec-5e07-494b-ad96-0c1f0c76de53
gruppe.oid.veileder=edfe14fe-9a34-4ecb-8840-536ac2bc2818
gruppe.oid.drifter=89c71f0c-ca57-4e6f-8545-990f9e24c762

This file was deleted.

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package no.nav.vedtak.sikkerhet.kontekst;

import static org.assertj.core.api.Assertions.assertThat;

import java.util.List;
import java.util.Set;

import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;

/**
* Tester at environment tar presedens over oids fra bundlete ressursfiler
*/
class AnsattGruppeProviderEnvTest {

@BeforeAll
public static void setUp() {
System.setProperty("gruppe.oid.beslutter", "6e31f9db-7e46-409d-809c-143d3863e4f6");
System.setProperty("gruppe.oid.overstyrer", "542269ee-090b-4017-bbcc-6791580290ac");
}

@AfterAll
public static void teardown() {
System.clearProperty("gruppe.oid.beslutter");
System.clearProperty("gruppe.oid.overstyrer");
}


@Test
void testStringGroupsForLocal() {
AnsattGruppeProvider.refresh();
var provider = AnsattGruppeProvider.instance();
assertThat(provider.getAnsattGruppeOid(AnsattGruppe.BESLUTTER)).isNotNull();
assertThat(provider.getAnsattGruppeOid(AnsattGruppe.BESLUTTER).toString()).isEqualTo("6e31f9db-7e46-409d-809c-143d3863e4f6");
assertThat(provider.getAnsattGruppeFra("89c71f0c-ca57-4e6f-8545-990f9e24c762")).isEqualTo(AnsattGruppe.DRIFTER);
var grupper = List.of("eb211c0d-9ca6-467f-8863-9def2cc06fd3", "542269ee-090b-4017-bbcc-6791580290ac");
assertThat(provider.getAnsattGrupperFraStrings(grupper)).containsAll(Set.of(AnsattGruppe.SAKSBEHANDLER, AnsattGruppe.OVERSTYRER));

assertThat(provider.getAnsattGruppeFra((String) null)).isNull();
assertThat(provider.getAnsattGruppeFra("forsvarer")).isNull();
assertThat(provider.getAnsattGrupperFraStrings(List.of("forsvarer"))).isEmpty();
}



}
Loading