diff --git a/.deploy/preprod.yaml b/.deploy/preprod.yaml index 1b60de6857..c18375e46b 100644 --- a/.deploy/preprod.yaml +++ b/.deploy/preprod.yaml @@ -118,4 +118,6 @@ spec: envFrom: - secret: familie-ef-sak - secret: familie-ef-sak-unleash-api-token - leaderElection: true \ No newline at end of file + leaderElection: true + kafka: + pool: nav-dev \ No newline at end of file diff --git a/.deploy/prod.yaml b/.deploy/prod.yaml index d2de6efa28..ca97e2d60a 100644 --- a/.deploy/prod.yaml +++ b/.deploy/prod.yaml @@ -113,4 +113,6 @@ spec: - secret: familie-ef-sak - secret: familie-ef-sak-unleash-api-token leaderElection: true + kafka: + pool: nav-prod diff --git a/pom.xml b/pom.xml index be464a64a8..21ce190209 100644 --- a/pom.xml +++ b/pom.xml @@ -38,6 +38,7 @@ 2.20231026103714_2f17845 no.nav.familie.ef.sak.ApplicationKt 3.0_20231206111937_3c866af + 20230704114948-74aa2e9 2.0_20230214104704_706e9c0 7.14.1 @@ -94,6 +95,10 @@ org.springframework.boot spring-boot-starter-validation + + org.springframework.kafka + spring-kafka + org.flywaydb flyway-core @@ -170,6 +175,11 @@ felles ${kontrakter.version} + + no.nav.tms.mikrofrontend.selector + builder + ${mikrofrontend.builder.version} + io.micrometer micrometer-registry-prometheus diff --git a/src/main/kotlin/no/nav/familie/ef/sak/forvaltning/MinsideForvaltningsController.kt b/src/main/kotlin/no/nav/familie/ef/sak/forvaltning/MinsideForvaltningsController.kt new file mode 100644 index 0000000000..731857818b --- /dev/null +++ b/src/main/kotlin/no/nav/familie/ef/sak/forvaltning/MinsideForvaltningsController.kt @@ -0,0 +1,44 @@ +package no.nav.familie.ef.sak.forvaltning + +import no.nav.familie.ef.sak.felles.dto.PersonIdentDto +import no.nav.familie.ef.sak.infrastruktur.exception.feilHvisIkke +import no.nav.familie.ef.sak.infrastruktur.featuretoggle.FeatureToggleService +import no.nav.familie.ef.sak.infrastruktur.featuretoggle.Toggle +import no.nav.familie.ef.sak.infrastruktur.sikkerhet.SikkerhetContext +import no.nav.familie.ef.sak.minside.MinSideKafkaProducerService +import no.nav.security.token.support.core.api.ProtectedWithClaims +import org.springframework.web.bind.annotation.PostMapping +import org.springframework.web.bind.annotation.RequestBody +import org.springframework.web.bind.annotation.RequestMapping +import org.springframework.web.bind.annotation.RestController + +@RestController +@RequestMapping("/api/minside/forvaltning/") +@ProtectedWithClaims(issuer = "azuread") +class MinsideForvaltningsController( + private val featureToggleService: FeatureToggleService, + private val minSideKafkaProducerService: MinSideKafkaProducerService, +) { + @PostMapping("aktiver") + fun aktiverPersonForMinSide(@RequestBody personIdentDto: PersonIdentDto) { + feilHvisIkke(erUtviklerMedVeilderrolle()) { "Kan kun kjøres av utvikler med veilederrolle" } + validerPersonIdent(personIdentDto) + minSideKafkaProducerService.aktiver(personIdent = personIdentDto.personIdent) + } + + @PostMapping("deaktiver") + fun deaktiverPersonForMinSide(@RequestBody personIdentDto: PersonIdentDto) { + feilHvisIkke(erUtviklerMedVeilderrolle()) { "Kan kun kjøres av utvikler med veilederrolle" } + validerPersonIdent(personIdentDto) + minSideKafkaProducerService.deaktiver(personIdent = personIdentDto.personIdent) + } + + private fun validerPersonIdent(personIdentDto: PersonIdentDto) { + if (personIdentDto.personIdent.length != 11) { + error("PersonIdent må ha 11 siffer") + } + } + + private fun erUtviklerMedVeilderrolle(): Boolean = + SikkerhetContext.erSaksbehandler() && featureToggleService.isEnabled(Toggle.UTVIKLER_MED_VEILEDERRROLLE) +} diff --git a/src/main/kotlin/no/nav/familie/ef/sak/minside/MinSideKafkaProducerService.kt b/src/main/kotlin/no/nav/familie/ef/sak/minside/MinSideKafkaProducerService.kt new file mode 100644 index 0000000000..38d35fbf56 --- /dev/null +++ b/src/main/kotlin/no/nav/familie/ef/sak/minside/MinSideKafkaProducerService.kt @@ -0,0 +1,43 @@ +package no.nav.familie.ef.sak.minside + +import no.nav.familie.log.IdUtils +import no.nav.familie.log.mdc.MDCConstants +import no.nav.tms.microfrontend.MicrofrontendMessageBuilder +import no.nav.tms.microfrontend.Sensitivitet +import org.slf4j.Logger +import org.slf4j.LoggerFactory +import org.slf4j.MDC +import org.springframework.beans.factory.annotation.Value +import org.springframework.kafka.core.KafkaTemplate +import org.springframework.stereotype.Service + +@Service +class MinSideKafkaProducerService(private val kafkaTemplate: KafkaTemplate) { + + @Value("\${MIN_SIDE_TOPIC}") + lateinit var topic: String + private val logger: Logger = LoggerFactory.getLogger(this::class.java) + + fun aktiver(personIdent: String) { + val melding = MicrofrontendMessageBuilder.enable { + ident = personIdent + initiatedBy = "teamfamilie" + microfrontendId = "familie-ef-mikrofrontend-minside" + sensitivitet = Sensitivitet.HIGH + }.text() + val callId = MDC.get(MDCConstants.MDC_CALL_ID) ?: IdUtils.generateId() + logger.info("Sender aktivere minside melding for callId=$callId") + kafkaTemplate.send(topic, callId, melding) + } + + fun deaktiver(personIdent: String) { + val melding = MicrofrontendMessageBuilder.disable { + ident = personIdent + initiatedBy = "teamfamilie" + microfrontendId = "familie-ef-mikrofrontend-minside" + }.text() + val callId = MDC.get(MDCConstants.MDC_CALL_ID) ?: IdUtils.generateId() + logger.info("Sender deaktivere minside melding for callId=$callId") + kafkaTemplate.send(topic, callId, melding) + } +} diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 4f5911102f..8208b3e2a8 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -16,4 +16,8 @@ rolle: kode7: "ea930b6b-9397-44d9-b9e6-f4cf527a632a" # 0000-GA-Fortrolig_Adresse egenAnsatt: "dbe4ad45-320b-4e9a-aaa1-73cca4ee124d" # 0000-GA-Egne_ansatte -prosessering.rolle: "928636f4-fd0d-4149-978e-a6fb68bb19de" # 0000-GA-STDAPPS 928636f4-fd0d-4149-978e-a6fb68bb19de \ No newline at end of file +prosessering.rolle: "928636f4-fd0d-4149-978e-a6fb68bb19de" # 0000-GA-STDAPPS 928636f4-fd0d-4149-978e-a6fb68bb19de +KAFKA_BROKERS: hostname:1234 +KAFKA_KEYSTORE_PATH: kafkaKeystorePath +KAFKA_CREDSTORE_PASSWORD: kafkaCredstorePassword +KAFKA_TRUSTSTORE_PATH: kafkaTruststorePath diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 531925fdd6..40c294d812 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -221,6 +221,22 @@ spring: connection-test-query: "select 1" max-lifetime: 30000 minimum-idle: 1 + kafka: + bootstrap-servers: ${KAFKA_BROKERS} + properties: + security: + protocol: SSL + ssl: + keystore: + type: PKCS12 + location: ${KAFKA_KEYSTORE_PATH} + password: ${KAFKA_CREDSTORE_PASSWORD} + truststore: + type: PKCS12 + location: ${KAFKA_TRUSTSTORE_PATH} + password: ${KAFKA_CREDSTORE_PASSWORD} + producer: + acks: all management: endpoint.health.show-details: always @@ -260,6 +276,8 @@ G_OMREGNING_CRON_EXPRESSION: 0 0 15 * * TUE FINN_BEHANDLINGER_UTEN_OPPGAVE_CRON_EXPRESSION: 0 0 8 * * MON #kl 08:00 hver mandag FINN_BEHANDLINGER_MED_GAMMEL_G_CRON_EXPRESSION: 0 0 8 1 * * #kl 08:00 den 1. hver måned +MIN_SIDE_TOPIC: min-side.aapen-microfrontend-v1 + rolle: veileder: "31778fd8-3b71-4867-8db6-a81235fbe001" saksbehandler: "6406aba2-b930-41d3-a85b-dd13731bc974"