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"