Skip to content

Commit 6120270

Browse files
authored
Ansattgrupper kan oversstyres fra Env (#1394)
* Ansattgrupper kan oversstyres fra Env * Re-init provider in tests
1 parent b6715ff commit 6120270

File tree

17 files changed

+279
-164
lines changed

17 files changed

+279
-164
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package no.nav.vedtak.sikkerhet.kontekst;
2+
3+
public enum AnsattGruppe {
4+
5+
SAKSBEHANDLER,
6+
BESLUTTER,
7+
OVERSTYRER,
8+
OPPGAVESTYRER,
9+
VEILEDER,
10+
DRIFTER,
11+
FORTROLIG, // Aka Kode7
12+
STRENGTFORTROLIG, // Aka Kode6
13+
SKJERMET // Aka EgenAnsatt
14+
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
package no.nav.vedtak.sikkerhet.kontekst;
2+
3+
import java.io.IOException;
4+
import java.util.Arrays;
5+
import java.util.LinkedHashMap;
6+
import java.util.List;
7+
import java.util.Map;
8+
import java.util.Objects;
9+
import java.util.Optional;
10+
import java.util.Properties;
11+
import java.util.Set;
12+
import java.util.UUID;
13+
import java.util.stream.Collectors;
14+
15+
import org.slf4j.Logger;
16+
import org.slf4j.LoggerFactory;
17+
18+
import no.nav.foreldrepenger.konfig.Environment;
19+
20+
public class AnsattGruppeProvider {
21+
22+
private static final Logger LOG = LoggerFactory.getLogger(AnsattGruppeProvider.class);
23+
private static final Environment ENV = Environment.current();
24+
private static final String SUFFIX = ".properties";
25+
26+
private static final Map<AnsattGruppe, String> PROPERTY_NAME = Map.of(
27+
AnsattGruppe.SAKSBEHANDLER, "gruppe.oid.saksbehandler",
28+
AnsattGruppe.BESLUTTER, "gruppe.oid.beslutter",
29+
AnsattGruppe.OVERSTYRER, "gruppe.oid.overstyrer",
30+
AnsattGruppe.VEILEDER, "gruppe.oid.veileder",
31+
AnsattGruppe.OPPGAVESTYRER, "gruppe.oid.oppgavestyrer",
32+
AnsattGruppe.DRIFTER, "gruppe.oid.drifter",
33+
AnsattGruppe.FORTROLIG, "gruppe.oid.fortrolig",
34+
AnsattGruppe.STRENGTFORTROLIG, "gruppe.oid.strengtfortrolig",
35+
AnsattGruppe.SKJERMET, "gruppe.oid.skjermet"
36+
);
37+
38+
private static final Map<String, AnsattGruppe> PROPERTY_NAME_REVERSE = PROPERTY_NAME.entrySet().stream()
39+
.collect(Collectors.toMap(Map.Entry::getValue, Map.Entry::getKey));
40+
41+
private static AnsattGruppeProvider INSTANCE;
42+
43+
private final Map<AnsattGruppe, UUID> ansattGruppeOid = new LinkedHashMap<>();
44+
private final Map<UUID, AnsattGruppe> oidAnsattGruppe = new LinkedHashMap<>();
45+
46+
47+
private AnsattGruppeProvider() {
48+
this(init());
49+
}
50+
51+
private AnsattGruppeProvider(Map<AnsattGruppe, UUID> gruppeOidMap) {
52+
this.ansattGruppeOid.putAll(gruppeOidMap);
53+
gruppeOidMap.forEach((k,v) -> oidAnsattGruppe.put(v, k));
54+
}
55+
56+
public static synchronized AnsattGruppeProvider instance() {
57+
var inst = INSTANCE;
58+
if (inst == null) {
59+
inst = new AnsattGruppeProvider();
60+
INSTANCE = inst;
61+
}
62+
return INSTANCE;
63+
}
64+
65+
// Test usage only
66+
static synchronized void refresh() {
67+
INSTANCE = new AnsattGruppeProvider();
68+
}
69+
70+
public UUID getAnsattGruppeOid(AnsattGruppe gruppe) {
71+
return ansattGruppeOid.get(gruppe);
72+
}
73+
74+
public AnsattGruppe getAnsattGruppeFra(String value) {
75+
return Optional.ofNullable(value).map(AnsattGruppeProvider::safeUuidFraString).map(this::getAnsattGruppeFra).orElse(null);
76+
}
77+
78+
public Set<AnsattGruppe> getAnsattGrupperFraStrings(List<String> values) {
79+
return values.stream().map(this::getAnsattGruppeFra).filter(Objects::nonNull).collect(Collectors.toSet());
80+
}
81+
82+
public AnsattGruppe getAnsattGruppeFra(UUID value) {
83+
return Optional.ofNullable(value).map(oidAnsattGruppe::get).orElse(null);
84+
}
85+
86+
public Set<AnsattGruppe> getAnsattGrupperFra(List<UUID> values) {
87+
return values.stream().map(this::getAnsattGruppeFra).filter(Objects::nonNull).collect(Collectors.toSet());
88+
}
89+
90+
91+
private static Map<AnsattGruppe, UUID> init() {
92+
Map<AnsattGruppe, UUID> resultat = new LinkedHashMap<>();
93+
lesFraResource(getInfix(), new Properties())
94+
.forEach((k, v) -> resultat.put(PROPERTY_NAME_REVERSE.get(k.toString()), UUID.fromString(v.toString())));
95+
resultat.putAll(lesFraEnv());
96+
return resultat;
97+
}
98+
99+
private static Map<AnsattGruppe, UUID> lesFraEnv() {
100+
Map<AnsattGruppe, UUID> resultat = new LinkedHashMap<>();
101+
Arrays.stream(AnsattGruppe.values())
102+
.forEach(ag -> Optional.ofNullable(PROPERTY_NAME.get(ag)).map(ENV::getProperty).map(AnsattGruppeProvider::safeUuidFraString)
103+
.ifPresent(e -> resultat.put(ag, e)));
104+
return resultat;
105+
}
106+
107+
private static Properties lesFraResource(String infix, Properties p) {
108+
if (infix == null) {
109+
return p;
110+
}
111+
String navn = AnsattGruppeProvider.class.getSimpleName().toLowerCase() + infix + SUFFIX;
112+
try (var is = AnsattGruppeProvider.class.getResourceAsStream(navn)) {
113+
if (is != null) {
114+
LOG.info("Laster groups fra {}", navn);
115+
p.load(is);
116+
return p;
117+
}
118+
} catch (IOException e) {
119+
LOG.info("Propertyfil {} ikke lesbar", navn);
120+
}
121+
LOG.info("Propertyfil {} ikke funnet", navn);
122+
return p;
123+
}
124+
125+
private static String getInfix() {
126+
var cluster = Environment.current().getCluster();
127+
if (cluster.isLocal()) {
128+
return "-vtp";
129+
}
130+
return cluster.isProd() ? "-prod" : "-dev";
131+
}
132+
133+
private static UUID safeUuidFraString(String string) {
134+
try {
135+
return UUID.fromString(string);
136+
} catch (Exception e) {
137+
return null;
138+
}
139+
}
140+
141+
}

felles/kontekst/src/main/java/no/nav/vedtak/sikkerhet/kontekst/Groups.java

-13
This file was deleted.

felles/kontekst/src/main/java/no/nav/vedtak/sikkerhet/kontekst/GroupsProvider.java

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

felles/kontekst/src/main/resources/no/nav/vedtak/sikkerhet/kontekst/groupsprovider-dev.properties

-6
This file was deleted.

felles/kontekst/src/main/resources/no/nav/vedtak/sikkerhet/kontekst/groupsprovider-prod.properties

-6
This file was deleted.

felles/kontekst/src/main/resources/no/nav/vedtak/sikkerhet/kontekst/groupsprovider-vtp.properties

-6
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package no.nav.vedtak.sikkerhet.kontekst;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
5+
import java.util.List;
6+
import java.util.Set;
7+
8+
import org.junit.jupiter.api.AfterAll;
9+
import org.junit.jupiter.api.BeforeAll;
10+
import org.junit.jupiter.api.Test;
11+
12+
/**
13+
* Tester at environment tar presedens over oids fra bundlete ressursfiler
14+
*/
15+
class AnsattGruppeProviderEnvTest {
16+
17+
@BeforeAll
18+
public static void setUp() {
19+
System.setProperty("gruppe.oid.beslutter", "6e31f9db-7e46-409d-809c-143d3863e4f6");
20+
System.setProperty("gruppe.oid.overstyrer", "542269ee-090b-4017-bbcc-6791580290ac");
21+
}
22+
23+
@AfterAll
24+
public static void teardown() {
25+
System.clearProperty("gruppe.oid.beslutter");
26+
System.clearProperty("gruppe.oid.overstyrer");
27+
}
28+
29+
30+
@Test
31+
void testStringGroupsForLocal() {
32+
AnsattGruppeProvider.refresh();
33+
var provider = AnsattGruppeProvider.instance();
34+
assertThat(provider.getAnsattGruppeOid(AnsattGruppe.BESLUTTER)).isNotNull();
35+
assertThat(provider.getAnsattGruppeOid(AnsattGruppe.BESLUTTER).toString()).isEqualTo("6e31f9db-7e46-409d-809c-143d3863e4f6");
36+
assertThat(provider.getAnsattGruppeFra("89c71f0c-ca57-4e6f-8545-990f9e24c762")).isEqualTo(AnsattGruppe.DRIFTER);
37+
var grupper = List.of("eb211c0d-9ca6-467f-8863-9def2cc06fd3", "542269ee-090b-4017-bbcc-6791580290ac");
38+
assertThat(provider.getAnsattGrupperFraStrings(grupper)).containsAll(Set.of(AnsattGruppe.SAKSBEHANDLER, AnsattGruppe.OVERSTYRER));
39+
40+
assertThat(provider.getAnsattGruppeFra((String) null)).isNull();
41+
assertThat(provider.getAnsattGruppeFra("forsvarer")).isNull();
42+
assertThat(provider.getAnsattGrupperFraStrings(List.of("forsvarer"))).isEmpty();
43+
}
44+
45+
46+
47+
}

0 commit comments

Comments
 (0)