From b291f4d4bef04764a222e94078afcdc2b83b94d7 Mon Sep 17 00:00:00 2001 From: Ugur Alpay Cenar Date: Thu, 7 Dec 2023 14:19:56 +0100 Subject: [PATCH] Lagre informasjon om hvem som oppretter behandling (#98) --- .nais/feature.yaml | 5 ++++- .nais/main.yaml | 5 ++++- .nais/prod.yaml | 5 ++++- pom.xml | 2 +- .../bidrag/behandling/config/RestConfig.kt | 5 ++++- .../controller/BehandlingController.kt | 22 +++++++++++++++++-- .../database/datamodell/Behandling.kt | 3 +++ src/main/resources/application.yaml | 9 ++++++++ ...handling_opprettet_av_kildeapplikasjon.sql | 9 ++++++++ .../controller/BehandlingControllerTest.kt | 17 ++++++++++++-- .../controller/KontrollerTestRunner.kt | 1 + .../behandling/hendelse/VedtakHendelseTest.kt | 3 +++ .../service/BehandlingServiceTest.kt | 3 +++ .../service/OpplysningerServiceTest.kt | 3 +++ .../nav/bidrag/behandling/utils/StubUtils.kt | 22 +++++++++++++++++++ .../nav/bidrag/behandling/utils/Testdata.kt | 3 +++ src/test/resources/application-local.yaml | 2 +- src/test/resources/application-test.yaml | 1 + 18 files changed, 110 insertions(+), 10 deletions(-) create mode 100644 src/main/resources/db/migration/V1.0.37__behandling_opprettet_av_kildeapplikasjon.sql diff --git a/.nais/feature.yaml b/.nais/feature.yaml index 9dcc90c58..4e6d8817a 100644 --- a/.nais/feature.yaml +++ b/.nais/feature.yaml @@ -13,6 +13,8 @@ env: BIDRAG_TILGANGSKONTROLL_URL: http://bidrag-tilgangskontroll-feature BIDRAG_TILGANGGSKONTROLL_SCOPE: dev-gcp.bidrag.bidrag-tilgangskontroll-feature TOPIC_VEDTAK: bidrag.vedtak-feature + BIDRAG_ORGANISASJON_SCOPE: dev-fss.bidrag.bidrag-organisasjon + BIDRAG_ORGANISASJON_URL: https://bidrag-organisasjon-feature.dev-fss-pub.nais.io/bidrag-organisasjon JAVA_TOOL_OPTIONS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 kafka: pool: nav-dev @@ -39,4 +41,5 @@ outbound-access-apps: - bidrag-dokument-forsendelse-feature - bidrag-tilgangskontroll-feature outbound-access-hosts: - - bidrag-person-feature.dev-fss-pub.nais.io \ No newline at end of file + - bidrag-person-feature.dev-fss-pub.nais.io + - bidrag-organisasjon-feature.dev-fss-pub.nais.io \ No newline at end of file diff --git a/.nais/main.yaml b/.nais/main.yaml index 2d54b27d0..2e090e5cc 100644 --- a/.nais/main.yaml +++ b/.nais/main.yaml @@ -12,6 +12,8 @@ env: BIDRAG_FORSENDELSE_SCOPE: dev-gcp.bidrag.bidrag-dokument-forsendelse BIDRAG_TILGANGSKONTROLL_URL: http://bidrag-tilgangskontroll BIDRAG_TILGANGGSKONTROLL_SCOPE: dev-gcp.bidrag.bidrag-tilgangskontroll + BIDRAG_ORGANISASJON_SCOPE: dev-fss.bidrag.bidrag-organisasjon + BIDRAG_ORGANISASJON_URL: https://bidrag-organisasjon.dev-fss-pub.nais.io/bidrag-organisasjon TOPIC_VEDTAK: bidrag.vedtak-syntetisk JAVA_TOOL_OPTIONS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 kafka: @@ -39,4 +41,5 @@ outbound-access-apps: - bidrag-dokument-forsendelse - bidrag-tilgangskontroll outbound-access-hosts: - - bidrag-person.dev-fss-pub.nais.io \ No newline at end of file + - bidrag-person.dev-fss-pub.nais.io + - bidrag-organisasjon.dev-fss-pub.nais.io \ No newline at end of file diff --git a/.nais/prod.yaml b/.nais/prod.yaml index 0cddb9e67..b056ba87d 100644 --- a/.nais/prod.yaml +++ b/.nais/prod.yaml @@ -12,6 +12,8 @@ env: BIDRAG_FORSENDELSE_SCOPE: prod-gcp.bidrag.bidrag-dokument-forsendelse BIDRAG_TILGANGSKONTROLL_URL: http://bidrag-tilgangskontroll BIDRAG_TILGANGGSKONTROLL_SCOPE: prod-gcp.bidrag.bidrag-tilgangskontroll + BIDRAG_ORGANISASJON_SCOPE: prod-fss.bidrag.bidrag-organisasjon + BIDRAG_ORGANISASJON_URL: https://bidrag-organisasjon.prod-fss-pub.nais.io/bidrag-organisasjon TOPIC_VEDTAK: bidrag.vedtak kafka: pool: nav-prod @@ -38,4 +40,5 @@ outbound-access-apps: - bidrag-dokument-forsendelse - bidrag-tilgangskontroll outbound-access-hosts: - - bidrag-person.prod-fss-pub.nais.io \ No newline at end of file + - bidrag-person.prod-fss-pub.nais.io + - bidrag-organisasjon.prod-fss-pub.nais.io \ No newline at end of file diff --git a/pom.xml b/pom.xml index 1ffb104fb..77fa25e22 100644 --- a/pom.xml +++ b/pom.xml @@ -16,7 +16,7 @@ 21 1.9.21 - 20231124134729_6778484 + 20231201131246_f719b2b 20231129081122_595a8a8 7.4 3.1.9 diff --git a/src/main/kotlin/no/nav/bidrag/behandling/config/RestConfig.kt b/src/main/kotlin/no/nav/bidrag/behandling/config/RestConfig.kt index f67e701dc..9054ba218 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/config/RestConfig.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/config/RestConfig.kt @@ -6,6 +6,8 @@ import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule import com.fasterxml.jackson.datatype.jsr310.deser.YearMonthDeserializer import com.fasterxml.jackson.module.kotlin.KotlinModule import no.nav.bidrag.commons.security.api.EnableSecurityConfiguration +import no.nav.bidrag.commons.service.AppContext +import no.nav.bidrag.commons.service.organisasjon.EnableSaksbehandlernavnProvider import no.nav.bidrag.commons.web.config.RestOperationsAzure import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration @@ -16,7 +18,8 @@ import java.time.format.DateTimeFormatter @Configuration @EnableSecurityConfiguration -@Import(RestOperationsAzure::class) +@EnableSaksbehandlernavnProvider +@Import(RestOperationsAzure::class, AppContext::class) class RestConfig { @Bean fun jackson2ObjectMapperBuilder(): Jackson2ObjectMapperBuilder { diff --git a/src/main/kotlin/no/nav/bidrag/behandling/controller/BehandlingController.kt b/src/main/kotlin/no/nav/bidrag/behandling/controller/BehandlingController.kt index ec97a2e45..f886e7532 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/controller/BehandlingController.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/controller/BehandlingController.kt @@ -21,6 +21,8 @@ import no.nav.bidrag.behandling.transformers.toLocalDate import no.nav.bidrag.behandling.transformers.toRolle import no.nav.bidrag.behandling.transformers.toRolleTypeDto import no.nav.bidrag.behandling.transformers.toSivilstandDto +import no.nav.bidrag.commons.security.utils.TokenUtils +import no.nav.bidrag.commons.service.organisasjon.SaksbehandlernavnProvider import org.apache.commons.lang3.Validate import org.springframework.web.bind.annotation.GetMapping import org.springframework.web.bind.annotation.PathVariable @@ -63,6 +65,11 @@ class BehandlingController(private val behandlingService: BehandlingService) { ), ) + val opprettetAv = + TokenUtils.hentSaksbehandlerIdent() ?: TokenUtils.hentApplikasjonsnavn() ?: "ukjent" + val opprettetAvNavn = + TokenUtils.hentSaksbehandlerIdent() + ?.let { SaksbehandlernavnProvider.hentSaksbehandlernavn(it) } val behandling = Behandling( createBehandling.behandlingType, @@ -74,6 +81,9 @@ class BehandlingController(private val behandlingService: BehandlingService) { createBehandling.soknadId, createBehandling.soknadRefId, createBehandling.behandlerEnhet, + opprettetAv = opprettetAv, + opprettetAvNavn = opprettetAvNavn, + kildeapplikasjon = TokenUtils.hentApplikasjonsnavn() ?: "ukjent", createBehandling.soknadFra, createBehandling.stonadType, createBehandling.engangsbelopType, @@ -189,7 +199,14 @@ class BehandlingController(private val behandlingService: BehandlingService) { behandling.soknadId, behandling.behandlerEnhet, behandling.roller.map { - RolleDto(it.id!!, it.rolleType.toRolleTypeDto(), it.ident, it.navn, it.fodtDato, it.opprettetDato) + RolleDto( + it.id!!, + it.rolleType.toRolleTypeDto(), + it.ident, + it.navn, + it.fodtDato, + it.opprettetDato, + ) }.toSet(), behandling.husstandsBarn.toHusstandsBarnDto(), behandling.sivilstand.toSivilstandDto(), @@ -232,6 +249,7 @@ class BehandlingController(private val behandlingService: BehandlingService) { } private fun ingenVoksneUtenIdent(roller: Set): Boolean { - return roller.filter { r -> r.rolleType != CreateRolleRolleType.BARN && r.ident.isNullOrBlank() }.none() + return roller.filter { r -> r.rolleType != CreateRolleRolleType.BARN && r.ident.isNullOrBlank() } + .none() } } diff --git a/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Behandling.kt b/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Behandling.kt index aae5f1f88..81a011890 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Behandling.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Behandling.kt @@ -34,6 +34,9 @@ class Behandling( val soknadId: Long, val soknadRefId: Long? = null, val behandlerEnhet: String, + val opprettetAv: String, + val opprettetAvNavn: String? = null, + val kildeapplikasjon: String, @Enumerated(EnumType.STRING) val soknadFra: SøktAvType, @Enumerated(EnumType.STRING) diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index 3ccc5ac4b..0dad2db22 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -54,6 +54,15 @@ no.nav.security.jwt: client-id: ${AZURE_APP_CLIENT_ID} client-secret: ${AZURE_APP_CLIENT_SECRET} client-auth-method: client_secret_post + bidrag-organisasjon: + resource-url: ${BIDRAG_ORGANISASJON_URL} + token-endpoint-url: https://login.microsoftonline.com/${AZURE_APP_TENANT_ID}/oauth2/v2.0/token + grant-type: urn:ietf:params:oauth:grant-type:jwt-bearer + scope: api://${BIDRAG_ORGANISASJON_SCOPE}/.default + authentication: + client-id: ${AZURE_APP_CLIENT_ID} + client-secret: ${AZURE_APP_CLIENT_SECRET} + client-auth-method: client_secret_post issuer.aad: discovery_url: https://login.microsoftonline.com/${AZURE_APP_TENANT_ID}/v2.0/.well-known/openid-configuration accepted_audience: ${AZURE_APP_CLIENT_ID}, api://${AZURE_APP_CLIENT_ID} diff --git a/src/main/resources/db/migration/V1.0.37__behandling_opprettet_av_kildeapplikasjon.sql b/src/main/resources/db/migration/V1.0.37__behandling_opprettet_av_kildeapplikasjon.sql new file mode 100644 index 000000000..068ecf154 --- /dev/null +++ b/src/main/resources/db/migration/V1.0.37__behandling_opprettet_av_kildeapplikasjon.sql @@ -0,0 +1,9 @@ +-- Table: BEHANDLING +alter table BEHANDLING + add column if not exists opprettet_av text default '' not null; + +alter table BEHANDLING + add column if not exists opprettet_av_navn text; + +alter table BEHANDLING + add column if not exists kildeapplikasjon text default 'bisys' not null; \ No newline at end of file diff --git a/src/test/kotlin/no/nav/bidrag/behandling/controller/BehandlingControllerTest.kt b/src/test/kotlin/no/nav/bidrag/behandling/controller/BehandlingControllerTest.kt index fbbe36f6d..9a2dbcaab 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/controller/BehandlingControllerTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/controller/BehandlingControllerTest.kt @@ -1,5 +1,6 @@ package no.nav.bidrag.behandling.controller +import io.kotest.matchers.shouldBe import no.nav.bidrag.behandling.database.datamodell.Behandling import no.nav.bidrag.behandling.database.datamodell.Behandlingstype import no.nav.bidrag.behandling.database.datamodell.SoknadType @@ -61,9 +62,13 @@ class BehandlingControllerTest() : KontrollerTestRunner() { "${rootUri()}/behandling", HttpMethod.POST, HttpEntity(behandlingReq), - Void::class.java, + CreateBehandlingResponse::class.java, ) assertEquals(HttpStatus.OK, behandlingRes.statusCode) + val opprettetBehandling = behandlingService.hentBehandlingById(behandlingRes.body!!.id) + opprettetBehandling.opprettetAv shouldBe "aud-localhost" + opprettetBehandling.opprettetAvNavn shouldBe "Fornavn Etternavn" + opprettetBehandling.kildeapplikasjon shouldBe "aud-localhost" } @Test @@ -225,6 +230,9 @@ class BehandlingControllerTest() : KontrollerTestRunner() { 123213L, null, "EN123", + "Z9999", + "Navn Navnesen", + "bisys", SøktAvType.VERGE, null, null, @@ -327,7 +335,12 @@ class BehandlingControllerTest() : KontrollerTestRunner() { val roller = setOf( CreateRolleDtoTest(CreateRolleRolleType.BARN, "1235", Date(1)), - CreateRolleDtoTest(CreateRolleRolleType.BIDRAGS_MOTTAKER, null, Date(1), "Ola Dunk"), + CreateRolleDtoTest( + CreateRolleRolleType.BIDRAGS_MOTTAKER, + null, + Date(1), + "Ola Dunk", + ), ) val testBehandlingMedNull = createBehandlingRequestTest("sak123", "en12", roller) diff --git a/src/test/kotlin/no/nav/bidrag/behandling/controller/KontrollerTestRunner.kt b/src/test/kotlin/no/nav/bidrag/behandling/controller/KontrollerTestRunner.kt index 1302cfe36..323700a87 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/controller/KontrollerTestRunner.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/controller/KontrollerTestRunner.kt @@ -24,6 +24,7 @@ abstract class KontrollerTestRunner : CommonTestRunner() { @BeforeEach fun initMocks() { WireMock.resetAllRequests() + stubUtils.stubHentSaksbehandler() stubUtils.stubOpprettForsendelse() stubUtils.stubSlettForsendelse() stubUtils.stubHentForsendelserForSak() diff --git a/src/test/kotlin/no/nav/bidrag/behandling/hendelse/VedtakHendelseTest.kt b/src/test/kotlin/no/nav/bidrag/behandling/hendelse/VedtakHendelseTest.kt index f38bff64b..afa9ae8bb 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/hendelse/VedtakHendelseTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/hendelse/VedtakHendelseTest.kt @@ -114,6 +114,9 @@ class VedtakHendelseTest : CommonTestRunner() { saksnummer = SAKSNUMMER, soknadId = 123123L, behandlerEnhet = "4806", + opprettetAv = "Z99999", + opprettetAvNavn = "Saksbehandler Navn", + kildeapplikasjon = "bisys", behandlingType = Behandlingstype.BIDRAG18AAR, engangsbelopType = null, mottatDato = Date(), diff --git a/src/test/kotlin/no/nav/bidrag/behandling/service/BehandlingServiceTest.kt b/src/test/kotlin/no/nav/bidrag/behandling/service/BehandlingServiceTest.kt index f9106a383..823d399c7 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/service/BehandlingServiceTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/service/BehandlingServiceTest.kt @@ -472,6 +472,9 @@ class BehandlingServiceTest : TestContainerRunner() { 123213L, null, "1234", + "Z9999", + "Navn Navnesen", + "bisys", SøktAvType.BIDRAGSMOTTAKER, null, null, diff --git a/src/test/kotlin/no/nav/bidrag/behandling/service/OpplysningerServiceTest.kt b/src/test/kotlin/no/nav/bidrag/behandling/service/OpplysningerServiceTest.kt index b8eb28bf5..d303f8fde 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/service/OpplysningerServiceTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/service/OpplysningerServiceTest.kt @@ -41,6 +41,9 @@ class OpplysningerServiceTest : TestContainerRunner() { 123L, null, "ENH1", + "Z9999", + "Navn Navnesen", + "bisys", SøktAvType.VERGE, engangsbelopType = Engangsbeløptype.ETTERGIVELSE, stonadType = null, diff --git a/src/test/kotlin/no/nav/bidrag/behandling/utils/StubUtils.kt b/src/test/kotlin/no/nav/bidrag/behandling/utils/StubUtils.kt index 9d3beadf9..b42566c4c 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/utils/StubUtils.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/utils/StubUtils.kt @@ -1,5 +1,6 @@ import com.fasterxml.jackson.core.JsonProcessingException import com.fasterxml.jackson.databind.ObjectMapper +import com.github.tomakehurst.wiremock.WireMockServer import com.github.tomakehurst.wiremock.client.CountMatchingStrategy import com.github.tomakehurst.wiremock.client.ResponseDefinitionBuilder import com.github.tomakehurst.wiremock.client.WireMock @@ -10,6 +11,8 @@ import no.nav.bidrag.behandling.consumer.ForsendelseResponsTo import no.nav.bidrag.behandling.consumer.OpprettForsendelseRespons import no.nav.bidrag.behandling.dto.HentPersonResponse import no.nav.bidrag.behandling.utils.opprettForsendelseResponsUnderOpprettelse +import no.nav.bidrag.commons.service.AppContext +import no.nav.bidrag.commons.service.organisasjon.SaksbehandlerInfoResponse import no.nav.bidrag.domene.enums.grunnlag.Grunnlagstype import no.nav.bidrag.domene.tid.ÅrMånedsperiode import no.nav.bidrag.transport.behandling.beregning.felles.BeregnGrunnlag @@ -151,6 +154,25 @@ class StubUtils { ) } + fun stubHentSaksbehandler() { + AppContext.getBean(WireMockServer::class.java).stubFor( + WireMock.get(WireMock.urlMatching("/organisasjon/saksbehandler/info/(.*)")).willReturn( + aResponse() + .withHeader(HttpHeaders.CONNECTION, "close") + .withHeader(HttpHeaders.CONTENT_TYPE, "application/json") + .withStatus(HttpStatus.OK.value()) + .withBody( + toJsonString( + SaksbehandlerInfoResponse( + "Z99999", + "Fornavn Etternavn", + ), + ), + ), + ), + ) + } + inner class Verify { fun opprettForsendelseKaltMed(vararg contains: String) { val verify = diff --git a/src/test/kotlin/no/nav/bidrag/behandling/utils/Testdata.kt b/src/test/kotlin/no/nav/bidrag/behandling/utils/Testdata.kt index 9a3baf297..a8c4def3c 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/utils/Testdata.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/utils/Testdata.kt @@ -46,6 +46,9 @@ fun oppretteBehandling(): Behandling { 123, null, "ENH", + "Z9999", + "Navn Navnesen", + "bisys", SøktAvType.BIDRAGSMOTTAKER, null, null, diff --git a/src/test/resources/application-local.yaml b/src/test/resources/application-local.yaml index e857aa827..1e24cacb1 100644 --- a/src/test/resources/application-local.yaml +++ b/src/test/resources/application-local.yaml @@ -12,7 +12,7 @@ AZURE_APP_CLIENT_SECRET: unset server.port: 8990 NAIS_APP_NAME: bidrag-behandling DB_HOST: localhost -DB_PORT: 5445 +DB_PORT: 5454 DB_DATABASE: bidrag-behandling DB_USERNAME: cloudsqliamuser DB_PASSWORD: admin diff --git a/src/test/resources/application-test.yaml b/src/test/resources/application-test.yaml index 55639fb94..8c7d73b06 100644 --- a/src/test/resources/application-test.yaml +++ b/src/test/resources/application-test.yaml @@ -2,6 +2,7 @@ BIDRAG_PERSON_URL: http://localhost:${wiremock.server.port}/bidrag-person BIDRAG_BEREGN_FORSKUDD_URL: http://localhost:${wiremock.server.port} BIDRAG_FORSENDELSE_URL: http://localhost:${wiremock.server.port}/forsendelse BIDRAG_TILGANGSKONTROLL_URL: http://localhost:${wiremock.server.port}/tilgangskontroll +BIDRAG_ORGANISASJON_URL: http://localhost:${wiremock.server.port}/organisasjon AZURE_OPENID_CONFIG_ISSUER: http://localhost:${mock-oauth2-server.port}/aad AZURE_APP_TENANT_ID: 12321321-123213-3213123 AZURE_APP_CLIENT_ID: asdasd-sadas-ddas-qwe