From b35f7ef7778ac3bb64e2b82f9e194f518f096e06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Magnus=20S=C3=A6lensminde?= <41949947+magnusae@users.noreply.github.com> Date: Thu, 23 Jan 2025 12:36:24 +0100 Subject: [PATCH] Hent Altinn-tilganger via Fager sitt API (#832) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bakgrunn Vi ønsker å gå over til Fager sitt API for henting av Altinn-tilganger for å gjøre fremtidig flytting av tilganger fra Altinn 2 til Altinn 3 enklere. (Fager sitt API henter og syr sammen tilganger fra både Altinn 2 og Altinn 3.) Løsning Bruk ny versjon av AltinnClient (Altinn3M2MClient), som henter rettigheter fra Fager sitt API ved hjelp av M2M-/Azure-token. Commits: * Bytt til Fager sitt API for å hente Altinn-tilganger * Legg til manglende konfig for å få Fager sitt Altinn-API til å virke pluss fiks integrasjonstester * Rens vekk gammel Maskinporten-moro som vi ikke trenger lenger * Fjern altinn fra external hosts fordi vi ikke lenger gjør kall direkte til Altinn * Bruk snapshotversjon av aller nyeste altinnklient * Deploy im altinn for å hente ny snapshotversjon av altinnclient med logging som forhåpentligvis fungerer * Deploy (igjen) for å forsøke å få med logging i dev * Oppgrader til nyeste AltinnClient --- apps/altinn/build.gradle.kts | 4 -- apps/altinn/gradle.properties | 4 +- .../inntektsmelding/altinn/AltinnRiver.kt | 11 ++---- .../inntektsmelding/altinn/App.kt | 35 ++++------------- .../inntektsmelding/altinn/Env.kt | 20 +++++----- .../inntektsmelding/altinn/TilgangRiver.kt | 8 ++-- .../inntektsmelding/altinn/AltinnAppTest.kt | 20 ++-------- .../inntektsmelding/altinn/AltinnRiverTest.kt | 19 ++++------ .../inntektsmelding/altinn/Mock.kt | 10 +---- .../altinn/TilgangRiverTest.kt | 16 ++++---- .../integrasjonstest/AktiveOrgnrServiceIT.kt | 38 +++---------------- .../integrasjonstest/TilgangskontrollIT.kt | 4 +- .../integrasjonstest/utils/EndToEndTest.kt | 4 +- config/altinn/dev-gcp.yml | 20 ++++------ config/altinn/prod-gcp.yml | 19 ++++------ 15 files changed, 73 insertions(+), 159 deletions(-) diff --git a/apps/altinn/build.gradle.kts b/apps/altinn/build.gradle.kts index a4b9b482ce..a7af7a84a3 100644 --- a/apps/altinn/build.gradle.kts +++ b/apps/altinn/build.gradle.kts @@ -1,11 +1,7 @@ dependencies { val altinnClientVersion: String by project - val maskinportenClientVersion: String by project val mockwebserverVersion: String by project - val nimbusJoseJwtVersion: String by project implementation("no.nav.helsearbeidsgiver:altinn-client:$altinnClientVersion") - implementation("no.nav.helsearbeidsgiver:maskinporten-client:$maskinportenClientVersion") - testImplementation("com.nimbusds:nimbus-jose-jwt:$nimbusJoseJwtVersion") testImplementation("com.squareup.okhttp3:mockwebserver:$mockwebserverVersion") } diff --git a/apps/altinn/gradle.properties b/apps/altinn/gradle.properties index f008fcab99..b05803f559 100644 --- a/apps/altinn/gradle.properties +++ b/apps/altinn/gradle.properties @@ -1,4 +1,2 @@ -altinnClientVersion=0.4.0 -maskinportenClientVersion=0.1.9 +altinnClientVersion=1.0.0 mockwebserverVersion=5.0.0-alpha.14 -nimbusJoseJwtVersion=9.47 diff --git a/apps/altinn/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/altinn/AltinnRiver.kt b/apps/altinn/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/altinn/AltinnRiver.kt index 3d897169fc..dfb2e59fc1 100644 --- a/apps/altinn/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/altinn/AltinnRiver.kt +++ b/apps/altinn/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/altinn/AltinnRiver.kt @@ -2,7 +2,7 @@ package no.nav.helsearbeidsgiver.inntektsmelding.altinn import kotlinx.serialization.builtins.serializer import kotlinx.serialization.json.JsonElement -import no.nav.helsearbeidsgiver.altinn.AltinnClient +import no.nav.helsearbeidsgiver.altinn.Altinn3M2MClient import no.nav.helsearbeidsgiver.felles.BehovType import no.nav.helsearbeidsgiver.felles.EventName import no.nav.helsearbeidsgiver.felles.Key @@ -33,7 +33,7 @@ data class Melding( ) class AltinnRiver( - private val altinnClient: AltinnClient, + private val altinnClient: Altinn3M2MClient, ) : ObjectRiver() { private val logger = logger() private val sikkerLogger = sikkerLogger() @@ -58,11 +58,8 @@ class AltinnRiver( override fun Melding.haandter(json: Map): Map { val rettigheterForenklet = - Metrics.altinnRequest.recordTime(altinnClient::hentRettighetOrganisasjoner) { - altinnClient - .hentRettighetOrganisasjoner(fnr.verdi) - .mapNotNull { it.orgnr } - .toSet() + Metrics.altinnRequest.recordTime(altinnClient::hentTilganger) { + altinnClient.hentTilganger(fnr.verdi) } return mapOf( diff --git a/apps/altinn/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/altinn/App.kt b/apps/altinn/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/altinn/App.kt index 1d7fce4215..e147505e5b 100644 --- a/apps/altinn/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/altinn/App.kt +++ b/apps/altinn/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/altinn/App.kt @@ -1,12 +1,10 @@ package no.nav.helsearbeidsgiver.inntektsmelding.altinn import com.github.navikt.tbd_libs.rapids_and_rivers_api.RapidsConnection -import kotlinx.coroutines.runBlocking import no.nav.helse.rapids_rivers.RapidApplication -import no.nav.helsearbeidsgiver.altinn.AltinnClient +import no.nav.helsearbeidsgiver.altinn.Altinn3M2MClient import no.nav.helsearbeidsgiver.altinn.CacheConfig -import no.nav.helsearbeidsgiver.maskinporten.MaskinportenClient -import no.nav.helsearbeidsgiver.maskinporten.MaskinportenClientConfig +import no.nav.helsearbeidsgiver.tokenprovider.oauth2ClientCredentialsTokenGetter import no.nav.helsearbeidsgiver.utils.log.logger import kotlin.time.Duration.Companion.minutes @@ -19,7 +17,7 @@ fun main() { .start() } -fun RapidsConnection.createAltinn(altinnClient: AltinnClient): RapidsConnection = +fun RapidsConnection.createAltinn(altinnClient: Altinn3M2MClient): RapidsConnection = also { logger.info("Starter ${TilgangRiver::class.simpleName}...") TilgangRiver(altinnClient).connect(this) @@ -28,29 +26,10 @@ fun RapidsConnection.createAltinn(altinnClient: AltinnClient): RapidsConnection AltinnRiver(altinnClient).connect(this) } -private fun createAltinnClient(): AltinnClient { - val maskinportenClient = createMaskinportenClient() - return AltinnClient( - url = Env.url, +private fun createAltinnClient(): Altinn3M2MClient = + Altinn3M2MClient( + baseUrl = Env.altinnTilgangerBaseUrl, serviceCode = Env.serviceCode, - getToken = maskinportenClient::getToken, - altinnApiKey = Env.altinnApiKey, + getToken = oauth2ClientCredentialsTokenGetter(Env.oauth2Environment), cacheConfig = CacheConfig(60.minutes, 100), ) -} - -private fun createMaskinportenClient(): MaskinportenClient = - MaskinportenClient( - MaskinportenClientConfig( - scope = Env.Maskinporten.altinnScope, - endpoint = Env.Maskinporten.endpoint, - clientJwk = Env.Maskinporten.clientJwk, - issuer = Env.Maskinporten.issuer, - clientId = Env.Maskinporten.clientId, - ), - ) - -private fun MaskinportenClient.getToken() = - runBlocking { - fetchNewAccessToken().tokenResponse.accessToken - } diff --git a/apps/altinn/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/altinn/Env.kt b/apps/altinn/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/altinn/Env.kt index a6701978a2..3a04747b6d 100644 --- a/apps/altinn/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/altinn/Env.kt +++ b/apps/altinn/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/altinn/Env.kt @@ -1,17 +1,19 @@ package no.nav.helsearbeidsgiver.inntektsmelding.altinn import no.nav.helsearbeidsgiver.felles.utils.fromEnv +import no.nav.helsearbeidsgiver.tokenprovider.OAuth2Environment object Env { - val url = "ALTINN_URL".fromEnv() val serviceCode = "ALTINN_SERVICE_CODE".fromEnv() - val altinnApiKey = "ALTINN_API_KEY".fromEnv() + val altinnTilgangerBaseUrl = "ALTINN_TILGANGER_BASE_URL".fromEnv() - object Maskinporten { - val endpoint: String = "MASKINPORTEN_TOKEN_ENDPOINT".fromEnv() - val issuer: String = "MASKINPORTEN_ISSUER".fromEnv() - val clientJwk: String = "MASKINPORTEN_CLIENT_JWK".fromEnv() - val clientId: String = "MASKINPORTEN_CLIENT_ID".fromEnv() - val altinnScope: String = "ALTINN_SCOPE".fromEnv() - } + val oauth2Environment = + OAuth2Environment( + scope = "ALTINN_TILGANGER_SCOPE".fromEnv(), + wellKnownUrl = "AZURE_APP_WELL_KNOWN_URL".fromEnv(), + tokenEndpointUrl = "AZURE_OPENID_CONFIG_TOKEN_ENDPOINT".fromEnv(), + clientId = "AZURE_APP_CLIENT_ID".fromEnv(), + clientSecret = "AZURE_APP_CLIENT_SECRET".fromEnv(), + clientJwk = "AZURE_APP_JWK".fromEnv(), + ) } diff --git a/apps/altinn/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/altinn/TilgangRiver.kt b/apps/altinn/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/altinn/TilgangRiver.kt index d6525c0d06..68f7bd5faa 100644 --- a/apps/altinn/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/altinn/TilgangRiver.kt +++ b/apps/altinn/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/altinn/TilgangRiver.kt @@ -1,7 +1,7 @@ package no.nav.helsearbeidsgiver.inntektsmelding.altinn import kotlinx.serialization.json.JsonElement -import no.nav.helsearbeidsgiver.altinn.AltinnClient +import no.nav.helsearbeidsgiver.altinn.Altinn3M2MClient import no.nav.helsearbeidsgiver.felles.BehovType import no.nav.helsearbeidsgiver.felles.EventName import no.nav.helsearbeidsgiver.felles.Key @@ -33,7 +33,7 @@ data class TilgangMelding( ) class TilgangRiver( - private val altinnClient: AltinnClient, + private val altinnClient: Altinn3M2MClient, ) : ObjectRiver() { private val logger = logger() private val sikkerLogger = sikkerLogger() @@ -58,8 +58,8 @@ class TilgangRiver( override fun TilgangMelding.haandter(json: Map): Map { val harTilgang = - Metrics.altinnRequest.recordTime(altinnClient::harRettighetForOrganisasjon) { - altinnClient.harRettighetForOrganisasjon(fnr.verdi, orgnr.verdi) + Metrics.altinnRequest.recordTime(altinnClient::harTilgangTilOrganisasjon) { + altinnClient.harTilgangTilOrganisasjon(fnr = fnr.verdi, orgnr = orgnr.verdi) } val tilgang = if (harTilgang) Tilgang.HAR_TILGANG else Tilgang.IKKE_TILGANG diff --git a/apps/altinn/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/altinn/AltinnAppTest.kt b/apps/altinn/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/altinn/AltinnAppTest.kt index b4995497cf..b821a3c08d 100644 --- a/apps/altinn/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/altinn/AltinnAppTest.kt +++ b/apps/altinn/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/altinn/AltinnAppTest.kt @@ -1,7 +1,6 @@ package no.nav.helsearbeidsgiver.inntektsmelding.altinn import com.github.navikt.tbd_libs.rapids_and_rivers.test_support.TestRapid -import com.nimbusds.jose.jwk.gen.RSAKeyGenerator import io.kotest.core.spec.style.FunSpec import io.kotest.matchers.shouldBe import io.kotest.matchers.string.shouldStartWith @@ -10,14 +9,13 @@ import io.mockk.every import io.mockk.mockkObject import io.mockk.mockkStatic import io.mockk.unmockkStatic +import kotlinx.serialization.builtins.serializer import no.nav.helse.rapids_rivers.RapidApplication -import no.nav.helsearbeidsgiver.altinn.AltinnOrganisasjon import no.nav.helsearbeidsgiver.felles.test.rapidsrivers.sendJson import no.nav.helsearbeidsgiver.felles.utils.fromEnv import no.nav.helsearbeidsgiver.inntektsmelding.altinn.Mock.altinnOrganisasjoner import no.nav.helsearbeidsgiver.inntektsmelding.altinn.Mock.innkommendeMelding import no.nav.helsearbeidsgiver.inntektsmelding.altinn.Mock.toMap -import no.nav.helsearbeidsgiver.maskinporten.TokenResponse import no.nav.helsearbeidsgiver.utils.json.serializer.set import no.nav.helsearbeidsgiver.utils.json.toJson import okhttp3.mockwebserver.MockResponse @@ -44,14 +42,11 @@ class AltinnAppTest : mockkObject(RapidApplication) every { RapidApplication.create(any()) } returns testRapid - val maskinportenToken = TokenResponse("test_token", "Bearer", 3600, "test:test1") - val tokenResponse = maskinportenToken.toJson(TokenResponse.serializer()).toString() server.enqueue( MockResponse() - .setBody(tokenResponse) .addHeader("Content-Type", "application/json"), ) - val altinnResponse = altinnOrganisasjoner.toJson(AltinnOrganisasjon.serializer().set()).toString() + val altinnResponse = altinnOrganisasjoner.toJson(String.serializer().set()).toString() val mockResponse = MockResponse() .setBody(altinnResponse) @@ -79,14 +74,7 @@ class AltinnAppTest : private fun mockEnv(server: MockWebServer) { mockkStatic("no.nav.helsearbeidsgiver.felles.utils.EnvUtilsKt") - every { "ALTINN_URL".fromEnv() } returns server.url("/altinn").toString() + every { "ALTINN_TILGANGER_BASE_URL".fromEnv() } returns server.url("/altinn").toString() every { "ALTINN_SERVICE_CODE".fromEnv() } returns "4936" - every { "MASKINPORTEN_TOKEN_ENDPOINT".fromEnv() } returns server.url("/token").toString() - every { "MASKINPORTEN_ISSUER".fromEnv() } returns "https://test.test.no/" - every { "MASKINPORTEN_CLIENT_JWK".fromEnv() } returns generateJWK() - every { "MASKINPORTEN_CLIENT_ID".fromEnv() } returns "TEST_CLIENT_ID" - every { "ALTINN_SCOPE".fromEnv() } returns "test:test/test" - every { "ALTINN_API_KEY".fromEnv() } returns "mocked_value" + every { "ALTINN_TILGANGER_SCOPE".fromEnv() } returns "test:test/test" } - -private fun generateJWK() = RSAKeyGenerator(2048).keyID("test-key-id").generate().toString() diff --git a/apps/altinn/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/altinn/AltinnRiverTest.kt b/apps/altinn/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/altinn/AltinnRiverTest.kt index 44c6655060..c8ca61cd76 100644 --- a/apps/altinn/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/altinn/AltinnRiverTest.kt +++ b/apps/altinn/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/altinn/AltinnRiverTest.kt @@ -11,7 +11,7 @@ import io.mockk.coVerify import io.mockk.coVerifySequence import io.mockk.mockk import kotlinx.serialization.builtins.serializer -import no.nav.helsearbeidsgiver.altinn.AltinnClient +import no.nav.helsearbeidsgiver.altinn.Altinn3M2MClient import no.nav.helsearbeidsgiver.felles.BehovType import no.nav.helsearbeidsgiver.felles.Key import no.nav.helsearbeidsgiver.felles.json.toJson @@ -27,7 +27,7 @@ class AltinnRiverTest : FunSpec({ val testRapid = TestRapid() - val mockAltinnClient = mockk(relaxed = true) + val mockAltinnClient = mockk(relaxed = true) AltinnRiver(mockAltinnClient).connect(testRapid) @@ -39,16 +39,13 @@ class AltinnRiverTest : test("henter organisasjonsrettigheter med id fra behov") { val innkommendeMelding = Mock.innkommendeMelding() - coEvery { mockAltinnClient.hentRettighetOrganisasjoner(any()) } returns Mock.altinnOrganisasjoner + coEvery { mockAltinnClient.hentTilganger(any()) } returns Mock.altinnOrganisasjoner testRapid.sendJson(innkommendeMelding.toMap()) testRapid.inspektør.size shouldBeExactly 1 - val altinnOrgnr = - Mock.altinnOrganisasjoner - .mapNotNull { it.orgnr } - .toSet() + val altinnOrgnr = Mock.altinnOrganisasjoner testRapid.firstMessage().toMap() shouldContainExactly mapOf( @@ -62,7 +59,7 @@ class AltinnRiverTest : ) coVerifySequence { - mockAltinnClient.hentRettighetOrganisasjoner(innkommendeMelding.fnr.verdi) + mockAltinnClient.hentTilganger(innkommendeMelding.fnr.verdi) } } @@ -78,7 +75,7 @@ class AltinnRiverTest : utloesendeMelding = innkommendeJsonMap, ) - coEvery { mockAltinnClient.hentRettighetOrganisasjoner(any()) } throws NullPointerException() + coEvery { mockAltinnClient.hentTilganger(any()) } throws NullPointerException() testRapid.sendJson(innkommendeJsonMap) @@ -87,7 +84,7 @@ class AltinnRiverTest : testRapid.firstMessage().toMap() shouldContainExactly forventetFail.tilMelding() coVerifySequence { - mockAltinnClient.hentRettighetOrganisasjoner(innkommendeMelding.fnr.verdi) + mockAltinnClient.hentTilganger(innkommendeMelding.fnr.verdi) } } @@ -109,7 +106,7 @@ class AltinnRiverTest : testRapid.inspektør.size shouldBeExactly 0 coVerify(exactly = 0) { - mockAltinnClient.hentRettighetOrganisasjoner(any()) + mockAltinnClient.hentTilganger(any()) } } } diff --git a/apps/altinn/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/altinn/Mock.kt b/apps/altinn/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/altinn/Mock.kt index 3e65927867..f0d58a0e00 100644 --- a/apps/altinn/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/altinn/Mock.kt +++ b/apps/altinn/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/altinn/Mock.kt @@ -1,7 +1,6 @@ package no.nav.helsearbeidsgiver.inntektsmelding.altinn import kotlinx.serialization.json.JsonElement -import no.nav.helsearbeidsgiver.altinn.AltinnOrganisasjon import no.nav.helsearbeidsgiver.felles.BehovType import no.nav.helsearbeidsgiver.felles.EventName import no.nav.helsearbeidsgiver.felles.Key @@ -11,6 +10,7 @@ import no.nav.helsearbeidsgiver.felles.test.mock.mockFail import no.nav.helsearbeidsgiver.utils.json.toJson import no.nav.helsearbeidsgiver.utils.test.wrapper.genererGyldig import no.nav.helsearbeidsgiver.utils.wrapper.Fnr +import no.nav.helsearbeidsgiver.utils.wrapper.Orgnr import java.util.UUID object Mock { @@ -42,11 +42,5 @@ object Mock { val fail = mockFail("One does not simply walk into Mordor.", EventName.AKTIVE_ORGNR_REQUESTED) - val altinnOrganisasjoner = - setOf( - AltinnOrganisasjon( - navn = "Pippin's Breakfast & Breakfast", - type = "gluttonous", - ), - ) + val altinnOrganisasjoner = setOf(Orgnr.genererGyldig().verdi) } diff --git a/apps/altinn/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/altinn/TilgangRiverTest.kt b/apps/altinn/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/altinn/TilgangRiverTest.kt index dd83de07ab..b5ac5fc8f4 100644 --- a/apps/altinn/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/altinn/TilgangRiverTest.kt +++ b/apps/altinn/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/altinn/TilgangRiverTest.kt @@ -12,7 +12,7 @@ import io.mockk.coVerify import io.mockk.coVerifySequence import io.mockk.mockk import kotlinx.serialization.json.JsonElement -import no.nav.helsearbeidsgiver.altinn.AltinnClient +import no.nav.helsearbeidsgiver.altinn.Altinn3M2MClient import no.nav.helsearbeidsgiver.felles.BehovType import no.nav.helsearbeidsgiver.felles.EventName import no.nav.helsearbeidsgiver.felles.Key @@ -33,9 +33,9 @@ import java.util.UUID class TilgangRiverTest : FunSpec({ val testRapid = TestRapid() - val mockAltinnClient = mockk() + val mockAltinn3M2MClient = mockk() - TilgangRiver(mockAltinnClient).connect(testRapid) + TilgangRiver(mockAltinn3M2MClient).connect(testRapid) beforeTest { testRapid.reset() @@ -49,7 +49,7 @@ class TilgangRiverTest : "ikke tilgang" to row(false, Tilgang.IKKE_TILGANG), ), ) { (altinnSvar, forventetTilgang) -> - coEvery { mockAltinnClient.harRettighetForOrganisasjon(any(), any()) } returns altinnSvar + coEvery { mockAltinn3M2MClient.harTilgangTilOrganisasjon(any(), any()) } returns altinnSvar val innkommendeMelding = MockTilgang.innkommendeMelding() @@ -68,13 +68,13 @@ class TilgangRiverTest : ) coVerifySequence { - mockAltinnClient.harRettighetForOrganisasjon(innkommendeMelding.fnr.verdi, innkommendeMelding.orgnr.verdi) + mockAltinn3M2MClient.harTilgangTilOrganisasjon(innkommendeMelding.fnr.verdi, innkommendeMelding.orgnr.verdi) } } } test("håndterer feil") { - coEvery { mockAltinnClient.harRettighetForOrganisasjon(any(), any()) } throws NullPointerException() + coEvery { mockAltinn3M2MClient.harTilgangTilOrganisasjon(any(), any()) } throws NullPointerException() val innkommendeMelding = MockTilgang.innkommendeMelding() @@ -92,7 +92,7 @@ class TilgangRiverTest : testRapid.firstMessage().toMap() shouldContainExactly forventetFail.tilMelding() coVerifySequence { - mockAltinnClient.harRettighetForOrganisasjon(innkommendeMelding.fnr.verdi, innkommendeMelding.orgnr.verdi) + mockAltinn3M2MClient.harTilgangTilOrganisasjon(innkommendeMelding.fnr.verdi, innkommendeMelding.orgnr.verdi) } } @@ -114,7 +114,7 @@ class TilgangRiverTest : testRapid.inspektør.size shouldBeExactly 0 coVerify(exactly = 0) { - mockAltinnClient.harRettighetForOrganisasjon(any(), any()) + mockAltinn3M2MClient.harTilgangTilOrganisasjon(any(), any()) } } } diff --git a/apps/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/AktiveOrgnrServiceIT.kt b/apps/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/AktiveOrgnrServiceIT.kt index 924d934ae0..a9821ed945 100644 --- a/apps/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/AktiveOrgnrServiceIT.kt +++ b/apps/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/AktiveOrgnrServiceIT.kt @@ -14,7 +14,6 @@ import no.nav.helsearbeidsgiver.aareg.Ansettelsesperiode import no.nav.helsearbeidsgiver.aareg.Arbeidsgiver import no.nav.helsearbeidsgiver.aareg.Opplysningspliktig import no.nav.helsearbeidsgiver.aareg.Periode -import no.nav.helsearbeidsgiver.altinn.AltinnOrganisasjon import no.nav.helsearbeidsgiver.brreg.Virksomhet import no.nav.helsearbeidsgiver.felles.BehovType import no.nav.helsearbeidsgiver.felles.EventName @@ -60,7 +59,7 @@ class AktiveOrgnrServiceIT : EndToEndTest() { val transaksjonId = UUID.randomUUID() coEvery { aaregClient.hentArbeidsforhold(any(), any()) } returns Mock.arbeidsforholdListe - coEvery { altinnClient.hentRettighetOrganisasjoner(any()) } returns Mock.altinnOrganisasjonSet + coEvery { altinnClient.hentTilganger(any()) } returns Mock.altinnOrganisasjonSet coEvery { brregClient.hentVirksomheter(any()) } returns listOf(Virksomhet(organisasjonsnummer = "810007842", navn = "ANSTENDIG PIGGSVIN BARNEHAGE")) coEvery { pdlKlient.personBolk(any()) } returns Mock.personer @@ -107,7 +106,7 @@ class AktiveOrgnrServiceIT : EndToEndTest() { .firstAsMap() .also { melding -> val data = melding[Key.DATA].shouldNotBeNull().toMap() - Key.ORG_RETTIGHETER.les(String.serializer().set(), data) shouldContainExactly Mock.altinnOrganisasjonSet.mapNotNull { it.orgnr }.toSet() + Key.ORG_RETTIGHETER.les(String.serializer().set(), data) shouldContainExactly Mock.altinnOrganisasjonSet } aktiveOrgnrMeldinger @@ -141,7 +140,7 @@ class AktiveOrgnrServiceIT : EndToEndTest() { val transaksjonId = UUID.randomUUID() coEvery { aaregClient.hentArbeidsforhold(any(), any()) } returns emptyList() - coEvery { altinnClient.hentRettighetOrganisasjoner(any()) } returns Mock.altinnOrganisasjonSet + coEvery { altinnClient.hentTilganger(any()) } returns Mock.altinnOrganisasjonSet coEvery { brregClient.hentVirksomheter(any()) } returns listOf(Virksomhet(organisasjonsnummer = "810007842", navn = "ANSTENDIG PIGGSVIN BARNEHAGE")) coEvery { pdlKlient.personBolk(any()) } returns Mock.personer @@ -188,7 +187,7 @@ class AktiveOrgnrServiceIT : EndToEndTest() { .firstAsMap() .also { melding -> val data = melding[Key.DATA].shouldNotBeNull().toMap() - Key.ORG_RETTIGHETER.les(String.serializer().set(), data) shouldContainExactly Mock.altinnOrganisasjonSet.mapNotNull { it.orgnr }.toSet() + Key.ORG_RETTIGHETER.les(String.serializer().set(), data) shouldContainExactly Mock.altinnOrganisasjonSet } aktiveOrgnrMeldinger @@ -205,7 +204,7 @@ class AktiveOrgnrServiceIT : EndToEndTest() { val transaksjonId = UUID.randomUUID() coEvery { aaregClient.hentArbeidsforhold(any(), any()) } returns Mock.arbeidsforholdListe - coEvery { altinnClient.hentRettighetOrganisasjoner(any()) } returns Mock.altinnOrganisasjonSet + coEvery { altinnClient.hentTilganger(any()) } returns Mock.altinnOrganisasjonSet coEvery { brregClient.hentVirksomheter(any()) } returns listOf(Virksomhet(organisasjonsnummer = "810007842", navn = "ANSTENDIG PIGGSVIN BARNEHAGE")) coEvery { pdlKlient.personBolk(any()) } throws IllegalArgumentException("Ingen folk å finne her!") @@ -312,32 +311,7 @@ class AktiveOrgnrServiceIT : EndToEndTest() { ), ) - val altinnOrganisasjonSet = - setOf( - AltinnOrganisasjon( - navn = "ANSTENDIG PIGGSVIN BYDEL", - type = "organisasjon", - orgnrHovedenhet = "810007702", - ), - AltinnOrganisasjon( - navn = "ANSTENDIG PIGGSVIN BARNEHAGE", - type = "organisasjon", - orgnr = "810007842", - orgnrHovedenhet = "810007702", - ), - AltinnOrganisasjon( - navn = "ANSTENDIG PIGGSVIN BRANNVESEN", - type = "organisasjon", - orgnr = "810008032", - orgnrHovedenhet = "810007702", - ), - AltinnOrganisasjon( - navn = "ANSTENDIG PIGGSVIN SYKEHJEM", - type = "organisasjon", - orgnr = "810007982", - orgnrHovedenhet = "810007702", - ), - ) + val altinnOrganisasjonSet = setOf("810007842", "810008032", "810007982") val underenheter = setOf("810007842") diff --git a/apps/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/TilgangskontrollIT.kt b/apps/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/TilgangskontrollIT.kt index e1327b3109..bbaa0c23d6 100644 --- a/apps/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/TilgangskontrollIT.kt +++ b/apps/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/TilgangskontrollIT.kt @@ -29,11 +29,11 @@ class TilgangskontrollIT : EndToEndTest() { clearAllMocks() coEvery { - altinnClient.harRettighetForOrganisasjon(Mock.innloggetFnr.verdi, Mock.orgnrMedTilgang.verdi) + altinnClient.harTilgangTilOrganisasjon(fnr = Mock.innloggetFnr.verdi, orgnr = Mock.orgnrMedTilgang.verdi) } returns true coEvery { - altinnClient.harRettighetForOrganisasjon(Mock.innloggetFnr.verdi, Mock.orgnrUtenTilgang.verdi) + altinnClient.harTilgangTilOrganisasjon(fnr = Mock.innloggetFnr.verdi, orgnr = Mock.orgnrUtenTilgang.verdi) } returns false } diff --git a/apps/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/utils/EndToEndTest.kt b/apps/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/utils/EndToEndTest.kt index b3ec111b6c..1e3ed1be2f 100644 --- a/apps/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/utils/EndToEndTest.kt +++ b/apps/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/utils/EndToEndTest.kt @@ -14,7 +14,7 @@ import kotlinx.serialization.json.JsonElement import kotlinx.serialization.json.JsonObject import no.nav.hag.utils.bakgrunnsjobb.PostgresBakgrunnsjobbRepository import no.nav.helsearbeidsgiver.aareg.AaregClient -import no.nav.helsearbeidsgiver.altinn.AltinnClient +import no.nav.helsearbeidsgiver.altinn.Altinn3M2MClient import no.nav.helsearbeidsgiver.arbeidsgivernotifikasjon.ArbeidsgiverNotifikasjonKlient import no.nav.helsearbeidsgiver.brreg.BrregClient import no.nav.helsearbeidsgiver.brreg.Virksomhet @@ -169,7 +169,7 @@ abstract class EndToEndTest : ContainerTest() { val bakgrunnsjobbRepository by lazy { PostgresBakgrunnsjobbRepository(bakgrunnsjobbDatabase.dataSource) } - val altinnClient = mockk() + val altinnClient = mockk() val pdlKlient = mockk() val priProducer = mockk() val spinnKlient = mockk() diff --git a/config/altinn/dev-gcp.yml b/config/altinn/dev-gcp.yml index 10bcb507b5..0819a2f44d 100644 --- a/config/altinn/dev-gcp.yml +++ b/config/altinn/dev-gcp.yml @@ -3,19 +3,13 @@ azure: enabled: true replicasMin: 2 replicasMax: 2 -ingress: https://helsearbeidsgiver-im-altinn.intern.dev.nav.no -envFrom: - - type: secret - name: altinn-api-gw-keys +apps: + - name: arbeidsgiver-altinn-tilganger + namespace: fager env: - - name: ALTINN_URL - value: https://tt02.altinn.no/api/serviceowner - name: ALTINN_SERVICE_CODE value: 4936 - - name: ALTINN_SCOPE - value: altinn:serviceowner/reportees -externalHosts: - - tt02.altinn.no -maskinporten: - consumes: - - "altinn:serviceowner/reportees" \ No newline at end of file + - name: ALTINN_TILGANGER_SCOPE + value: api://dev-gcp.fager.arbeidsgiver-altinn-tilganger/.default + - name: ALTINN_TILGANGER_BASE_URL + value: http://arbeidsgiver-altinn-tilganger.fager diff --git a/config/altinn/prod-gcp.yml b/config/altinn/prod-gcp.yml index 7991d5e490..3697f77f6b 100644 --- a/config/altinn/prod-gcp.yml +++ b/config/altinn/prod-gcp.yml @@ -1,18 +1,13 @@ kafkaPool: nav-prod azure: enabled: true -envFrom: - - type: secret - name: altinn-api-gw-keys-prod +apps: + - name: arbeidsgiver-altinn-tilganger + namespace: fager env: - - name: ALTINN_URL - value: https://altinn.no/api/serviceowner - name: ALTINN_SERVICE_CODE value: 4936 - - name: ALTINN_SCOPE - value: altinn:serviceowner/reportees -externalHosts: - - altinn.no -maskinporten: - consumes: - - "altinn:serviceowner/reportees" + - name: ALTINN_TILGANGER_SCOPE + value: api://prod-gcp.fager.arbeidsgiver-altinn-tilganger/.default + - name: ALTINN_TILGANGER_BASE_URL + value: http://arbeidsgiver-altinn-tilganger.fager