Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit ac92e55

Browse files
committedFeb 8, 2025··
TFP-5952 flytt auditlogging til PEP
1 parent c346fe3 commit ac92e55

File tree

10 files changed

+322
-206
lines changed

10 files changed

+322
-206
lines changed
 

‎felles/abac/src/main/java/no/nav/vedtak/sikkerhet/abac/AbacAuditlogger.java

+20-15
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,17 @@
2727
import jakarta.enterprise.context.Dependent;
2828
import jakarta.inject.Inject;
2929

30+
import org.slf4j.Logger;
31+
import org.slf4j.LoggerFactory;
32+
3033
import no.nav.vedtak.log.audit.Auditdata;
3134
import no.nav.vedtak.log.audit.AuditdataHeader;
3235
import no.nav.vedtak.log.audit.Auditlogger;
3336
import no.nav.vedtak.log.audit.CefField;
3437
import no.nav.vedtak.log.audit.EventClassId;
3538
import no.nav.vedtak.sikkerhet.abac.internal.BeskyttetRessursAttributter;
3639
import no.nav.vedtak.sikkerhet.abac.pdp.AppRessursData;
40+
import no.nav.vedtak.sikkerhet.kontekst.IdentType;
3741

3842
/**
3943
* Dette loggformatet er avklart med Arcsight. Eventuelle nye felter skal
@@ -43,32 +47,33 @@
4347
@Dependent
4448
public class AbacAuditlogger {
4549

50+
private static final Logger LOG = LoggerFactory.getLogger(AbacAuditlogger.class);
51+
4652
private final Auditlogger auditlogger;
4753

4854
@Inject
4955
public AbacAuditlogger(Auditlogger auditlogger) {
5056
this.auditlogger = auditlogger;
5157
}
5258

53-
public void loggTilgang(String userId, Tilgangsbeslutning tilgangsbeslutning) {
54-
logg(userId, tilgangsbeslutning, Access.GRANTED);
55-
}
56-
57-
public void loggDeny(String userId, Tilgangsbeslutning tilgangsbeslutning) {
58-
logg(userId, tilgangsbeslutning, Access.DENIED);
59-
}
60-
61-
private void logg(String userId, Tilgangsbeslutning tilgangsbeslutning, Access access) {
62-
logg(userId, tilgangsbeslutning.beskyttetRessursAttributter(), tilgangsbeslutning.appRessursData(), access);
59+
public void loggUtfall(AbacResultat utfall, BeskyttetRessursAttributter beskyttetRessursAttributter, AppRessursData appRessursData) {
60+
if (IdentType.Systemressurs.equals(beskyttetRessursAttributter.getIdentType())) {
61+
// Skal ikke auditlogge systemkall
62+
if (!utfall.fikkTilgang()) {
63+
LOG.info("ABAC AVSLAG SYSTEMBRUKER {} tjeneste {}", beskyttetRessursAttributter.getBrukerId(), beskyttetRessursAttributter.getServicePath());
64+
}
65+
} else if (beskyttetRessursAttributter.isSporingslogg()) {
66+
logg(beskyttetRessursAttributter, appRessursData, utfall.fikkTilgang() ? Access.GRANTED : Access.DENIED);
67+
}
6368
}
6469

65-
private void logg(String userId, BeskyttetRessursAttributter beskyttetRessursAttributter, AppRessursData appRessursData, Access access) {
70+
private void logg(BeskyttetRessursAttributter beskyttetRessursAttributter, AppRessursData appRessursData, Access access) {
6671
requireNonNull(beskyttetRessursAttributter);
6772
requireNonNull(beskyttetRessursAttributter.getDataAttributter());
6873

6974
String abacAction = requireNonNull(beskyttetRessursAttributter.getActionType().getEksternKode());
7075
var header = createHeader(abacAction, access);
71-
var fields = createDefaultAbacFields(userId, beskyttetRessursAttributter);
76+
var fields = createDefaultAbacFields(beskyttetRessursAttributter);
7277

7378
List<String> ids = getBerortBrukerId(appRessursData);
7479
for (String aktorId : ids) {
@@ -92,7 +97,7 @@ private AuditdataHeader createHeader(String abacAction, Access access) {
9297
.build();
9398
}
9499

95-
private Set<CefField> createDefaultAbacFields(String userId, BeskyttetRessursAttributter beskyttetRessursAttributter) {
100+
protected Set<CefField> createDefaultAbacFields(BeskyttetRessursAttributter beskyttetRessursAttributter) {
96101
var abacAction = requireNonNull(beskyttetRessursAttributter.getActionType().getEksternKode());
97102
var abacResourceType = requireNonNull(beskyttetRessursAttributter.getResourceType());
98103

@@ -102,8 +107,8 @@ private Set<CefField> createDefaultAbacFields(String userId, BeskyttetRessursAtt
102107
fields.add(new CefField(ABAC_RESOURCE_TYPE, abacResourceType.getResourceTypeAttribute()));
103108
fields.add(new CefField(ABAC_ACTION, abacAction));
104109

105-
if (userId != null) {
106-
fields.add(new CefField(USER_ID, userId));
110+
if (beskyttetRessursAttributter.getBrukerId() != null) {
111+
fields.add(new CefField(USER_ID, beskyttetRessursAttributter.getBrukerId()));
107112
}
108113

109114
getOneOfNew(beskyttetRessursAttributter.getDataAttributter(), SAKSNUMMER, FAGSAK_ID).ifPresent(fagsak -> fields.addAll(forSaksnummer(fagsak)));

‎felles/abac/src/main/java/no/nav/vedtak/sikkerhet/abac/AbacResultat.java

+4
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,8 @@ public enum AbacResultat {
66
AVSLÅTT_KODE_6,
77
AVSLÅTT_EGEN_ANSATT,
88
AVSLÅTT_ANNEN_ÅRSAK;
9+
10+
public boolean fikkTilgang() {
11+
return this == GODKJENT;
12+
}
913
}

‎felles/abac/src/main/java/no/nav/vedtak/sikkerhet/abac/BeskyttetRessursInterceptor.java

+17-49
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import java.lang.reflect.InvocationTargetException;
44
import java.lang.reflect.Method;
55
import java.util.Collection;
6-
import java.util.Optional;
76

87
import jakarta.annotation.Priority;
98
import jakarta.enterprise.context.Dependent;
@@ -13,84 +12,52 @@
1312
import jakarta.interceptor.InvocationContext;
1413

1514
import org.jboss.weld.interceptor.util.proxy.TargetInstanceProxy;
16-
import org.slf4j.Logger;
17-
import org.slf4j.LoggerFactory;
1815

19-
import no.nav.foreldrepenger.konfig.Environment;
2016
import no.nav.vedtak.exception.TekniskException;
2117
import no.nav.vedtak.sikkerhet.abac.beskyttet.ActionType;
2218
import no.nav.vedtak.sikkerhet.abac.beskyttet.ResourceType;
2319
import no.nav.vedtak.sikkerhet.abac.internal.ActionUthenter;
2420
import no.nav.vedtak.sikkerhet.abac.internal.BeskyttetRessursAttributter;
25-
import no.nav.vedtak.sikkerhet.kontekst.IdentType;
2621

2722
@BeskyttetRessurs(actionType = ActionType.DUMMY, resourceType = ResourceType.DUMMY)
2823
@Interceptor
2924
@Priority(Interceptor.Priority.APPLICATION + 11)
3025
@Dependent
3126
public class BeskyttetRessursInterceptor {
3227

33-
private static final Environment ENV = Environment.current();
34-
private static final Logger LOG = LoggerFactory.getLogger(BeskyttetRessursInterceptor.class);
35-
3628
private final Pep pep;
37-
private final AbacAuditlogger abacAuditlogger;
3829
private final TokenProvider tokenProvider;
3930

4031
@Inject
41-
public BeskyttetRessursInterceptor(Pep pep, AbacAuditlogger abacAuditlogger, TokenProvider provider) {
32+
public BeskyttetRessursInterceptor(Pep pep, TokenProvider provider) {
4233
this.pep = pep;
43-
this.abacAuditlogger = abacAuditlogger;
4434
this.tokenProvider = provider;
4535
}
4636

4737
@AroundInvoke
4838
public Object wrapTransaction(final InvocationContext invocationContext) throws Exception {
49-
var dataAttributter = finnAbacDataAttributter(invocationContext);
50-
var beskyttetRessursAttributter = hentBeskyttetRessursAttributter(invocationContext, dataAttributter);
39+
var method = invocationContext.getMethod();
40+
var dataAttributter = finnAbacDataAttributter(method, invocationContext.getParameters());
41+
var beskyttetRessursAttributter = hentBeskyttetRessursAttributter(method, getOpprinneligKlasse(invocationContext), dataAttributter);
42+
5143
var beslutning = pep.vurderTilgang(beskyttetRessursAttributter);
5244
if (beslutning.fikkTilgang()) {
53-
return proceed(invocationContext, beslutning);
54-
}
55-
return ikkeTilgang(beslutning);
56-
}
57-
58-
private Object proceed(InvocationContext invocationContext, Tilgangsbeslutning beslutning) throws Exception {
59-
Method method = invocationContext.getMethod();
60-
boolean sporingslogges = method.getAnnotation(BeskyttetRessurs.class).sporingslogg();
61-
if (!erSystembrukerKall(beslutning.beskyttetRessursAttributter()) && sporingslogges) {
62-
Object resultat = invocationContext.proceed();
63-
abacAuditlogger.loggTilgang(tokenProvider.getUid(), beslutning);
64-
return resultat;
65-
}
66-
return invocationContext.proceed();
67-
}
68-
69-
private Object ikkeTilgang(Tilgangsbeslutning beslutning) {
70-
if (!erSystembrukerKall(beslutning.beskyttetRessursAttributter())) {
71-
abacAuditlogger.loggDeny(tokenProvider.getUid(), beslutning);
45+
return invocationContext.proceed();
7246
} else {
73-
LOG.info("ABAC AVSLAG SYSTEMBRUKER {}", beslutning.beskyttetRessursAttributter().getBrukerId());
47+
return ikkeTilgang(beslutning);
7448
}
49+
}
7550

76-
switch (beslutning.beslutningKode()) {
51+
private Object ikkeTilgang(AbacResultat abacResultat) {
52+
switch (abacResultat) {
7753
case AVSLÅTT_KODE_6 -> throw new PepNektetTilgangException("F-709170", "Tilgangskontroll.Avslag.Kode6");
7854
case AVSLÅTT_KODE_7 -> throw new PepNektetTilgangException("F-027901", "Tilgangskontroll.Avslag.Kode7");
7955
case AVSLÅTT_EGEN_ANSATT -> throw new PepNektetTilgangException("F-788257", "Tilgangskontroll.Avslag.EgenAnsatt");
8056
default -> throw new PepNektetTilgangException("F-608625", "Ikke tilgang");
8157
}
8258
}
8359

84-
private boolean erSystembrukerKall(BeskyttetRessursAttributter beskyttetRessursAttributter) {
85-
return Optional.ofNullable(beskyttetRessursAttributter)
86-
.map(BeskyttetRessursAttributter::getIdentType)
87-
.filter(IdentType::erSystem)
88-
.isPresent();
89-
}
90-
91-
private BeskyttetRessursAttributter hentBeskyttetRessursAttributter(InvocationContext invocationContext, AbacDataAttributter dataAttributter) {
92-
Class<?> clazz = getOpprinneligKlasse(invocationContext);
93-
var method = invocationContext.getMethod();
60+
private BeskyttetRessursAttributter hentBeskyttetRessursAttributter(Method method, Class<?> mClass, AbacDataAttributter dataAttributter) {
9461
var beskyttetRessurs = method.getAnnotation(BeskyttetRessurs.class);
9562

9663
var token = Token.withOidcToken(tokenProvider.openIdToken());
@@ -104,19 +71,20 @@ private BeskyttetRessursAttributter hentBeskyttetRessursAttributter(InvocationCo
10471
.medActionType(beskyttetRessurs.actionType())
10572
.medAvailabilityType(beskyttetRessurs.availabilityType())
10673
.medResourceType(finnResource(beskyttetRessurs))
74+
.medSporingslogg(beskyttetRessurs.sporingslogg())
10775
.medPepId(pep.pepId())
108-
.medServicePath(utledAction(clazz, method))
76+
.medServicePath(utledAction(mClass, method))
10977
.medDataAttributter(dataAttributter)
11078
.build();
11179

11280
}
11381

114-
static AbacDataAttributter finnAbacDataAttributter(InvocationContext invocationContext) {
115-
var method = invocationContext.getMethod();
82+
static AbacDataAttributter finnAbacDataAttributter(Method method, Object[] parameters) {
11683
var dataAttributter = AbacDataAttributter.opprett();
11784
var parameterDecl = method.getParameters();
118-
for (int i = 0; i < method.getParameterCount(); i++) {
119-
Object parameterValue = invocationContext.getParameters()[i];
85+
var parameterCount = method.getParameterCount();
86+
for (int i = 0; i < parameterCount; i++) {
87+
Object parameterValue = parameters[i];
12088
var tilpassetAnnotering = parameterDecl[i].getAnnotation(TilpassetAbacAttributt.class);
12189
leggTilAttributterFraParameter(dataAttributter, parameterValue, tilpassetAnnotering);
12290
}

‎felles/abac/src/main/java/no/nav/vedtak/sikkerhet/abac/Pep.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
public interface Pep {
77

8-
Tilgangsbeslutning vurderTilgang(BeskyttetRessursAttributter beskyttetRessursAttributter);
8+
AbacResultat vurderTilgang(BeskyttetRessursAttributter beskyttetRessursAttributter);
99

1010
default String pepId() {
1111
return Environment.current().getNaisAppName();

‎felles/abac/src/main/java/no/nav/vedtak/sikkerhet/abac/PepImpl.java

+9-9
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,6 @@
88
import jakarta.enterprise.inject.Default;
99
import jakarta.inject.Inject;
1010

11-
import org.slf4j.Logger;
12-
import org.slf4j.LoggerFactory;
13-
1411
import no.nav.vedtak.sikkerhet.abac.beskyttet.ActionType;
1512
import no.nav.vedtak.sikkerhet.abac.internal.BeskyttetRessursAttributter;
1613
import no.nav.vedtak.sikkerhet.abac.pdp.AppRessursData;
@@ -30,8 +27,7 @@
3027
@ApplicationScoped
3128
public class PepImpl implements Pep {
3229

33-
private static final Logger LOG = LoggerFactory.getLogger(PepImpl.class);
34-
30+
private AbacAuditlogger abacAuditlogger;
3531
private PopulasjonKlient populasjonKlient;
3632
private AnsattGruppeKlient ansattGruppeKlient;
3733
private PdpRequestBuilder pdpRequestBuilder;
@@ -42,21 +38,25 @@ public class PepImpl implements Pep {
4238
}
4339

4440
@Inject
45-
public PepImpl(PopulasjonKlient populasjonKlient, AnsattGruppeKlient ansattGruppeKlient, PdpRequestBuilder pdpRequestBuilder) {
41+
public PepImpl(AbacAuditlogger abacAuditlogger,
42+
PopulasjonKlient populasjonKlient,
43+
AnsattGruppeKlient ansattGruppeKlient,
44+
PdpRequestBuilder pdpRequestBuilder) {
45+
this.abacAuditlogger = abacAuditlogger;
4646
this.populasjonKlient = populasjonKlient;
4747
this.ansattGruppeKlient = ansattGruppeKlient;
4848
this.pdpRequestBuilder = pdpRequestBuilder;
4949
}
5050

5151
@Override
52-
public Tilgangsbeslutning vurderTilgang(BeskyttetRessursAttributter beskyttetRessursAttributter) {
52+
public AbacResultat vurderTilgang(BeskyttetRessursAttributter beskyttetRessursAttributter) {
5353
var appRessurser = pdpRequestBuilder.lagAppRessursData(beskyttetRessursAttributter.getDataAttributter());
5454

5555
var vurdering = forespørTilgang(beskyttetRessursAttributter, appRessurser);
56-
return new Tilgangsbeslutning(vurdering.tilgangResultat(), beskyttetRessursAttributter, appRessurser);
56+
abacAuditlogger.loggUtfall(vurdering.tilgangResultat(), beskyttetRessursAttributter, appRessurser);
57+
return vurdering.tilgangResultat();
5758
}
5859

59-
6060
// Skal kunne kalles fra evt subklasser av PepImpl
6161
protected Tilgangsvurdering forespørTilgang(BeskyttetRessursAttributter beskyttetRessursAttributter, AppRessursData appRessursData) {
6262
if (ActionType.DUMMY.equals(beskyttetRessursAttributter.getActionType())) {

‎felles/abac/src/main/java/no/nav/vedtak/sikkerhet/abac/Tilgangsbeslutning.java

-4
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,4 @@
66
public record Tilgangsbeslutning(AbacResultat beslutningKode,
77
BeskyttetRessursAttributter beskyttetRessursAttributter,
88
AppRessursData appRessursData) {
9-
10-
public boolean fikkTilgang() {
11-
return beslutningKode == AbacResultat.GODKJENT;
12-
}
139
}

‎felles/abac/src/main/java/no/nav/vedtak/sikkerhet/abac/internal/BeskyttetRessursAttributter.java

+11-1
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,14 @@ public class BeskyttetRessursAttributter {
1919
private String brukerId;
2020
private UUID brukerOid;
2121
private IdentType identType;
22-
private Set<AnsattGruppe> ansattGrupper = new LinkedHashSet<>();
22+
private final Set<AnsattGruppe> ansattGrupper = new LinkedHashSet<>();
2323
private ActionType actionType;
2424
private ResourceType resourceType;
2525
private AvailabilityType availabilityType;
2626
private Token token;
2727
private String pepId;
2828
private String servicePath;
29+
private boolean sporingslogg = true;
2930
private AbacDataAttributter dataAttributter;
3031

3132
public static Builder builder() {
@@ -60,6 +61,10 @@ public ResourceType getResourceType() {
6061
return resourceType;
6162
}
6263

64+
public boolean isSporingslogg() {
65+
return sporingslogg;
66+
}
67+
6368
public Token getToken() {
6469
return token;
6570
}
@@ -129,6 +134,11 @@ public Builder medResourceType(ResourceType resourceType) {
129134
return this;
130135
}
131136

137+
public Builder medSporingslogg(boolean sporingslogg) {
138+
pdpRequest.sporingslogg = sporingslogg;
139+
return this;
140+
}
141+
132142
public Builder medPepId(String pepId) {
133143
pdpRequest.pepId = pepId;
134144
return this;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,183 @@
1+
package no.nav.vedtak.sikkerhet.abac;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
import static org.mockito.Mockito.mock;
5+
import static org.mockito.Mockito.never;
6+
import static org.mockito.Mockito.verify;
7+
import static org.mockito.Mockito.when;
8+
9+
import java.lang.reflect.Method;
10+
import java.util.Set;
11+
import java.util.UUID;
12+
import java.util.regex.Pattern;
13+
14+
import jakarta.ws.rs.Path;
15+
16+
import org.junit.jupiter.api.Test;
17+
import org.junit.jupiter.api.extension.ExtendWith;
18+
import org.mockito.ArgumentCaptor;
19+
import org.mockito.Mockito;
20+
import org.mockito.junit.jupiter.MockitoExtension;
21+
22+
import no.nav.vedtak.log.audit.Auditdata;
23+
import no.nav.vedtak.log.audit.Auditlogger;
24+
import no.nav.vedtak.sikkerhet.abac.beskyttet.ActionType;
25+
import no.nav.vedtak.sikkerhet.abac.beskyttet.ResourceType;
26+
import no.nav.vedtak.sikkerhet.abac.internal.ActionUthenter;
27+
import no.nav.vedtak.sikkerhet.abac.internal.BeskyttetRessursAttributter;
28+
import no.nav.vedtak.sikkerhet.abac.internal.BeskyttetRessursInterceptorTest;
29+
import no.nav.vedtak.sikkerhet.abac.pdp.AppRessursData;
30+
import no.nav.vedtak.sikkerhet.kontekst.IdentType;
31+
32+
@ExtendWith(MockitoExtension.class)
33+
class AbacAuditLoggerTest {
34+
35+
private final AktørDto aktør1 = new AktørDto("00000000000");
36+
private final BehandlingIdDto behandlingIdDto = new BehandlingIdDto(1234L);
37+
38+
private final ArgumentCaptor<Auditdata> auditdataCaptor = ArgumentCaptor.forClass(Auditdata.class);
39+
40+
@Test
41+
void auditlogg_skal_logge_parametre_som_går_til_pdp_til_sporingslogg_ved_permit() throws Exception {
42+
final var auditlogger = mockAuditLogger();
43+
final var abacAuditlogger = new AbacAuditlogger(auditlogger);
44+
45+
var method = RestClass.class.getMethod("aktoerIn", AktørDto.class);
46+
var appRessursData = AppRessursData.builder().leggTilAktørId(aktør1.aktørId()).build();
47+
var beskyttetRessursAttributter = getBeskyttetRessursAttributter(method,
48+
BeskyttetRessursInterceptor.finnAbacDataAttributter(method, new Object[]{aktør1}));
49+
50+
abacAuditlogger.loggUtfall(AbacResultat.GODKJENT, beskyttetRessursAttributter, appRessursData);
51+
assertGotPattern(auditlogger,
52+
"CEF:0|felles|felles-test|1.0|audit:create|ABAC Sporingslogg|INFO|act=create duid=00000000000 end=__NUMBERS__ request=/foo/aktoer_in requestContext=pip.tjeneste.kan.kun.kalles.av.pdp.servicebruker suid=A000000");
53+
}
54+
55+
@Test
56+
void auditlogg_skal_også_logge_input_parametre_til_sporingslogg_ved_permit() throws Exception {
57+
final Auditlogger auditlogger = mockAuditLogger();
58+
final AbacAuditlogger abacAuditlogger = new AbacAuditlogger(auditlogger);
59+
60+
var method = RestClass.class.getMethod("behandlingIdIn", BehandlingIdDto.class);
61+
var appRessursData = AppRessursData.builder().leggTilAktørId(aktør1.aktørId()).build();
62+
var beskyttetRessursAttributter = getBeskyttetRessursAttributter(method,
63+
BeskyttetRessursInterceptor.finnAbacDataAttributter(method, new Object[]{behandlingIdDto}));
64+
65+
abacAuditlogger.loggUtfall(AbacResultat.GODKJENT, beskyttetRessursAttributter, appRessursData);
66+
67+
assertGotPattern(auditlogger,
68+
"CEF:0|felles|felles-test|1.0|audit:create|ABAC Sporingslogg|INFO|act=create duid=00000000000 end=__NUMBERS__ flexString2=1234 flexString2Label=Behandling request=/foo/behandling_id_in requestContext=pip.tjeneste.kan.kun.kalles.av.pdp.servicebruker suid=A000000");
69+
}
70+
71+
@Test
72+
void auditlog_skal_ikke_logge_parametre_som_går_til_pdp_til_sporingslogg_ved_permit_når_det_er_konfigurert_unntak_i_annotering() throws Exception {
73+
final Auditlogger auditlogger = mock(Auditlogger.class);
74+
final AbacAuditlogger abacAuditlogger = new AbacAuditlogger(auditlogger);
75+
76+
var method = RestClass.class.getMethod("utenSporingslogg", BehandlingIdDto.class);
77+
var appRessursData = AppRessursData.builder().leggTilAktørId(aktør1.aktørId()).build();
78+
var beskyttetRessursAttributter = getBeskyttetRessursAttributter(method,
79+
BeskyttetRessursInterceptor.finnAbacDataAttributter(method, new Object[]{behandlingIdDto}));
80+
81+
abacAuditlogger.loggUtfall(AbacResultat.GODKJENT, beskyttetRessursAttributter, appRessursData);
82+
83+
verify(auditlogger, never()).logg(Mockito.any());
84+
}
85+
86+
@Test
87+
void auditlog_skal_logge_parametre_som_går_til_pdp_til_sporingslogg_ved_deny() throws Exception {
88+
final Auditlogger auditlogger = mockAuditLogger();
89+
final AbacAuditlogger abacAuditlogger = new AbacAuditlogger(auditlogger);
90+
91+
var method = RestClass.class.getMethod("aktoerIn", AktørDto.class);
92+
var appRessursData = AppRessursData.builder().leggTilAktørId(aktør1.aktørId()).build();
93+
var beskyttetRessursAttributter = getBeskyttetRessursAttributter(method,
94+
BeskyttetRessursInterceptor.finnAbacDataAttributter(method, new Object[]{aktør1}));
95+
96+
abacAuditlogger.loggUtfall(AbacResultat.AVSLÅTT_KODE_6, beskyttetRessursAttributter, appRessursData);
97+
98+
assertGotPattern(auditlogger,
99+
"CEF:0|felles|felles-test|1.0|audit:create|ABAC Sporingslogg|WARN|act=create duid=00000000000 end=__NUMBERS__ request=/foo/aktoer_in requestContext=pip.tjeneste.kan.kun.kalles.av.pdp.servicebruker suid=A000000");
100+
}
101+
102+
103+
private void assertGotPattern(final Auditlogger auditlogger, String expected) {
104+
verify(auditlogger).logg(auditdataCaptor.capture());
105+
final String actual = auditdataCaptor.getValue().toString();
106+
assertThat(actual).matches(toAuditdataPattern(expected));
107+
}
108+
109+
private static Auditlogger mockAuditLogger() {
110+
final Auditlogger auditlogger = mock(Auditlogger.class);
111+
when(auditlogger.getDefaultVendor()).thenReturn("felles");
112+
when(auditlogger.getDefaultProduct()).thenReturn("felles-test");
113+
return auditlogger;
114+
}
115+
116+
private BeskyttetRessursAttributter getBeskyttetRessursAttributter(Method method, AbacDataAttributter dataAttributter) {
117+
var beskyttetRessurs = method.getAnnotation(BeskyttetRessurs.class);
118+
119+
return BeskyttetRessursAttributter.builder()
120+
.medBrukerId("A000000")
121+
.medBrukerOid(UUID.randomUUID())
122+
.medIdentType(IdentType.InternBruker)
123+
.medAnsattGrupper(Set.of())
124+
.medToken(Token.withOidcToken(BeskyttetRessursInterceptorTest.DUMMY_OPENID_TOKEN))
125+
.medActionType(beskyttetRessurs.actionType())
126+
.medAvailabilityType(beskyttetRessurs.availabilityType())
127+
.medResourceType(beskyttetRessurs.resourceType())
128+
.medSporingslogg(beskyttetRessurs.sporingslogg())
129+
.medPepId("local-app")
130+
.medServicePath(ActionUthenter.action(RestClass.class, method))
131+
.medDataAttributter(dataAttributter)
132+
.build();
133+
134+
}
135+
136+
private static String toAuditdataPattern(String s) {
137+
return Pattern.quote(s).replaceAll("__NUMBERS__", unquoteInReplacement("[0-9]*"));
138+
}
139+
140+
private static String unquoteInReplacement(String s) {
141+
return "\\\\E" + s + "\\\\Q";
142+
}
143+
144+
@Path("foo")
145+
static class RestClass {
146+
147+
@BeskyttetRessurs(actionType = ActionType.CREATE, resourceType = ResourceType.PIP)
148+
@Path("aktoer_in")
149+
public void aktoerIn(@SuppressWarnings("unused") AktørDto param) {
150+
// Test
151+
}
152+
153+
@BeskyttetRessurs(actionType = ActionType.CREATE, resourceType = ResourceType.PIP)
154+
@Path("behandling_id_in")
155+
public void behandlingIdIn(@SuppressWarnings("unused") BehandlingIdDto param) {
156+
// Test
157+
}
158+
159+
@BeskyttetRessurs(actionType = ActionType.CREATE, resourceType = ResourceType.PIP, sporingslogg = false)
160+
@Path("uten_sporingslogg")
161+
public void utenSporingslogg(@SuppressWarnings("unused") BehandlingIdDto param) {
162+
// Test
163+
}
164+
165+
}
166+
167+
private record AktørDto(String aktørId) implements AbacDto {
168+
169+
@Override
170+
public AbacDataAttributter abacAttributter() {
171+
return AbacDataAttributter.opprett().leggTil(StandardAbacAttributtType.AKTØR_ID, aktørId);
172+
}
173+
}
174+
175+
private record BehandlingIdDto(Long id) implements AbacDto {
176+
177+
@Override
178+
public AbacDataAttributter abacAttributter() {
179+
return AbacDataAttributter.opprett().leggTil(StandardAbacAttributtType.BEHANDLING_ID, id);
180+
}
181+
}
182+
183+
}

‎felles/abac/src/test/java/no/nav/vedtak/sikkerhet/abac/PepImplTest.java

+10-8
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ class PepImplTest {
4343
@Mock
4444
private TokenProvider tokenProvider;
4545
@Mock
46+
private AbacAuditlogger abacAuditlogger;
47+
@Mock
4648
private PopulasjonKlient popKlientMock;
4749
@Mock
4850
private AnsattGruppeKlient gruppeKlientMock;
@@ -61,7 +63,7 @@ static void avsluttEnv() {
6163

6264
@BeforeEach
6365
void setUp() {
64-
this.pep = new PepImpl(popKlientMock, gruppeKlientMock, pdpRequestBuilder);
66+
this.pep = new PepImpl(abacAuditlogger, popKlientMock, gruppeKlientMock, pdpRequestBuilder);
6567
}
6668

6769
@Test
@@ -71,7 +73,7 @@ void skal_ikke_gi_tilgang_til_srvpdp_for_piptjeneste_siden_sts_brukere_ikke_stot
7173

7274
when(pdpRequestBuilder.lagAppRessursData(any())).thenReturn(AppRessursData.builder().build());
7375

74-
Tilgangsbeslutning permit = pep.vurderTilgang(attributter);
76+
var permit = pep.vurderTilgang(attributter);
7577
assertThat(permit.fikkTilgang()).isFalse();
7678
verifyNoInteractions(gruppeKlientMock);
7779
verifyNoInteractions(popKlientMock);
@@ -84,7 +86,7 @@ void skal_nekte_tilgang_til_saksbehandler_for_piptjeneste() {
8486

8587
when(pdpRequestBuilder.lagAppRessursData(any())).thenReturn(AppRessursData.builder().build());
8688

87-
Tilgangsbeslutning permit = pep.vurderTilgang(attributter);
89+
var permit = pep.vurderTilgang(attributter);
8890
assertThat(permit.fikkTilgang()).isFalse();
8991
verifyNoInteractions(gruppeKlientMock);
9092
verifyNoInteractions(popKlientMock);
@@ -98,7 +100,7 @@ void skal_gi_tilgang_for_intern_azure_cc() {
98100

99101
when(pdpRequestBuilder.lagAppRessursData(any())).thenReturn(AppRessursData.builder().build());
100102

101-
Tilgangsbeslutning permit = pep.vurderTilgang(attributter);
103+
var permit = pep.vurderTilgang(attributter);
102104
assertThat(permit.fikkTilgang()).isTrue();
103105
verifyNoInteractions(gruppeKlientMock);
104106
verifyNoInteractions(popKlientMock);
@@ -113,7 +115,7 @@ void skal_gi_avslag_for_ekstern_azure_cc() {
113115

114116
when(pdpRequestBuilder.lagAppRessursData(any())).thenReturn(AppRessursData.builder().build());
115117

116-
Tilgangsbeslutning permit = pep.vurderTilgang(attributter);
118+
var permit = pep.vurderTilgang(attributter);
117119
assertThat(permit.fikkTilgang()).isFalse();
118120
verifyNoInteractions(gruppeKlientMock);
119121
verifyNoInteractions(popKlientMock);
@@ -128,7 +130,7 @@ void skal_gi_avslag_for_godkjent_ekstern_azure_cc_men_i_feil_klusterklasse() {
128130

129131
when(pdpRequestBuilder.lagAppRessursData(any())).thenReturn(AppRessursData.builder().build());
130132

131-
Tilgangsbeslutning permit = pep.vurderTilgang(attributter);
133+
var permit = pep.vurderTilgang(attributter);
132134
assertThat(permit.fikkTilgang()).isFalse();
133135
verifyNoInteractions(gruppeKlientMock);
134136
verifyNoInteractions(popKlientMock);
@@ -144,7 +146,7 @@ void skal_gi_tilgang_for_godkjent_ekstern_azure_cc() {
144146

145147
when(pdpRequestBuilder.lagAppRessursData(any())).thenReturn(AppRessursData.builder().build());
146148

147-
Tilgangsbeslutning permit = pep.vurderTilgang(attributter);
149+
var permit = pep.vurderTilgang(attributter);
148150
assertThat(permit.fikkTilgang()).isTrue();
149151
verifyNoInteractions(gruppeKlientMock);
150152
verifyNoInteractions(popKlientMock);
@@ -159,7 +161,7 @@ void skal_kalle_pdp_for_annet_enn_pip_tjenester() {
159161
when(pdpRequestBuilder.lagAppRessursData(any())).thenReturn(appressursData);
160162
when(popKlientMock.vurderTilgangInternBruker(any(), any(), any())).thenReturn(Tilgangsvurdering.godkjenn());
161163

162-
@SuppressWarnings("unused") Tilgangsbeslutning permit = pep.vurderTilgang(attributter);
164+
@SuppressWarnings("unused") var permit = pep.vurderTilgang(attributter);
163165
verifyNoInteractions(gruppeKlientMock);
164166
verify(popKlientMock).vurderTilgangInternBruker(attributter.getBrukerOid(), Set.of(), appressursData.getAktørIdSet());
165167
}

‎felles/abac/src/test/java/no/nav/vedtak/sikkerhet/abac/internal/BeskyttetRessursInterceptorTest.java

+67-119
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,38 @@
11
package no.nav.vedtak.sikkerhet.abac.internal;
22

33
import static org.assertj.core.api.Assertions.assertThat;
4-
import static org.mockito.Mockito.mock;
5-
import static org.mockito.Mockito.never;
6-
import static org.mockito.Mockito.verify;
74
import static org.mockito.Mockito.when;
85

96
import java.lang.reflect.Constructor;
107
import java.lang.reflect.Method;
118
import java.util.Map;
12-
import java.util.regex.Pattern;
9+
import java.util.Set;
10+
import java.util.UUID;
1311

1412
import jakarta.interceptor.InvocationContext;
1513
import jakarta.ws.rs.Path;
1614

17-
import org.assertj.core.api.Fail;
15+
import org.junit.jupiter.api.Assertions;
16+
import org.junit.jupiter.api.BeforeEach;
1817
import org.junit.jupiter.api.Test;
1918
import org.junit.jupiter.api.extension.ExtendWith;
2019
import org.mockito.ArgumentCaptor;
2120
import org.mockito.Mock;
22-
import org.mockito.Mockito;
2321
import org.mockito.junit.jupiter.MockitoExtension;
2422

25-
import no.nav.vedtak.exception.ManglerTilgangException;
26-
import no.nav.vedtak.log.audit.Auditdata;
27-
import no.nav.vedtak.log.audit.Auditlogger;
28-
import no.nav.vedtak.sikkerhet.abac.AbacAuditlogger;
2923
import no.nav.vedtak.sikkerhet.abac.AbacDataAttributter;
3024
import no.nav.vedtak.sikkerhet.abac.AbacDto;
3125
import no.nav.vedtak.sikkerhet.abac.AbacResultat;
3226
import no.nav.vedtak.sikkerhet.abac.BeskyttetRessurs;
3327
import no.nav.vedtak.sikkerhet.abac.BeskyttetRessursInterceptor;
28+
import no.nav.vedtak.sikkerhet.abac.Pep;
29+
import no.nav.vedtak.sikkerhet.abac.PepNektetTilgangException;
3430
import no.nav.vedtak.sikkerhet.abac.StandardAbacAttributtType;
35-
import no.nav.vedtak.sikkerhet.abac.Tilgangsbeslutning;
3631
import no.nav.vedtak.sikkerhet.abac.TokenProvider;
3732
import no.nav.vedtak.sikkerhet.abac.beskyttet.ActionType;
33+
import no.nav.vedtak.sikkerhet.abac.beskyttet.AvailabilityType;
3834
import no.nav.vedtak.sikkerhet.abac.beskyttet.ResourceType;
39-
import no.nav.vedtak.sikkerhet.abac.pdp.AppRessursData;
35+
import no.nav.vedtak.sikkerhet.kontekst.IdentType;
4036
import no.nav.vedtak.sikkerhet.oidc.config.OpenIDProvider;
4137
import no.nav.vedtak.sikkerhet.oidc.token.OpenIDToken;
4238
import no.nav.vedtak.sikkerhet.oidc.token.TokenString;
@@ -50,131 +46,99 @@ public class BeskyttetRessursInterceptorTest {
5046
private final AktørDto aktør1 = new AktørDto("00000000000");
5147
private final BehandlingIdDto behandlingIdDto = new BehandlingIdDto(1234L);
5248

53-
private final ArgumentCaptor<Auditdata> auditdataCaptor = ArgumentCaptor.forClass(Auditdata.class);
49+
private static final String BRUKER_IDENT = "A000000";
50+
private static final UUID BRUKER_OID = UUID.randomUUID();
51+
private static final String PEP_ID = "test";
5452

55-
public static final OpenIDToken DUMMY_OPENID_TOKEN = new OpenIDToken(OpenIDProvider.AZUREAD, new TokenString(DUMMY_ID_TOKEN));
53+
private final ArgumentCaptor<BeskyttetRessursAttributter> braCaptor = ArgumentCaptor.forClass(BeskyttetRessursAttributter.class);
5654

55+
public static final OpenIDToken DUMMY_OPENID_TOKEN = new OpenIDToken(OpenIDProvider.TOKENX, new TokenString(DUMMY_ID_TOKEN));
56+
57+
@Mock
58+
private TokenProvider tokenProvider;
5759
@Mock
58-
private static TokenProvider tokenProvider;
60+
private Pep pep;
5961

6062

61-
private void mockTokenProvider() {
62-
when(tokenProvider.getUid()).thenReturn("A000000");
63+
@BeforeEach
64+
void mockTokenProvider() {
65+
when(tokenProvider.getUid()).thenReturn(BRUKER_IDENT);
66+
when(tokenProvider.getOid()).thenReturn(BRUKER_OID);
67+
when(tokenProvider.getAnsattGrupper()).thenReturn(Set.of());
68+
when(tokenProvider.getIdentType()).thenReturn(IdentType.InternBruker);
6369
when(tokenProvider.openIdToken()).thenReturn(DUMMY_OPENID_TOKEN);
70+
when(pep.pepId()).thenReturn(PEP_ID);
6471
}
6572

6673
@Test
67-
void auditlogg_skal_logge_parametre_som_går_til_pdp_til_sporingslogg_ved_permit() throws Exception {
68-
final Auditlogger auditlogger = mockAuditLogger();
69-
final AbacAuditlogger abacAuditlogger = new AbacAuditlogger(auditlogger);
70-
71-
skal_logge_parametre_som_går_til_pdp_til_sporingslogg_ved_permit(abacAuditlogger);
72-
assertGotPattern(auditlogger,
73-
"CEF:0|felles|felles-test|1.0|audit:create|ABAC Sporingslogg|INFO|act=create duid=00000000000 end=__NUMBERS__ request=/foo/aktoer_in requestContext=pip.tjeneste.kan.kun.kalles.av.pdp.servicebruker suid=A000000");
74-
}
75-
76-
private void skal_logge_parametre_som_går_til_pdp_til_sporingslogg_ved_permit(AbacAuditlogger abacAuditLogger) throws Exception {
77-
mockTokenProvider();
78-
79-
BeskyttetRessursInterceptor interceptor = new BeskyttetRessursInterceptor(attributter -> {
80-
var ressurs = AppRessursData.builder().leggTilAktørId(aktør1.getAktørId()).build();
81-
return new Tilgangsbeslutning(AbacResultat.GODKJENT, attributter, ressurs);
82-
}, abacAuditLogger, tokenProvider);
74+
void godkjent_aktør() throws Exception {
75+
when(pep.vurderTilgang(braCaptor.capture())).thenReturn(AbacResultat.GODKJENT);
76+
var interceptor = new BeskyttetRessursInterceptor(pep, tokenProvider);
8377

8478
Method method = RestClass.class.getMethod("aktoerIn", AktørDto.class);
8579
InvocationContext ic = new TestInvocationContext(method, new Object[]{aktør1});
8680
interceptor.wrapTransaction(ic);
87-
}
8881

89-
@Test
90-
void auditlogg_skal_også_logge_input_parametre_til_sporingslogg_ved_permit() throws Exception {
91-
final Auditlogger auditlogger = mockAuditLogger();
92-
final AbacAuditlogger abacAuditlogger = new AbacAuditlogger(auditlogger);
93-
skal_også_logge_input_parametre_til_sporingslogg_ved_permit(abacAuditlogger);
94-
assertGotPattern(auditlogger,
95-
"CEF:0|felles|felles-test|1.0|audit:create|ABAC Sporingslogg|INFO|act=create duid=00000000000 end=__NUMBERS__ flexString2=1234 flexString2Label=Behandling request=/foo/behandling_id_in requestContext=pip.tjeneste.kan.kun.kalles.av.pdp.servicebruker suid=A000000");
82+
var bra = braCaptor.getValue();
83+
assertBeskyttetRessursAttributter(bra);
84+
assertThat(bra.isSporingslogg()).isTrue();
9685
}
9786

98-
private void skal_også_logge_input_parametre_til_sporingslogg_ved_permit(AbacAuditlogger abacAuditLogger) throws Exception {
99-
mockTokenProvider();
100-
101-
BeskyttetRessursInterceptor interceptor = new BeskyttetRessursInterceptor(attributter -> {
102-
var ressurs = AppRessursData.builder().leggTilAktørId(aktør1.getAktørId()).build();
103-
return new Tilgangsbeslutning(AbacResultat.GODKJENT, attributter, ressurs);
104-
}, abacAuditLogger, tokenProvider);
87+
@Test
88+
void godkjent_behandling() throws Exception {
89+
when(pep.vurderTilgang(braCaptor.capture())).thenReturn(AbacResultat.GODKJENT);
90+
var interceptor = new BeskyttetRessursInterceptor(pep, tokenProvider);
10591

10692
Method method = RestClass.class.getMethod("behandlingIdIn", BehandlingIdDto.class);
10793
InvocationContext ic = new TestInvocationContext(method, new Object[]{behandlingIdDto});
10894
interceptor.wrapTransaction(ic);
109-
}
11095

111-
@Test
112-
void auditlog_skal_ikke_logge_parametre_som_går_til_pdp_til_sporingslogg_ved_permit_når_det_er_konfigurert_unntak_i_annotering() throws Exception {
113-
when(tokenProvider.openIdToken()).thenReturn(DUMMY_OPENID_TOKEN);
114-
final Auditlogger auditlogger = mock(Auditlogger.class);
115-
final AbacAuditlogger abacAuditlogger = new AbacAuditlogger(auditlogger);
116-
skal_ikke_logge_parametre_som_går_til_pdp_til_sporingslogg_ved_permit_når_det_er_konfigurert_unntak_i_annotering(abacAuditlogger);
117-
verify(auditlogger, never()).logg(Mockito.any());
96+
var bra = braCaptor.getValue();
97+
assertBeskyttetRessursAttributter(bra);
98+
assertThat(bra.isSporingslogg()).isTrue();
11899
}
119100

120-
private void skal_ikke_logge_parametre_som_går_til_pdp_til_sporingslogg_ved_permit_når_det_er_konfigurert_unntak_i_annotering(AbacAuditlogger abacAuditLogger) throws Exception {
121-
mockTokenProvider();
122-
BeskyttetRessursInterceptor interceptor = new BeskyttetRessursInterceptor(attributter -> {
123-
var ressurs = AppRessursData.builder().leggTilAktørId(aktør1.getAktørId()).build();
124-
return new Tilgangsbeslutning(AbacResultat.GODKJENT, attributter, ressurs);
125-
}, abacAuditLogger, tokenProvider);
101+
102+
@Test
103+
void godkjent_uten_sporing() throws Exception {
104+
when(pep.vurderTilgang(braCaptor.capture())).thenReturn(AbacResultat.GODKJENT);
105+
var interceptor = new BeskyttetRessursInterceptor(pep, tokenProvider);
126106

127107
Method method = RestClass.class.getMethod("utenSporingslogg", BehandlingIdDto.class);
128108
InvocationContext ic = new TestInvocationContext(method, new Object[]{behandlingIdDto});
129109
interceptor.wrapTransaction(ic);
130-
}
131110

132-
@Test
133-
void auditlog_skal_logge_parametre_som_går_til_pdp_til_sporingslogg_ved_deny() throws Exception {
134-
mockTokenProvider();
135-
final Auditlogger auditlogger = mockAuditLogger();
136-
final AbacAuditlogger abacAuditlogger = new AbacAuditlogger(auditlogger);
137-
skal_logge_parametre_som_går_til_pdp_til_sporingslogg_ved_deny(abacAuditlogger);
138-
assertGotPattern(auditlogger,
139-
"CEF:0|felles|felles-test|1.0|audit:create|ABAC Sporingslogg|WARN|act=create duid=00000000000 end=__NUMBERS__ request=/foo/aktoer_in requestContext=pip.tjeneste.kan.kun.kalles.av.pdp.servicebruker suid=A000000");
111+
var bra = braCaptor.getValue();
112+
assertBeskyttetRessursAttributter(bra);
113+
assertThat(bra.isSporingslogg()).isFalse();
140114
}
141115

142-
private void skal_logge_parametre_som_går_til_pdp_til_sporingslogg_ved_deny(AbacAuditlogger abacAuditLogger) throws Exception {
143-
BeskyttetRessursInterceptor interceptor = new BeskyttetRessursInterceptor(attributter -> {
144-
var ressurs = AppRessursData.builder().leggTilAktørId(aktør1.getAktørId()).build();
145-
return new Tilgangsbeslutning(AbacResultat.AVSLÅTT_KODE_6, attributter, ressurs);
146-
}, abacAuditLogger, tokenProvider);
116+
@Test
117+
void deny_aktør_gir_exception() throws Exception {
118+
when(pep.vurderTilgang(braCaptor.capture())).thenReturn(AbacResultat.AVSLÅTT_KODE_6);
119+
var interceptor = new BeskyttetRessursInterceptor(pep, tokenProvider);
147120

148121
Method method = RestClass.class.getMethod("aktoerIn", AktørDto.class);
149122
InvocationContext ic = new TestInvocationContext(method, new Object[]{aktør1});
123+
Assertions.assertThrowsExactly(PepNektetTilgangException.class, () -> interceptor.wrapTransaction(ic), () -> "F-709170:Tilgangskontroll.Avslag.Kode6");
150124

151-
try {
152-
interceptor.wrapTransaction(ic);
153-
Fail.fail("Skal få exception");
154-
} catch (ManglerTilgangException e) {
155-
// FORVENTET
156-
}
157-
}
158-
159-
private void assertGotPattern(final Auditlogger auditlogger, String expected) {
160-
verify(auditlogger).logg(auditdataCaptor.capture());
161-
final String actual = auditdataCaptor.getValue().toString();
162-
assertThat(actual).matches(toAuditdataPattern(expected));
163-
}
164-
165-
private static Auditlogger mockAuditLogger() {
166-
final Auditlogger auditlogger = mock(Auditlogger.class);
167-
when(auditlogger.getDefaultVendor()).thenReturn("felles");
168-
when(auditlogger.getDefaultProduct()).thenReturn("felles-test");
169-
return auditlogger;
170-
}
171-
172-
private static final String toAuditdataPattern(String s) {
173-
return Pattern.quote(s).replaceAll("__NUMBERS__", unquoteInReplacement("[0-9]*"));
125+
var bra = braCaptor.getValue();
126+
assertBeskyttetRessursAttributter(bra);
127+
assertThat(bra.isSporingslogg()).isTrue();
174128
}
175129

176-
private static final String unquoteInReplacement(String s) {
177-
return "\\\\E" + s + "\\\\Q";
130+
private void assertBeskyttetRessursAttributter(BeskyttetRessursAttributter bra) {
131+
assertThat(bra.getBrukerId()).isEqualTo(BRUKER_IDENT);
132+
assertThat(bra.getBrukerOid()).isEqualTo(BRUKER_OID);
133+
assertThat(bra.getIdentType()).isEqualTo(IdentType.InternBruker);
134+
assertThat(bra.getAnsattGrupper()).isEmpty();
135+
assertThat(bra.getActionType()).isEqualTo(ActionType.CREATE);
136+
assertThat(bra.getResourceType()).isEqualTo(ResourceType.PIP);
137+
assertThat(bra.getAvailabilityType()).isEqualTo(AvailabilityType.INTERNAL);
138+
assertThat(bra.getPepId()).isEqualTo(PEP_ID);
139+
assertThat(bra.getToken().getOpenIDProvider()).isEqualTo(OpenIDProvider.TOKENX);
140+
assertThat(bra.getServicePath()).startsWith("/foo");
141+
assertThat(bra.getDataAttributter().keySet()).hasSize(1);
178142
}
179143

180144
@Path("foo")
@@ -200,31 +164,15 @@ public void utenSporingslogg(@SuppressWarnings("unused") BehandlingIdDto param)
200164

201165
}
202166

203-
private static class AktørDto implements AbacDto {
204-
205-
private String aktørId;
206-
207-
public AktørDto(String aktørId) {
208-
this.aktørId = aktørId;
209-
}
210-
211-
public String getAktørId() {
212-
return aktørId;
213-
}
167+
private record AktørDto(String aktørId) implements AbacDto {
214168

215169
@Override
216170
public AbacDataAttributter abacAttributter() {
217171
return AbacDataAttributter.opprett().leggTil(StandardAbacAttributtType.AKTØR_ID, aktørId);
218172
}
219173
}
220174

221-
private static class BehandlingIdDto implements AbacDto {
222-
223-
private Long id;
224-
225-
public BehandlingIdDto(Long id) {
226-
this.id = id;
227-
}
175+
private record BehandlingIdDto(Long id) implements AbacDto {
228176

229177
@Override
230178
public AbacDataAttributter abacAttributter() {

0 commit comments

Comments
 (0)
Please sign in to comment.