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

Rigge for migrering av abac til poao-tilgang #116

Merged
merged 1 commit into from
May 28, 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
Expand Up @@ -5,27 +5,31 @@ import no.nav.arbeidsgiver.tiltakrefusjon.altinn.AltinnTilgangsstyringService
import no.nav.arbeidsgiver.tiltakrefusjon.inntekt.InntektskomponentService
import no.nav.arbeidsgiver.tiltakrefusjon.norg.NorgService
import no.nav.arbeidsgiver.tiltakrefusjon.okonomi.KontoregisterService
import no.nav.arbeidsgiver.tiltakrefusjon.refusjon.*
import no.nav.arbeidsgiver.tiltakrefusjon.refusjon.Fnr
import no.nav.arbeidsgiver.tiltakrefusjon.refusjon.KorreksjonRepository
import no.nav.arbeidsgiver.tiltakrefusjon.refusjon.RefusjonRepository
import no.nav.arbeidsgiver.tiltakrefusjon.refusjon.RefusjonService
import no.nav.arbeidsgiver.tiltakrefusjon.utils.Issuer
import no.nav.arbeidsgiver.tiltakrefusjon.utils.getClaims
import no.nav.security.token.support.core.context.TokenValidationContextHolder
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import org.springframework.stereotype.Component
import java.util.*
Copy link

@eirikv eirikv May 28, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

eye


@Observed
@Component
class InnloggetBrukerService(
val context: TokenValidationContextHolder,
val altinnTilgangsstyringService: AltinnTilgangsstyringService,
val abacTilgangsstyringService: AbacTilgangsstyringService,
val tilgangskontrollService: TilgangskontrollService,
val refusjonRepository: RefusjonRepository,
val korreksjonRepository: KorreksjonRepository,
val refusjonService: RefusjonService,
val inntektskomponentService: InntektskomponentService,
val kontoregisterService: KontoregisterService,
val norgService: NorgService,
val beslutterRolleConfig: BeslutterRolleConfig
val beslutterRolleConfig: BeslutterRolleConfig,
) {
var logger: Logger = LoggerFactory.getLogger(javaClass)

Expand All @@ -47,7 +51,13 @@ class InnloggetBrukerService(
}

fun navIdent(): String {
return context.getClaims(Issuer.AZURE)?.getStringClaim("NAVident") ?: throw IllegalArgumentException("Forsøker å hente navident for bruker som ikke er NAV-ansatt")
return context.getClaims(Issuer.AZURE)?.getStringClaim("NAVident")
?: throw IllegalArgumentException("Forsøker å hente navident for bruker som ikke er NAV-ansatt")
}

fun azureOid(): UUID {
return context.getClaims(Issuer.AZURE)?.getStringClaim("oid")?.let { UUID.fromString(it) }
?: throw IllegalArgumentException("Forsøker å hente azure oid for bruker som ikke er NAV-ansatt")
}

fun displayName(): String {
Expand All @@ -61,7 +71,10 @@ class InnloggetBrukerService(
fun hentInnloggetArbeidsgiver(): InnloggetArbeidsgiver {
return when {
erArbeidsgiver() -> {
val fnr = Fnr(context.getClaims(Issuer.TOKEN_X)?.getStringClaim("pid") ?: throw IllegalArgumentException("Forsøker å hente pid for bruker som ikke er arbeidsgiver"))
val fnr = Fnr(
context.getClaims(Issuer.TOKEN_X)?.getStringClaim("pid")
?: throw IllegalArgumentException("Forsøker å hente pid for bruker som ikke er arbeidsgiver")
)
InnloggetArbeidsgiver(fnr.verdi, altinnTilgangsstyringService, refusjonRepository, korreksjonRepository, refusjonService)
}

Expand All @@ -77,7 +90,8 @@ class InnloggetBrukerService(
InnloggetSaksbehandler(
identifikator = navIdent(),
navn = displayName(),
abacTilgangsstyringService = abacTilgangsstyringService,
azureOid = azureOid(),
tilgangskontrollService = tilgangskontrollService,
refusjonRepository = refusjonRepository,
korreksjonRepository = korreksjonRepository,
refusjonService = refusjonService,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,35 @@ import no.nav.arbeidsgiver.tiltakrefusjon.RessursFinnesIkkeException
import no.nav.arbeidsgiver.tiltakrefusjon.inntekt.InntektskomponentService
import no.nav.arbeidsgiver.tiltakrefusjon.norg.NorgService
import no.nav.arbeidsgiver.tiltakrefusjon.okonomi.KontoregisterService
import no.nav.arbeidsgiver.tiltakrefusjon.refusjon.*
import no.nav.arbeidsgiver.tiltakrefusjon.refusjon.Beregning
import no.nav.arbeidsgiver.tiltakrefusjon.refusjon.BrukerRolle
import no.nav.arbeidsgiver.tiltakrefusjon.refusjon.HentSaksbehandlerRefusjonerQueryParametre
import no.nav.arbeidsgiver.tiltakrefusjon.refusjon.Inntektsgrunnlag
import no.nav.arbeidsgiver.tiltakrefusjon.refusjon.Korreksjon
import no.nav.arbeidsgiver.tiltakrefusjon.refusjon.KorreksjonRepository
import no.nav.arbeidsgiver.tiltakrefusjon.refusjon.Korreksjonsgrunn
import no.nav.arbeidsgiver.tiltakrefusjon.refusjon.Refusjon
import no.nav.arbeidsgiver.tiltakrefusjon.refusjon.RefusjonRepository
import no.nav.arbeidsgiver.tiltakrefusjon.refusjon.RefusjonService
import no.nav.arbeidsgiver.tiltakrefusjon.refusjon.RefusjonStatus
import no.nav.arbeidsgiver.tiltakrefusjon.refusjon.Tiltakstype
import no.nav.arbeidsgiver.tiltakrefusjon.refusjon.beregnRefusjonsbeløp
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import org.springframework.data.domain.*
import org.springframework.data.domain.Page
import org.springframework.data.domain.PageImpl
import org.springframework.data.domain.PageRequest
import org.springframework.data.domain.Pageable
import org.springframework.data.domain.Sort
import org.springframework.data.repository.findByIdOrNull
import java.time.LocalDate
import java.util.*

data class InnloggetSaksbehandler(
override val identifikator: String,
val azureOid: UUID,
val navn: String,
@JsonIgnore val abacTilgangsstyringService: AbacTilgangsstyringService,
@JsonIgnore val tilgangskontrollService: TilgangskontrollService,
@JsonIgnore val norgeService: NorgService,
@JsonIgnore val refusjonRepository: RefusjonRepository,
@JsonIgnore val korreksjonRepository: KorreksjonRepository,
Expand All @@ -26,6 +44,7 @@ data class InnloggetSaksbehandler(
) : InnloggetBruker {
@JsonIgnore
val log: Logger = LoggerFactory.getLogger(javaClass)
val internIdentifikatorer = InternIdentifikatorer(identifikator, azureOid)
override val rolle: BrukerRolle = BrukerRolle.BESLUTTER

fun finnAlle(queryParametre: HentSaksbehandlerRefusjonerQueryParametre): Map<String, Any> {
Expand All @@ -35,46 +54,46 @@ data class InnloggetSaksbehandler(
val tiltakstyper = if (queryParametre.tiltakstype != null) listOf(queryParametre.tiltakstype) else Tiltakstype.values().toList()

val liste: Page<Refusjon> =
if (!queryParametre.veilederNavIdent.isNullOrBlank()) {
refusjonRepository.findAllByRefusjonsgrunnlag_Tilskuddsgrunnlag_VeilederNavIdentAndStatusInAndRefusjonsgrunnlag_Tilskuddsgrunnlag_TiltakstypeIn(
queryParametre.veilederNavIdent,
statuser,
tiltakstyper,
pageable
)
} else if (!queryParametre.deltakerFnr.isNullOrBlank()) {
refusjonRepository.findAllByDeltakerFnrAndStatusInAndRefusjonsgrunnlag_Tilskuddsgrunnlag_TiltakstypeIn(
queryParametre.deltakerFnr,
statuser,
tiltakstyper,
pageable
)
} else if (!queryParametre.bedriftNr.isNullOrBlank()) {
refusjonRepository.findAllByBedriftNrAndStatusInAndRefusjonsgrunnlag_Tilskuddsgrunnlag_TiltakstypeIn(
queryParametre.bedriftNr,
statuser,
tiltakstyper,
pageable
)
} else if (!queryParametre.enhet.isNullOrBlank()) {
refusjonRepository.findAllByRefusjonsgrunnlag_Tilskuddsgrunnlag_EnhetAndStatusInAndRefusjonsgrunnlag_Tilskuddsgrunnlag_TiltakstypeIn(
queryParametre.enhet,
statuser,
tiltakstyper,
pageable
)
} else if (queryParametre.avtaleNr != null) {
refusjonRepository.findAllByRefusjonsgrunnlag_Tilskuddsgrunnlag_AvtaleNrAndStatusInAndRefusjonsgrunnlag_Tilskuddsgrunnlag_TiltakstypeIn(
queryParametre.avtaleNr!!,
statuser,
tiltakstyper,
pageable
)
} else {
PageImpl(emptyList())
}
if (!queryParametre.veilederNavIdent.isNullOrBlank()) {
refusjonRepository.findAllByRefusjonsgrunnlag_Tilskuddsgrunnlag_VeilederNavIdentAndStatusInAndRefusjonsgrunnlag_Tilskuddsgrunnlag_TiltakstypeIn(
queryParametre.veilederNavIdent,
statuser,
tiltakstyper,
pageable
)
} else if (!queryParametre.deltakerFnr.isNullOrBlank()) {
refusjonRepository.findAllByDeltakerFnrAndStatusInAndRefusjonsgrunnlag_Tilskuddsgrunnlag_TiltakstypeIn(
queryParametre.deltakerFnr,
statuser,
tiltakstyper,
pageable
)
} else if (!queryParametre.bedriftNr.isNullOrBlank()) {
refusjonRepository.findAllByBedriftNrAndStatusInAndRefusjonsgrunnlag_Tilskuddsgrunnlag_TiltakstypeIn(
queryParametre.bedriftNr,
statuser,
tiltakstyper,
pageable
)
} else if (!queryParametre.enhet.isNullOrBlank()) {
refusjonRepository.findAllByRefusjonsgrunnlag_Tilskuddsgrunnlag_EnhetAndStatusInAndRefusjonsgrunnlag_Tilskuddsgrunnlag_TiltakstypeIn(
queryParametre.enhet,
statuser,
tiltakstyper,
pageable
)
} else if (queryParametre.avtaleNr != null) {
refusjonRepository.findAllByRefusjonsgrunnlag_Tilskuddsgrunnlag_AvtaleNrAndStatusInAndRefusjonsgrunnlag_Tilskuddsgrunnlag_TiltakstypeIn(
queryParametre.avtaleNr!!,
statuser,
tiltakstyper,
pageable
)
} else {
PageImpl(emptyList())
}

val refusjonerMedTilgang = liste.content.filter { abacTilgangsstyringService.harLeseTilgang(identifikator, it.deltakerFnr) }
val refusjonerMedTilgang = liste.content.filter { tilgangskontrollService.harLeseTilgang(internIdentifikatorer, it.deltakerFnr) }
val response = mapOf(
Pair("refusjoner", refusjonerMedTilgang),
Pair("size", liste.size),
Expand Down Expand Up @@ -102,7 +121,7 @@ data class InnloggetSaksbehandler(
if (korreksjon.skalGjøreInntektsoppslag()) {
var antallMånederSomSkalSjekkes: Long = 1
if (korreksjon.korreksjonsgrunner.contains(Korreksjonsgrunn.HENT_INNTEKTER_TO_MÅNEDER_FREM)) {
if(korreksjon.unntakOmInntekterFremitid != null) {
if (korreksjon.unntakOmInntekterFremitid != null) {
antallMånederSomSkalSjekkes = korreksjon.unntakOmInntekterFremitid.toLong()
} else {
antallMånederSomSkalSjekkes = 2
Expand All @@ -127,16 +146,17 @@ data class InnloggetSaksbehandler(
}

private fun sjekkLesetilgang(refusjon: Refusjon) {
if (!abacTilgangsstyringService.harLeseTilgang(identifikator, refusjon.deltakerFnr)) {
if (!tilgangskontrollService.harLeseTilgang(internIdentifikatorer, refusjon.deltakerFnr)) {
throw TilgangskontrollException()
}
}

private fun sjekkLesetilgang(korreksjon: Korreksjon) {
if (!abacTilgangsstyringService.harLeseTilgang(identifikator, korreksjon.deltakerFnr)) {
if (!tilgangskontrollService.harLeseTilgang(internIdentifikatorer, korreksjon.deltakerFnr)) {
throw TilgangskontrollException()
}
}

private fun sjekkKorreksjonTilgang() {
if (!harKorreksjonTilgang) {
throw TilgangskontrollException()
Expand Down Expand Up @@ -171,7 +191,7 @@ data class InnloggetSaksbehandler(
val refusjon = finnRefusjon(korreksjon.korrigererRefusjonId)
sjekkLesetilgang(refusjon)

korreksjon.utbetalKorreksjon(this, korreksjon.refusjonsgrunnlag.tilskuddsgrunnlag.enhet?: "")
korreksjon.utbetalKorreksjon(this, korreksjon.refusjonsgrunnlag.tilskuddsgrunnlag.enhet ?: "")
refusjon.status = RefusjonStatus.KORRIGERT

refusjonRepository.save(refusjon)
Expand Down Expand Up @@ -273,7 +293,7 @@ data class InnloggetSaksbehandler(
tilskuddsgrunnlag = refusjon.refusjonsgrunnlag.tilskuddsgrunnlag,
tidligereUtbetalt = 0,
korrigertBruttoLønn = refusjon.refusjonsgrunnlag.endretBruttoLønn,
fratrekkRefunderbarSum =refusjon.refusjonsgrunnlag.refunderbarBeløp,
fratrekkRefunderbarSum = refusjon.refusjonsgrunnlag.refunderbarBeløp,
forrigeRefusjonMinusBeløp = minusBeløp,
tilskuddFom = refusjon.refusjonsgrunnlag.tilskuddsgrunnlag.tilskuddFom,
harFerietrekkForSammeMåned = harFerietrekkForSammeMåned,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package no.nav.arbeidsgiver.tiltakrefusjon.autorisering

import java.util.*

data class InternIdentifikatorer(
val navIdent: String,
val azureOid: UUID
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package no.nav.arbeidsgiver.tiltakrefusjon.autorisering

import org.springframework.stereotype.Service

@Service
class TilgangskontrollService(
val abacTilgangsstyringService: AbacTilgangsstyringService
) {
fun harLeseTilgang(internIdentifikatorer: InternIdentifikatorer, deltakerFnr: String): Boolean {
return abacTilgangsstyringService.harLeseTilgang(internIdentifikatorer.navIdent, deltakerFnr)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,29 +14,40 @@ import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMock
import org.springframework.boot.test.context.SpringBootTest
import org.springframework.cloud.contract.wiremock.AutoConfigureWireMock
import org.springframework.test.context.ActiveProfiles
import java.util.*

@SpringBootTest
@ActiveProfiles("local")
@AutoConfigureMockMvc
@AutoConfigureWireMock(port = 8091)
class InnloggetSaksbehandlerTest(
@Autowired val refusjonRepository: RefusjonRepository,
@Autowired val abacTilgangsstyringService: AbacTilgangsstyringService,
@Autowired val tilgangskontrollService: TilgangskontrollService,
@Autowired val korreksjonRepository: KorreksjonRepository,
@Autowired val refusjonService: RefusjonService,
@Autowired val inntektskomponentService: FakeInntektskomponentService,
@Autowired val kontoregisterService: FakeKontoregisterService,
@Autowired val norgService: NorgService) {


@Autowired val norgService: NorgService
) {
@BeforeEach
fun setUp() {
refusjonRepository.deleteAll()
refusjonRepository.saveAll(refusjoner())
}

val saksbehandler = InnloggetSaksbehandler("Z123456", "Geir", abacTilgangsstyringService, norgService, refusjonRepository, korreksjonRepository, refusjonService, inntektskomponentService, kontoregisterService, true)

val saksbehandler = InnloggetSaksbehandler(
"Z123456",
UUID.fromString("550e8400-e29b-41d4-a716-446655440000"),
"Geir",
tilgangskontrollService,
norgService,
refusjonRepository,
korreksjonRepository,
refusjonService,
inntektskomponentService,
kontoregisterService,
true
)

@Test
fun `saksbehandler får ikke opp refusjoner som den ikke har tilgang til`() {
Expand All @@ -54,12 +65,9 @@ class InnloggetSaksbehandlerTest(
fun `saksbehandler henter refusjoner for ett BedriftNr`() {
val bedriftNrDetSlåesOppPå = "998877665"

val alleRefusjoner = saksbehandler.finnAlle(HentSaksbehandlerRefusjonerQueryParametre(size = 1000, bedriftNr = bedriftNrDetSlåesOppPå ))
val alleRefusjoner = saksbehandler.finnAlle(HentSaksbehandlerRefusjonerQueryParametre(size = 1000, bedriftNr = bedriftNrDetSlåesOppPå))
val refusjonerSaksbehandlerHartilgangtil = alleRefusjoner.get("refusjoner") as List<Refusjon>
Assertions.assertThat(refusjonerSaksbehandlerHartilgangtil).allMatch { it.bedriftNr == bedriftNrDetSlåesOppPå }
assertEquals(4, refusjonerSaksbehandlerHartilgangtil.size)

}


}
}
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ class RefusjonApiTest(
@SpykBean
lateinit var consoleLogger: AuditConsoleLogger

val navToken = lagTokenForNavId("Z123456")
val navToken = lagTokenForNavId("Z123456", "550e8400-e29b-41d4-a716-446655440000")
val arbGiverToken = lagTokenForFnr("16120102137")

@BeforeEach
Expand Down Expand Up @@ -369,11 +369,11 @@ class RefusjonApiTest(
).body()
}

private final fun lagTokenForNavId(navId: String): String {
private final fun lagTokenForNavId(navId: String, azureId: String): String {
return HttpClient.newHttpClient().send(
HttpRequest.newBuilder()
.GET()
.uri(URI.create("https://tiltak-fakelogin.ekstern.dev.nav.no/token?NAVident=${navId}&iss=aad&aud=aud-aad"))
.uri(URI.create("https://tiltak-fakelogin.ekstern.dev.nav.no/token?NAVident=${navId}&iss=aad&aud=aud-aad&oid=${azureId}"))
.build(), BodyHandlers.ofString()
).body()
}
Expand Down