Skip to content

Commit

Permalink
in mem cache av tilganger
Browse files Browse the repository at this point in the history
  • Loading branch information
kenglxn committed Sep 5, 2024
1 parent 4610acb commit c744cbf
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,26 @@ interface Altinn {
class AltinnTilgangerImpl(
private val altinnTilgangerClient: AltinnTilgangerClient
): Altinn {
// TODO: midlertidig plugget inn i eksisterende interface, underliggende implementasjon bruker bare token
private val cache = Caffeine.newBuilder()
.expireAfterWrite(Duration.ofMinutes(10))
.maximumSize(10_000)
.buildAsync<String, Tilganger>()

override suspend fun hentTilganger(
fnr: String,
selvbetjeningsToken: String,
tjenester: Iterable<ServicecodeDefinisjon>
): Tilganger = altinnTilgangerClient.hentTilganger(selvbetjeningsToken)
): Tilganger {
val tilganger = cache.getAsync(fnr) { _ ->
altinnTilgangerClient.hentTilganger(selvbetjeningsToken)
}

if (tilganger.harFeil) {
cache.synchronous().invalidate(fnr)
}

return tilganger
}
}

class AltinnImpl(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import io.ktor.http.*
import io.ktor.network.sockets.*
import io.ktor.serialization.jackson.*
import no.nav.arbeidsgiver.notifikasjon.bruker.BrukerModel
import no.nav.arbeidsgiver.notifikasjon.bruker.BrukerModel.Tilganger
import no.nav.arbeidsgiver.notifikasjon.infrastruktur.HttpClientMetricsFeature
import no.nav.arbeidsgiver.notifikasjon.infrastruktur.Metrics
import no.nav.arbeidsgiver.notifikasjon.infrastruktur.NaisEnvironment
Expand Down Expand Up @@ -51,22 +52,27 @@ class AltinnTilgangerClient(
}
}

private val targetAudience = "${NaisEnvironment.clusterName}:fager:arbeidsgiver-altinn-tilganger"

// TODO: ikke bruk BrukerModel typen her, lag egne DTOer for denne klienten og konverter til BrukerModel i tjenesten
suspend fun hentTilganger(subjectToken: String): BrukerModel.Tilganger {
val response = httpClient.post {
suspend fun hentTilganger(subjectToken: String): Tilganger {
val dto = httpClient.post {
url {
path("/altinn-tilganger")
}
accept(ContentType.Application.Json)
bearerAuth(tokenXClient.exchange(subjectToken, "${NaisEnvironment.clusterName}:fager:arbeidsgiver-altinn-tilganger"))
}
val dto = response.body<AltinnTilgangerResponse>()

bearerAuth(
tokenXClient.exchange(
subjectToken,
targetAudience
)
)
}.body<AltinnTilgangerResponse>()

return BrukerModel.Tilganger(
return Tilganger(
harFeil = dto.isError,
tjenestetilganger = dto.orgNrTilTilganger.flatMap {
(orgNr, tilganger) -> tilganger.map { tilgang ->
tjenestetilganger = dto.orgNrTilTilganger.flatMap { (orgNr, tilganger) ->
tilganger.map { tilgang ->
val (code, edition) = tilgang.split(":").let {
it.first() to it.getOrElse(1) { "" }
}
Expand Down

0 comments on commit c744cbf

Please sign in to comment.