Skip to content

Commit b2c37b2

Browse files
authored
Merge pull request #68 from navikt/dev
[PROD][OPP-1521] Fjerne bruk av ISSO fra modia-robot-api
2 parents 85af5ca + d6219b1 commit b2c37b2

33 files changed

+212
-149
lines changed

.editorconfig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
[*.kt]
2-
disabled_rules=no-wildcard-imports,filename
2+
ktlint_disabled_rules=no-wildcard-imports,filename
33
ij_kotlin_allow_trailing_comma=true

.github/workflows/main.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ jobs:
2222
- name: Install ktlint
2323
uses: nbadal/action-ktlint-setup@v1
2424
with:
25-
ktlint_version: '0.46.1'
25+
ktlint_version: '0.47.1'
2626
- name: Ktlint
2727
run: ktlint src/**/*.kt
2828
shell: bash

.nais/preprod.yml

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ spec:
99
image: {{image}}
1010
port: 7070
1111
webproxy: true
12+
accessPolicy:
13+
inbound:
14+
rules:
15+
- application: modiapersonoversikt-api-q1
1216
liveness:
1317
path: /internal/isAlive
1418
initialDelay: 20
@@ -57,11 +61,9 @@ spec:
5761
mountPath: /var/run/secrets/nais.io/vault
5862
env:
5963
- name: IDENT_ALLOW_LIST
60-
value: "R154727,R156418,R158345,R158346,R160569,R165950,R165951,R165952,R150818,R150819,R155645,R162552,Z994123,Z990351,Z992779,Z990949,Z990467,Z991629"
64+
value: "R154727,R156418,R158345,R158346,R160569,R165950,R165951,R165952,R150818,R150819,R155645,R162552,Z994123,Z990351,Z992779,Z990949,Z990467,Z991629,Z990237,Z994673"
6165
- name: SECURITYTOKENSERVICE_URL
6266
value: "https://sts-q1.preprod.local/SecurityTokenServiceProvider/"
63-
- name: ISSO_JWKS_URL
64-
value: "https://isso-q.adeo.no/isso/oauth2/connect/jwk_uri"
6567
- name: OPPFOLGING_URL
6668
value: "https://veilarboppfolging.dev.intern.nav.no/veilarboppfolging/api"
6769
- name: OPPFOLGING_SCOPE

.nais/prod.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,6 @@ spec:
6060
value: "R154727,R156418,R158345,R158346,R160569,R165950,R165951,R165952,R150818,R150819,R155645,R162552,D159483,U143410"
6161
- name: SECURITYTOKENSERVICE_URL
6262
value: "https://sts.adeo.no/SecurityTokenServiceProvider/"
63-
- name: ISSO_JWKS_URL
64-
value: "https://isso.adeo.no/isso/oauth2/connect/jwk_uri"
6563
- name: OPPFOLGING_URL
6664
value: "https://veilarboppfolging.intern.nav.no/veilarboppfolging/api"
6765
- name: OPPFOLGING_SCOPE

src/main/kotlin/no/nav/Consumers.kt

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,15 @@ import no.nav.common.client.nom.NomClient
1212
import no.nav.common.cxf.StsConfig
1313
import no.nav.common.token_client.builder.AzureAdTokenClientBuilder
1414
import no.nav.common.token_client.client.MachineToMachineTokenClient
15+
import no.nav.common.token_client.client.OnBehalfOfTokenClient
1516
import no.nav.common.utils.NaisUtils
1617
import no.nav.tjeneste.virksomhet.person.v3.binding.PersonV3
1718
import no.nav.utils.CXFClient
1819
import no.nav.utils.bindTo
1920

2021
interface Consumers {
2122
val tokenclient: MachineToMachineTokenClient
23+
val oboTokenClient: OnBehalfOfTokenClient
2224
val oppfolgingClient: OppfolgingClient
2325
val tps: PersonV3
2426
val nom: NomClient
@@ -39,21 +41,26 @@ class ConsumersImpl(env: Env) : Consumers {
3941
.password(modiaUser.password)
4042
.build()
4143

44+
override val oboTokenClient: OnBehalfOfTokenClient = AzureAdTokenClientBuilder
45+
.builder()
46+
.withNaisDefaults()
47+
.buildOnBehalfOfTokenClient()
48+
4249
override val tokenclient: MachineToMachineTokenClient = AzureAdTokenClientBuilder
4350
.builder()
4451
.withNaisDefaults()
4552
.buildMachineToMachineTokenClient()
4653

47-
override val oppfolgingClient: OppfolgingClient = OppfolgingClient(env.oppfolgingUrl, tokenclient.bindTo(env.oppfolgingScope))
54+
override val oppfolgingClient: OppfolgingClient = OppfolgingClient(env.oppfolgingUrl, oboTokenClient.bindTo(env.oppfolgingScope))
4855
override val tps: PersonV3 = CXFClient<PersonV3>()
4956
.address(env.tpsPersonV3Url)
5057
.configureStsForSystemUser(stsConfig)
5158
.build()
5259
override val nom: NomClient = Nom(env.nomUrl, tokenclient.bindTo(env.nomScope)).client
5360
override val skrivestotteClient: SkrivestotteClient = SkrivestotteClient(env.skrivestotteUrl)
54-
override val pdlClient: PdlClient = PdlClient(env.pdlUrl, tokenclient.bindTo(env.pdlScope))
55-
override val safClient: SafClient = SafClient(env.safUrl, tokenclient.bindTo(env.safScope))
56-
override val digdirClient: DigdirClient = DigdirClient(env.digdirUrl, tokenclient.bindTo(env.digdirScope))
57-
override val utbetalingerClient: UtbetalingerClient = UtbetalingerClient(env.utbetalingSokosUrl, tokenclient.bindTo(env.utbetalingSokosScope))
58-
override val sfClient: SFClient = SFClient(env.sfUrl, tokenclient.bindTo(env.sfScope))
61+
override val pdlClient: PdlClient = PdlClient(env.pdlUrl, oboTokenClient.bindTo(env.pdlScope))
62+
override val safClient: SafClient = SafClient(env.safUrl, oboTokenClient.bindTo(env.safScope))
63+
override val digdirClient: DigdirClient = DigdirClient(env.digdirUrl, tokenclient.bindTo(env.digdirScope), oboTokenClient.bindTo(env.digdirScope))
64+
override val utbetalingerClient: UtbetalingerClient = UtbetalingerClient(env.utbetalingSokosUrl, oboTokenClient.bindTo(env.utbetalingSokosScope))
65+
override val sfClient: SFClient = SFClient(env.sfUrl, oboTokenClient.bindTo(env.sfScope))
5966
}

src/main/kotlin/no/nav/Env.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ interface Env {
3131

3232
class EnvImpl : Env {
3333
override val soapStsUrl: String = getRequiredConfig("SECURITYTOKENSERVICE_URL")
34-
override val jwksUrl: String = getRequiredConfig("ISSO_JWKS_URL")
34+
override val jwksUrl: String = getRequiredConfig("AZURE_OPENID_CONFIG_JWKS_URI")
3535
override val tpsPersonV3Url: String = getRequiredConfig("TPS_PERSONV3_URL")
3636
override val oppfolgingUrl: String = getRequiredConfig("OPPFOLGING_URL")
3737
override val oppfolgingScope: DownstreamApi = getRequiredConfig("OPPFOLGING_SCOPE").toDownstreamApi()

src/main/kotlin/no/nav/api/dialog/DialogRoutes.kt

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,44 +5,48 @@ import io.bkbn.kompendium.core.metadata.RequestInfo
55
import io.bkbn.kompendium.core.metadata.ResponseInfo
66
import io.bkbn.kompendium.core.metadata.method.PostInfo
77
import io.ktor.application.*
8-
import io.ktor.auth.*
9-
import io.ktor.auth.jwt.*
108
import io.ktor.http.*
119
import io.ktor.request.*
1210
import io.ktor.response.*
1311
import io.ktor.routing.*
1412
import no.nav.api.CommonModels
1513
import no.nav.api.dialog.DialogService.*
1614
import no.nav.plugins.securityScheme
15+
import no.nav.utils.getJWT
16+
import no.nav.utils.getJWTPrincipalSubject
1717

1818
fun Route.configureDialogRoutes(
1919
dialogService: DialogService,
2020
) {
2121
route("dialog/{fnr}") {
2222
route("sendinfomelding") {
2323
notarizedPost(Api.sendInfomelding) {
24+
val payload = call.getJWT()
2425
val fnr = requireNotNull(call.parameters["fnr"])
2526
val request: MeldingRequest = call.receive()
26-
val ident = checkNotNull(call.principal<JWTPrincipal>()?.subject) { "Could not extract subject from token" }
27+
val ident = call.getJWTPrincipalSubject()
2728
call.respond(
2829
dialogService.sendInfomelding(
2930
fnr,
3031
request,
31-
ident
32+
ident,
33+
payload
3234
)
3335
)
3436
}
3537
}
3638
route("sendsporsmal") {
3739
notarizedPost(Api.sendSporsmal) {
40+
val payload = call.getJWT()
3841
val fnr = requireNotNull(call.parameters["fnr"])
3942
val request: MeldingRequest = call.receive()
40-
val ident = checkNotNull(call.principal<JWTPrincipal>()?.subject) { "Could not extract subject from token" }
43+
val ident = call.getJWTPrincipalSubject()
4144
call.respond(
4245
dialogService.sendSporsmal(
4346
fnr,
4447
request,
45-
ident
48+
ident,
49+
payload
4650
)
4751
)
4852
}

src/main/kotlin/no/nav/api/dialog/DialogService.kt

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -42,48 +42,48 @@ class DialogService(
4242
val kjedeId: String,
4343
)
4444

45-
suspend fun sendSporsmal(fnr: String, request: MeldingRequest, ident: String): Response {
46-
val sfMeldingRequest = lagSfMeldingRequest(fnr, request)
47-
val sak = safService.hentBrukersSaker(fnr).firstOrNull { it.tema?.name == request.tema }
48-
val nyHenvendelse = sfService.sendSporsmal(sfMeldingRequest, ident)
45+
suspend fun sendSporsmal(fnr: String, request: MeldingRequest, ident: String, token: String): Response {
46+
val sfMeldingRequest = lagSfMeldingRequest(fnr, request, token)
47+
val sak = safService.hentBrukersSaker(fnr, token).firstOrNull { it.tema?.name == request.tema }
48+
val nyHenvendelse = sfService.sendSporsmal(sfMeldingRequest, ident, token)
4949
val journalforRequest = JournalforRequest(
5050
journalforendeEnhet = request.enhet,
5151
fagsakId = sak?.fagsakId,
5252
fagsaksystem = if (sak?.fagsakId != null) sak.fagsaksystem else null,
5353
temakode = request.tema,
5454
kjedeId = nyHenvendelse.kjedeId
5555
)
56-
sfService.journalforMelding(journalforRequest, ident)
56+
sfService.journalforMelding(journalforRequest, ident, token)
5757
return Response(nyHenvendelse.kjedeId)
5858
}
5959

60-
suspend fun sendInfomelding(fnr: String, request: MeldingRequest, ident: String): Response {
61-
val sfMeldingRequest = lagSfMeldingRequest(fnr, request)
62-
val sak = safService.hentBrukersSaker(fnr).firstOrNull { it.tema?.name == request.tema }
63-
val nyHenvendelse = sfService.sendInfomelding(sfMeldingRequest, ident)
60+
suspend fun sendInfomelding(fnr: String, request: MeldingRequest, ident: String, token: String): Response {
61+
val sfMeldingRequest = lagSfMeldingRequest(fnr, request, token)
62+
val sak = safService.hentBrukersSaker(fnr, token).firstOrNull { it.tema?.name == request.tema }
63+
val nyHenvendelse = sfService.sendInfomelding(sfMeldingRequest, ident, token)
6464
val journalforRequest = JournalforRequest(
6565
journalforendeEnhet = request.enhet,
6666
fagsakId = sak?.fagsakId,
6767
fagsaksystem = if (sak?.fagsakId != null) sak.fagsaksystem else null,
6868
temakode = request.tema,
6969
kjedeId = nyHenvendelse.kjedeId
7070
)
71-
sfService.lukkTraad(nyHenvendelse.kjedeId)
72-
sfService.journalforMelding(journalforRequest, ident)
71+
sfService.lukkTraad(nyHenvendelse.kjedeId, token)
72+
sfService.journalforMelding(journalforRequest, ident, token)
7373
return Response(nyHenvendelse.kjedeId)
7474
}
7575

76-
private suspend fun lagSfMeldingRequest(fnr: String, request: MeldingRequest) = SfMeldingRequest(
77-
aktorId = pdlService.hentAktorid(fnr),
76+
private suspend fun lagSfMeldingRequest(fnr: String, request: MeldingRequest, token: String) = SfMeldingRequest(
77+
aktorId = pdlService.hentAktorid(fnr, token),
7878
temagruppe = hentTemagruppeForTema(request.tema),
7979
enhet = request.enhet,
80-
fritekst = parseFritekst(fnr, request.tekst),
80+
fritekst = parseFritekst(fnr, request.tekst, token),
8181
tema = request.tema,
8282
tildelMeg = false
8383
)
8484

85-
suspend fun parseFritekst(fnr: String, tekst: String): String {
86-
val navn = pdlService.hentNavn(fnr)
85+
suspend fun parseFritekst(fnr: String, tekst: String, token: String): String {
86+
val navn = pdlService.hentNavn(fnr, token)
8787
return tekst
8888
.replace("[bruker.fornavn]", navn.fornavn)
8989
.replace("[bruker.etternavn]", navn.etternavn)

src/main/kotlin/no/nav/api/dialog/saf/SafClient.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import java.net.URL
1313

1414
class SafClient(
1515
private val safUrl: String,
16-
private val tokenclient: BoundedMachineToMachineTokenClient,
16+
private val oboTokenProvider: BoundedOnBehalfOfTokenClient,
1717
httpEngine: HttpClientEngine = OkHttp.create(),
1818
) {
1919
private val graphqlClient = LoggingGraphQLKtorClient(
@@ -23,7 +23,7 @@ class SafClient(
2323
httpClient = HttpClient(httpEngine)
2424
)
2525

26-
suspend fun hentBrukersSaker(fnr: String): GraphQLClientResponse<HentBrukerssaker.Result> {
26+
suspend fun hentBrukersSaker(fnr: String, token: String): GraphQLClientResponse<HentBrukerssaker.Result> {
2727
return externalServiceCall {
2828
graphqlClient.execute(
2929
request = HentBrukerssaker(
@@ -35,8 +35,8 @@ class SafClient(
3535
)
3636
),
3737
requestCustomizer = {
38-
val token = tokenclient.createMachineToMachineToken()
39-
header("Authorization", "Bearer $token")
38+
val oboToken = oboTokenProvider.exchangeOnBehalfOfToken(token)
39+
header("Authorization", "Bearer $oboToken")
4040
header("X-Correlation-ID", getCallId())
4141
}
4242
)

src/main/kotlin/no/nav/api/dialog/saf/SafService.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ import no.nav.api.generated.saf.hentbrukerssaker.Sak
55
class SafService(
66
private val safClient: SafClient,
77
) {
8-
suspend fun hentBrukersSaker(fnr: String): List<Sak> {
8+
suspend fun hentBrukersSaker(fnr: String, token: String): List<Sak> {
99
return safClient
10-
.hentBrukersSaker(fnr)
10+
.hentBrukersSaker(fnr, token)
1111
.data
1212
?.saker
1313
?.filterNotNull()

0 commit comments

Comments
 (0)