diff --git a/build.gradle.kts b/build.gradle.kts index 47f712e57..c45f51a22 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,27 +1,27 @@ import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar val mainClass = "no.nav.k9.los.K9LosKt" -val hikariVersion = "6.0.0" -val flywayVersion = "10.19.0" +val hikariVersion = "6.1.0" +val flywayVersion = "10.21.0" val vaultJdbcVersion = "1.3.10" val koinVersion = "4.0.0" val kotliqueryVersion = "1.9.0" -val k9SakVersion = "5.0.1" +val k9SakVersion = "5.1.1" val k9KlageVersion = "0.4.5" val fuelVersion = "2.3.1" val jacksonVersion = "2.17.2" val commonsTextVersion = "1.12.0" -val dusseldorfKtorVersion = "5.0.9" +val dusseldorfKtorVersion = "5.0.10" val ktorVersion = "2.3.12" -val kafkaVersion = "3.8.0" +val kafkaVersion = "3.9.0" val navTilgangskontroll = "3.2024.01.24_10.14-f70bae69bd65" // Test Dependencies -val testContainers = "1.20.2" +val testContainers = "1.20.3" val jsonassertVersion = "1.5.3" -val jupiterVersion = "5.11.2" +val jupiterVersion = "5.11.3" val assertkVersion = "0.28.1" val mockkVersion = "1.13.13" @@ -48,7 +48,6 @@ dependencies { implementation("io.ktor:ktor-server-status-pages:$ktorVersion") implementation("io.ktor:ktor-server-cors:$ktorVersion") implementation("io.ktor:ktor-server-call-logging:$ktorVersion") - implementation("io.ktor:ktor-server-locations-jvm:$ktorVersion") implementation("io.ktor:ktor-server-html-builder-jvm:$ktorVersion") implementation("io.ktor:ktor-server-websockets-jvm:$ktorVersion") implementation("io.ktor:ktor-client-auth-jvm:$ktorVersion") @@ -74,9 +73,9 @@ dependencies { implementation("no.nav.k9.statistikk:kontrakter:2.0_20220411110858_dc06dd1") // opentelemetry - implementation("io.opentelemetry:opentelemetry-api:1.43.0") - implementation("io.opentelemetry:opentelemetry-extension-kotlin:1.43.0") - implementation("io.opentelemetry.instrumentation:opentelemetry-instrumentation-annotations:2.8.0") + implementation("io.opentelemetry:opentelemetry-api:1.44.1") + implementation("io.opentelemetry:opentelemetry-extension-kotlin:1.44.1") + implementation("io.opentelemetry.instrumentation:opentelemetry-instrumentation-annotations:2.10.0") // Div implementation(enforcedPlatform( "com.fasterxml.jackson:jackson-bom:$jacksonVersion")) diff --git a/nais/alerts/alert-manager.yml b/nais/alerts/alert-manager.yml index 448cd01a3..62e7727f6 100644 --- a/nais/alerts/alert-manager.yml +++ b/nais/alerts/alert-manager.yml @@ -18,14 +18,14 @@ spec: iconEmoji: ':error:' sendResolved: true httpConfig: - proxyURL: http://webproxy.nais:8088 + proxyUrl: http://webproxy.nais:8088 title: |- [\{{ .Status | toUpper }}\{{ if eq .Status "firing" }}:\{{ .Alerts.Firing | len }}\{{ end }}] \{{ .CommonLabels.alertname }} text: |- \{{ range .Alerts -}} *Alert:* \{{ .Annotations.title }}\{{ if .Labels.severity }} - `\{{ .Labels.severity }}`\{{ end }} *Summary:* \{{ .Annotations.summary }} - *Description:* \{{ .Annotations.description }} + *Description:* \{{ .Annotations.description }} \{{ end }} color: |- \{{ if eq .Status "firing" -}} diff --git a/nais/kafka/produksjonsstyring-k9sak.yml b/nais/kafka/produksjonsstyring-k9sak.yml index dfd834988..84547aa02 100644 --- a/nais/kafka/produksjonsstyring-k9sak.yml +++ b/nais/kafka/produksjonsstyring-k9sak.yml @@ -19,6 +19,9 @@ spec: - team: k9saksbehandling application: k9-sak access: write + - team: k9saksbehandling + application: ung-sak + access: write - team: k9saksbehandling application: k9-los-api access: read diff --git a/nais/prod-fss.yml b/nais/prod-fss.yml index b9384e5b4..5b874e644 100644 --- a/nais/prod-fss.yml +++ b/nais/prod-fss.yml @@ -37,6 +37,8 @@ spec: runtime: java destinations: - id: "elastic-apm" + - id: "grafana-lgtm" + vault: enabled: true paths: diff --git a/src/main/kotlin/no/nav/k9/los/K9Los.kt b/src/main/kotlin/no/nav/k9/los/K9Los.kt index aede3fac9..e5f67159c 100644 --- a/src/main/kotlin/no/nav/k9/los/K9Los.kt +++ b/src/main/kotlin/no/nav/k9/los/K9Los.kt @@ -11,7 +11,6 @@ import io.ktor.serialization.jackson.* import io.ktor.server.application.* import io.ktor.server.auth.* import io.ktor.server.http.content.* -import io.ktor.server.locations.* import io.ktor.server.metrics.micrometer.* import io.ktor.server.plugins.callid.* import io.ktor.server.plugins.callloging.* @@ -54,7 +53,7 @@ import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9.tilbaketillos.k9TilbakeE import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9.tilbaketillos.k9tilbakeKorrigerOutOfOrderProsessor import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9klagetillos.K9KlageTilLosHistorikkvaskTjeneste import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9saktillos.K9SakTilLosHistorikkvaskTjeneste -import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9tilbaketillos.K9TilbakeTilLosHistorikkvaskTjeneste +import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9.tilbaketillos.K9TilbakeTilLosHistorikkvaskTjeneste import no.nav.k9.los.nyoppgavestyring.forvaltning.forvaltningApis import no.nav.k9.los.nyoppgavestyring.ko.KøpåvirkendeHendelse import no.nav.k9.los.nyoppgavestyring.ko.OppgaveKoApis @@ -70,7 +69,7 @@ import no.nav.k9.los.tjenester.avdelingsleder.nokkeltall.NokkeltallApis import no.nav.k9.los.tjenester.avdelingsleder.oppgaveko.AvdelingslederOppgavekøApis import no.nav.k9.los.tjenester.driftsmeldinger.DriftsmeldingerApis import no.nav.k9.los.tjenester.fagsak.FagsakApis -import no.nav.k9.los.tjenester.innsikt.innsiktGrensesnitt +import no.nav.k9.los.tjenester.innsikt.InnsiktApis import no.nav.k9.los.tjenester.kodeverk.KodeverkApis import no.nav.k9.los.tjenester.konfig.KonfigApis import no.nav.k9.los.tjenester.mock.localSetup @@ -114,7 +113,7 @@ fun Application.k9Los() { val k9TilbakeTilLosAdapterTjeneste = koin.get() k9TilbakeTilLosAdapterTjeneste.setup() - if (LocalDateTime.now().isBefore(LocalDateTime.of(2024, 9, 18, 11, 30))) { + if (LocalDateTime.now().isBefore(LocalDateTime.of(2024, 11, 18, 20, 30))) { if (1 == 0) { //HAXX for å ikke kjøre jobb, men indikere at koden er i bruk og dermed ikke slettes //koin.get().kjørReservasjonskonvertering() //TODO slette //koin.get().kjørFeiloppgaverVask() //TODO slette @@ -123,9 +122,7 @@ fun Application.k9Los() { koin.get().kjørHistorikkvask() koin.get().kjørHistorikkvask() } - if (configuration.koinProfile == KoinProfile.PREPROD) { - koin.get().kjørHistorikkvask() - } + koin.get().kjørHistorikkvask() } install(Authentication) { @@ -301,8 +298,6 @@ fun Application.k9Los() { logRequests() } - install(Locations) - install(Routing) { MetricsRoute() @@ -320,7 +315,7 @@ fun Application.k9Los() { // localSetup.initPunsjoppgave() api(sseChannel) route("/forvaltning") { - innsiktGrensesnitt() + InnsiktApis() forvaltningApis() route("k9saktillos") { K9SakTilLosApi() } route("k9klagetillos") { K9KlageTilLosApi() } @@ -335,7 +330,7 @@ fun Application.k9Los() { } else { authenticate(*issuers.allIssuers()) { route("forvaltning") { - innsiktGrensesnitt() + InnsiktApis() forvaltningApis() route("k9saktillos") { K9SakTilLosApi() } route("k9klagetillos") { K9KlageTilLosApi() } @@ -413,9 +408,9 @@ private fun Route.api(sseChannel: BroadcastChannel) { route("ny-oppgavestyring") { route("ko", { hidden = true }) { OppgaveKoApis() } route("oppgave", { hidden = true }) { OppgaveQueryApis() } - route("feltdefinisjon", { hidden = true }) { FeltdefinisjonApi() } - route("oppgavetype", { hidden = true }) { OppgavetypeApi() } - route("oppgave-v3", { hidden = true }) { OppgaveV3Api() } + route("feltdefinisjon", { hidden = true }) { FeltdefinisjonApi() } // Må legge til tilgangskontroll dersom disse endepunktene aktiveres + route("oppgavetype", { hidden = true }) { OppgavetypeApi() } // Må legge til tilgangskontroll dersom disse endepunktene aktiveres + route("oppgave-v3", { hidden = true }) { OppgaveV3Api() } // Må legge til tilgangskontroll dersom disse endepunktene aktiveres route("sok") { SøkeboksApi() } } } diff --git a/src/main/kotlin/no/nav/k9/los/KoinProfiles.kt b/src/main/kotlin/no/nav/k9/los/KoinProfiles.kt index 23c953bd0..1d09c59c5 100644 --- a/src/main/kotlin/no/nav/k9/los/KoinProfiles.kt +++ b/src/main/kotlin/no/nav/k9/los/KoinProfiles.kt @@ -53,7 +53,7 @@ import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9.tilbaketillos.k9TilbakeE import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9klagetillos.K9KlageTilLosHistorikkvaskTjeneste import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9saktillos.K9SakTilLosHistorikkvaskTjeneste import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9saktillos.K9SakTilLosLukkeFeiloppgaverTjeneste -import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9tilbaketillos.K9TilbakeTilLosHistorikkvaskTjeneste +import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9.tilbaketillos.K9TilbakeTilLosHistorikkvaskTjeneste import no.nav.k9.los.nyoppgavestyring.forvaltning.ForvaltningRepository import no.nav.k9.los.nyoppgavestyring.ko.KøpåvirkendeHendelse import no.nav.k9.los.nyoppgavestyring.ko.OppgaveKoTjeneste diff --git a/src/main/kotlin/no/nav/k9/los/integrasjon/abac/IPepClient.kt b/src/main/kotlin/no/nav/k9/los/integrasjon/abac/IPepClient.kt index 4261b29a2..23903995b 100644 --- a/src/main/kotlin/no/nav/k9/los/integrasjon/abac/IPepClient.kt +++ b/src/main/kotlin/no/nav/k9/los/integrasjon/abac/IPepClient.kt @@ -15,7 +15,7 @@ interface IPepClient { suspend fun kanLeggeUtDriftsmelding(): Boolean - suspend fun harTilgangTilReservingAvOppgaver(): Boolean + suspend fun harTilgangTilReserveringAvOppgaver(): Boolean suspend fun kanSendeSakTilStatistikk( fagsakNummer: String diff --git a/src/main/kotlin/no/nav/k9/los/integrasjon/abac/PepClient.kt b/src/main/kotlin/no/nav/k9/los/integrasjon/abac/PepClient.kt index 00086aeaf..50d0fc28e 100644 --- a/src/main/kotlin/no/nav/k9/los/integrasjon/abac/PepClient.kt +++ b/src/main/kotlin/no/nav/k9/los/integrasjon/abac/PepClient.kt @@ -81,7 +81,7 @@ class PepClient( return evaluate(requestBuilder) } - override suspend fun harTilgangTilReservingAvOppgaver(): Boolean { + override suspend fun harTilgangTilReserveringAvOppgaver(): Boolean { val requestBuilder = XacmlRequestBuilder() .addResourceAttribute(RESOURCE_DOMENE, DOMENE) .addResourceAttribute(RESOURCE_TYPE, TILGANG_SAK) diff --git a/src/main/kotlin/no/nav/k9/los/integrasjon/abac/PepClientLocal.kt b/src/main/kotlin/no/nav/k9/los/integrasjon/abac/PepClientLocal.kt index 77af4cb3c..309772828 100644 --- a/src/main/kotlin/no/nav/k9/los/integrasjon/abac/PepClientLocal.kt +++ b/src/main/kotlin/no/nav/k9/los/integrasjon/abac/PepClientLocal.kt @@ -16,7 +16,7 @@ class PepClientLocal : IPepClient { return true } - override suspend fun harTilgangTilReservingAvOppgaver(): Boolean { + override suspend fun harTilgangTilReserveringAvOppgaver(): Boolean { return true } diff --git a/src/main/kotlin/no/nav/k9/los/integrasjon/pdl/PdlService.kt b/src/main/kotlin/no/nav/k9/los/integrasjon/pdl/PdlService.kt index 8587aa751..74fb256cd 100644 --- a/src/main/kotlin/no/nav/k9/los/integrasjon/pdl/PdlService.kt +++ b/src/main/kotlin/no/nav/k9/los/integrasjon/pdl/PdlService.kt @@ -110,16 +110,17 @@ class PdlService constructor( } catch (e: Exception) { try { val value = LosObjectMapper.instance.readValue(json!!) - log.warn("Fikk pdl-feil ${value.errors.joinToString(",")}", e) if (value.errors.any { it.extensions?.code == "unauthorized" }) { val resultat = PersonPdlResponse(true, null) //TODO vurder å cache her også //aktørIdTilPersonCache.set(cacheKey, CacheObject(resultat, LocalDateTime.now().plus(pdlCacheVarighet))) return resultat + } else { + log.warn("Fikk ukjent error fra pdl (noe annet enn 'unauthorized'): ${value.errors.joinToString(",")}", e) } } catch (e: Exception) { - log.warn(e.message, e) + log.warn("Ukjent feil ved tolkning av error fra pdl", e) } return PersonPdlResponse(false, null) } diff --git a/src/main/kotlin/no/nav/k9/los/integrasjon/pdl/PersonPdl.kt b/src/main/kotlin/no/nav/k9/los/integrasjon/pdl/PersonPdl.kt index 6cffa650d..608280183 100644 --- a/src/main/kotlin/no/nav/k9/los/integrasjon/pdl/PersonPdl.kt +++ b/src/main/kotlin/no/nav/k9/los/integrasjon/pdl/PersonPdl.kt @@ -4,14 +4,12 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize import com.fasterxml.jackson.databind.annotation.JsonSerialize import com.fasterxml.jackson.databind.ser.std.ToStringSerializer import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer -import org.slf4j.LoggerFactory import java.time.LocalDate data class PersonPdl( val `data`: Data ) { - val log = LoggerFactory.getLogger("PersonPdl")!! data class Data( val hentPerson: HentPerson ) { diff --git a/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/domeneadaptere/k9/tilbaketillos/K9TilbakeTilLosHistorikkvaskTjeneste.kt b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/domeneadaptere/k9/tilbaketillos/K9TilbakeTilLosHistorikkvaskTjeneste.kt index 88f04aac0..c02129546 100644 --- a/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/domeneadaptere/k9/tilbaketillos/K9TilbakeTilLosHistorikkvaskTjeneste.kt +++ b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/domeneadaptere/k9/tilbaketillos/K9TilbakeTilLosHistorikkvaskTjeneste.kt @@ -1,4 +1,4 @@ -package no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9tilbaketillos +package no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9.tilbaketillos import kotlinx.coroutines.* import kotliquery.TransactionalSession @@ -7,7 +7,6 @@ import no.nav.k9.los.domene.lager.oppgave.v2.TransactionalManager import no.nav.k9.los.domene.repository.BehandlingProsessEventTilbakeRepository import no.nav.k9.los.eventhandler.DetaljerMetrikker import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9.HistorikkvaskMetrikker -import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9.tilbaketillos.K9TilbakeTilLosAdapterTjeneste import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9saktillos.TilbakeEventTilDtoMapper import no.nav.k9.los.nyoppgavestyring.mottak.oppgave.OppgaveV3 import no.nav.k9.los.nyoppgavestyring.mottak.oppgave.OppgaveV3Tjeneste @@ -142,16 +141,16 @@ class K9TilbakeTilLosHistorikkvaskTjeneste( val behandlingProsessEventer = DetaljerMetrikker.time("k9tilbakeHistorikkvask", "hentEventer") { behandlingProsessEventTilbakeRepository.hentMedLås(tx, uuid).eventer } val høyesteInternVersjon = DetaljerMetrikker.time("k9tilbakeHistorikkvask", "hentHøyesteInternVersjon") { - oppgaveV3Tjeneste.hentHøyesteInternVersjon(uuid.toString(), "k9tilbake", "K9", tx)!! + oppgaveV3Tjeneste.hentHøyesteInternVersjon(uuid.toString(), "k9tilbake", "K9", tx) } var eventNrForBehandling = 0L var oppgaveV3 : OppgaveV3? = null for (event in behandlingProsessEventer) { - if (eventNrForBehandling > høyesteInternVersjon) { + if (høyesteInternVersjon != null && eventNrForBehandling > høyesteInternVersjon) { log.info("Avbryter historikkvask for ${event.eksternId} ved eventTid ${event.eventTid}. Forventer at håndteres av vanlig adaptertjeneste.") break //Historikkvasken har funnet eventer som ennå ikke er lastet inn med normalflyt. Dirty eventer skal håndteres av vanlig adaptertjeneste } - var oppgaveDto = TilbakeEventTilDtoMapper.lagOppgaveDto(event, forrigeOppgave) + val oppgaveDto = TilbakeEventTilDtoMapper.lagOppgaveDto(event, forrigeOppgave) oppgaveV3 = DetaljerMetrikker.time("k9tilbakeHistorikkvask", "utledEksisterendeOppgaveversjon") { oppgaveV3Tjeneste.utledEksisterendeOppgaveversjon(oppgaveDto, eventNrForBehandling, tx) } DetaljerMetrikker.time("k9tilbakeHistorikkvask", "oppdaterEksisterendeOppgaveversjon") { oppgaveV3Tjeneste.oppdaterEksisterendeOppgaveversjon(oppgaveV3, eventNrForBehandling, tx) } diff --git a/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/domeneadaptere/k9/tilbaketillos/K9TilbakeTilLosKorrigerOutOfOrderProcessor.kt b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/domeneadaptere/k9/tilbaketillos/K9TilbakeTilLosKorrigerOutOfOrderProcessor.kt index 9940078dc..39c66edc0 100644 --- a/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/domeneadaptere/k9/tilbaketillos/K9TilbakeTilLosKorrigerOutOfOrderProcessor.kt +++ b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/domeneadaptere/k9/tilbaketillos/K9TilbakeTilLosKorrigerOutOfOrderProcessor.kt @@ -5,7 +5,6 @@ import kotlinx.coroutines.channels.ReceiveChannel import kotlinx.coroutines.launch import no.nav.k9.los.eventhandler.ChannelMetrikker import no.nav.k9.los.eventhandler.asCoroutineDispatcherWithErrorHandling -import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9tilbaketillos.K9TilbakeTilLosHistorikkvaskTjeneste import org.slf4j.LoggerFactory import java.util.* import java.util.concurrent.Executors diff --git a/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/domeneadaptere/k9/tilbaketillos/TilbakeEventTilDtoMapper.kt b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/domeneadaptere/k9/tilbaketillos/TilbakeEventTilDtoMapper.kt index 060030acc..8ab997000 100644 --- a/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/domeneadaptere/k9/tilbaketillos/TilbakeEventTilDtoMapper.kt +++ b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/domeneadaptere/k9/tilbaketillos/TilbakeEventTilDtoMapper.kt @@ -121,10 +121,14 @@ class TilbakeEventTilDtoMapper { ), OppgaveFeltverdiDto( nøkkel = "registrertDato", - //TODO feltet heter *dato, avrunde til dato? verdi = forrigeOppgave?.hentVerdi("registrertDato") ?: event.opprettetBehandling.truncatedTo(ChronoUnit.SECONDS).toString() ), + OppgaveFeltverdiDto( + nøkkel = "mottattDato", + verdi = forrigeOppgave?.hentVerdi("mottattDato") + ?: event.opprettetBehandling.truncatedTo(ChronoUnit.SECONDS).toString() + ), OppgaveFeltverdiDto( nøkkel = "feilutbetaltBeløp", verdi = event.feilutbetaltBeløp?.toString() ?: forrigeOppgave?.hentVerdi("feilutbetaltBeløp") diff --git a/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/ko/AntallOppgaver.kt b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/ko/AntallOppgaver.kt new file mode 100644 index 000000000..7855cbfd5 --- /dev/null +++ b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/ko/AntallOppgaver.kt @@ -0,0 +1,3 @@ +package no.nav.k9.los.nyoppgavestyring.ko + +data class AntallOppgaver(val antallUtenReserverte: Long) diff --git a/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/ko/OppgaveKoApis.kt b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/ko/OppgaveKoApis.kt index 201efe69d..05a97bbee 100644 --- a/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/ko/OppgaveKoApis.kt +++ b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/ko/OppgaveKoApis.kt @@ -1,7 +1,7 @@ package no.nav.k9.los.nyoppgavestyring.ko import io.ktor.http.* -import io.ktor.server.application.call +import io.ktor.server.application.* import io.ktor.server.request.* import io.ktor.server.response.* import io.ktor.server.routing.* @@ -11,82 +11,83 @@ import no.nav.k9.los.integrasjon.rest.RequestContextService import no.nav.k9.los.integrasjon.rest.idToken import no.nav.k9.los.nyoppgavestyring.ko.dto.* import no.nav.k9.los.utils.OpentelemetrySpanUtil -import org.koin.java.KoinJavaComponent import org.koin.ktor.ext.inject fun Route.OppgaveKoApis() { val requestContextService by inject() val oppgaveKoTjeneste by inject() val saksbehandlerRepository by inject() - val pepClient by KoinJavaComponent.inject(IPepClient::class.java) + val pepClient by inject() get("/") { requestContextService.withRequestContext(call) { - if (!pepClient.erOppgaveStyrer()) { + if (pepClient.erOppgaveStyrer()) { + val oppgavekøer = oppgaveKoTjeneste.hentOppgavekøer() + .map { oppgaveko -> + OppgaveKoListeelement( + id = oppgaveko.id, + tittel = oppgaveko.tittel, + antallSaksbehandlere = oppgaveko.saksbehandlere.size, + sistEndret = oppgaveko.endretTidspunkt + ) + } + + call.respond(OppgaveKoListeDto(oppgavekøer)) + } else { call.respond(HttpStatusCode.Forbidden) } - - val oppgavekøer = oppgaveKoTjeneste.hentOppgavekøer() - .map { oppgaveko -> - OppgaveKoListeelement( - id = oppgaveko.id, - tittel = oppgaveko.tittel, - antallSaksbehandlere = oppgaveko.saksbehandlere.size, - sistEndret = oppgaveko.endretTidspunkt - ) - } - - call.respond(OppgaveKoListeDto(oppgavekøer)) } } post("/kopier") { - val kopierOppgaveKoDto = call.receive() requestContextService.withRequestContext(call) { - if (!pepClient.erOppgaveStyrer()) { + if (pepClient.erOppgaveStyrer()) { + val kopierOppgaveKoDto = call.receive() + call.respond( + oppgaveKoTjeneste.kopier( + kopierOppgaveKoDto.kopierFraOppgaveId, + kopierOppgaveKoDto.tittel, + kopierOppgaveKoDto.taMedQuery, + kopierOppgaveKoDto.taMedSaksbehandlere + ) + ) + } else { call.respond(HttpStatusCode.Forbidden) } - call.respond( - oppgaveKoTjeneste.kopier( - kopierOppgaveKoDto.kopierFraOppgaveId, - kopierOppgaveKoDto.tittel, - kopierOppgaveKoDto.taMedQuery, - kopierOppgaveKoDto.taMedSaksbehandlere - ) - ) } } post("/opprett") { - val opprettOppgaveKoDto = call.receive() requestContextService.withRequestContext(call) { - if (!pepClient.erOppgaveStyrer()) { + if (pepClient.erOppgaveStyrer()) { + val opprettOppgaveKoDto = call.receive() + val harSkjermetTilgang = pepClient.harTilgangTilKode6() + call.respond(oppgaveKoTjeneste.leggTil(opprettOppgaveKoDto.tittel, skjermet = harSkjermetTilgang)) + } else { call.respond(HttpStatusCode.Forbidden) } - val harSkjermetTilgang = pepClient.harTilgangTilKode6() - call.respond(oppgaveKoTjeneste.leggTil(opprettOppgaveKoDto.tittel, skjermet = harSkjermetTilgang)) } } get("/{id}") { requestContextService.withRequestContext(call) { - val oppgavekøId = call.parameters["id"]!! - if (!pepClient.erOppgaveStyrer()) { + if (pepClient.erOppgaveStyrer()) { + val oppgavekøId = call.parameters["id"]!! + call.respond(oppgaveKoTjeneste.hent(oppgavekøId.toLong())) + } else { call.respond(HttpStatusCode.Forbidden) } - - call.respond(oppgaveKoTjeneste.hent(oppgavekøId.toLong())) } } delete("/{id}") { requestContextService.withRequestContext(call) { - val oppgavekøId = call.parameters["id"]!! - if (!pepClient.erOppgaveStyrer()) { + if (pepClient.erOppgaveStyrer()) { + val oppgavekøId = call.parameters["id"]!! + call.respond(oppgaveKoTjeneste.slett(oppgavekøId.toLong())) + } else { call.respond(HttpStatusCode.Forbidden) } - - call.respond(oppgaveKoTjeneste.slett(oppgavekøId.toLong())) } } @@ -106,8 +107,8 @@ fun Route.OppgaveKoApis() { get("/{id}/oppgaver") { requestContextService.withRequestContext(call) { - val oppgavekøId = call.parameters["id"]!! - if (pepClient.harTilgangTilReservingAvOppgaver()) { + if (pepClient.harTilgangTilReserveringAvOppgaver()) { + val oppgavekøId = call.parameters["id"]!! call.respond( oppgaveKoTjeneste.hentOppgaverFraKø( oppgavekøId.toLong(), @@ -124,58 +125,66 @@ fun Route.OppgaveKoApis() { get("/{id}/saksbehandlere") { requestContextService.withRequestContext(call) { - val oppgavekøId = call.parameters["id"]!! - call.respond( - oppgaveKoTjeneste.hentSaksbehandlereForKo(oppgavekøId.toLong()) - ) + if (pepClient.harBasisTilgang()) { + val oppgavekøId = call.parameters["id"]!! + call.respond( + oppgaveKoTjeneste.hentSaksbehandlereForKo(oppgavekøId.toLong()) + ) + } else { + call.respond(HttpStatusCode.Forbidden) + } } } - // TODO: Slett dette endepunktet når /antall blir tatt i bruk - get("/{id}/antall-oppgaver") { + get("/{id}/antall") { requestContextService.withRequestContext(call) { - val oppgavekøId = call.parameters["id"]!! - val filtrerReserverte = call.request.queryParameters["filtrer_reserverte"]?.let { it.toBoolean() } ?: true + if (pepClient.harBasisTilgang()) { + val oppgavekøId = call.parameters["id"]!! - val antall = OpentelemetrySpanUtil.span("OppgaveKoTjeneste.hentAntallOppgaverForKø") { - oppgaveKoTjeneste.hentAntallOppgaverForKø( - oppgavekøId.toLong(), - filtrerReserverte - ) + val antallUtenReserverte = OpentelemetrySpanUtil.span("OppgaveKoTjeneste.hentAntallOppgaverForKø") { + oppgaveKoTjeneste.hentAntallOppgaverForKø( + oppgavekøId.toLong(), + true + ) + } + val antallMedReserverte = OpentelemetrySpanUtil.span("OppgaveKoTjeneste.hentAntallOppgaverForKø") { + oppgaveKoTjeneste.hentAntallOppgaverForKø( + oppgavekøId.toLong(), + false + ) + } + call.respond(AntallOppgaverOgReserverte(antallUtenReserverte, antallMedReserverte)) + } else { + call.respond(HttpStatusCode.Forbidden) } - call.respond(antall) } } - get("/{id}/antall") { + get("/{id}/antall-uten-reserverte") { requestContextService.withRequestContext(call) { - val oppgavekøId = call.parameters["id"]!! + if (pepClient.harBasisTilgang()) { + val oppgavekøId = call.parameters["id"]!! - val antallUtenReserverte = OpentelemetrySpanUtil.span("OppgaveKoTjeneste.hentAntallOppgaverForKø") { - oppgaveKoTjeneste.hentAntallOppgaverForKø( - oppgavekøId.toLong(), - true - ) - } - val antallMedReserverte = OpentelemetrySpanUtil.span("OppgaveKoTjeneste.hentAntallOppgaverForKø") { - oppgaveKoTjeneste.hentAntallOppgaverForKø( - oppgavekøId.toLong(), - false - ) + val antallUtenReserverte = OpentelemetrySpanUtil.span("OppgaveKoTjeneste.hentAntallOppgaverForKø") { + oppgaveKoTjeneste.hentAntallOppgaverForKø( + oppgavekøId.toLong(), + true + ) + } + call.respond(AntallOppgaver(antallUtenReserverte)) + } else { + call.respond(HttpStatusCode.Forbidden) } - call.respond(AntallOppgaverOgReserverte(antallUtenReserverte, antallMedReserverte)) } } post("/{id}/fa-oppgave") { requestContextService.withRequestContext(call) { - val oppgavekøId = call.parameters["id"]!! - - val innloggetBruker = saksbehandlerRepository.finnSaksbehandlerMedEpost( - kotlin.coroutines.coroutineContext.idToken().getUsername() - )!! - - if (pepClient.harTilgangTilReservingAvOppgaver()) { + if (pepClient.harTilgangTilReserveringAvOppgaver()) { + val oppgavekøId = call.parameters["id"]!! + val innloggetBruker = saksbehandlerRepository.finnSaksbehandlerMedEpost( + kotlin.coroutines.coroutineContext.idToken().getUsername() + )!! val (reservertOppgave, reservasjonFraKø) = oppgaveKoTjeneste.taReservasjonFraKø( innloggetBrukerId = innloggetBruker.id!!, oppgaveKoId = oppgavekøId.toLong(), @@ -194,12 +203,13 @@ fun Route.OppgaveKoApis() { } post("") { - val oppgaveKo = call.receive() requestContextService.withRequestContext(call) { - if (!pepClient.erOppgaveStyrer()) { + if (pepClient.erOppgaveStyrer()) { + val oppgaveKo = call.receive() + call.respond(oppgaveKoTjeneste.endre(oppgaveKo)) + } else { call.respond(HttpStatusCode.Forbidden) } - call.respond(oppgaveKoTjeneste.endre(oppgaveKo)) } } } \ No newline at end of file diff --git a/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/mottak/feltdefinisjon/FeltdefinisjonApi.kt b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/mottak/feltdefinisjon/FeltdefinisjonApi.kt index 66a00162c..45095fff4 100644 --- a/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/mottak/feltdefinisjon/FeltdefinisjonApi.kt +++ b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/mottak/feltdefinisjon/FeltdefinisjonApi.kt @@ -4,14 +4,13 @@ import io.ktor.http.* import io.ktor.server.application.* import io.ktor.server.request.* import io.ktor.server.response.* -import io.ktor.server.routing.Route -import io.ktor.server.routing.post +import io.ktor.server.routing.* import no.nav.k9.los.Configuration import no.nav.k9.los.integrasjon.rest.RequestContextService import no.nav.k9.los.nyoppgavestyring.feilhandtering.IllegalDeleteException import org.koin.ktor.ext.inject -import org.postgresql.util.PSQLException +// Må legge til tilgangskontroll dersom disse endepunktene aktiveres internal fun Route.FeltdefinisjonApi() { val requestContextService by inject() val feltdefinisjonTjeneste by inject() diff --git a/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/mottak/oppgave/OppgaveV3Api.kt b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/mottak/oppgave/OppgaveV3Api.kt index 90b105a0d..a33fcb5c1 100644 --- a/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/mottak/oppgave/OppgaveV3Api.kt +++ b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/mottak/oppgave/OppgaveV3Api.kt @@ -1,7 +1,5 @@ package no.nav.k9.los.nyoppgavestyring.mottak.oppgave -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule -import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import io.ktor.http.* import io.ktor.server.application.* import io.ktor.server.request.* @@ -9,19 +7,14 @@ import io.ktor.server.response.* import io.ktor.server.routing.* import no.nav.k9.los.Configuration import no.nav.k9.los.domene.lager.oppgave.v2.TransactionalManager -import no.nav.k9.los.domene.modell.K9SakModell -import no.nav.k9.los.domene.repository.BehandlingProsessEventK9Repository import no.nav.k9.los.integrasjon.rest.RequestContextService -import no.nav.k9.los.nyoppgavestyring.domeneadaptere.k9.saktillos.K9SakTilLosAdapterTjeneste import org.koin.ktor.ext.inject -import java.time.LocalDateTime -import java.util.* +// Må legge til tilgangskontroll dersom disse endepunktene aktiveres internal fun Route.OppgaveV3Api() { val requestContextService by inject() val oppgaveV3Tjeneste by inject() val transactionalManager by inject() - val behandlingProsessEventK9Repository by inject() val config by inject() put { diff --git a/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/mottak/oppgavetype/OppgavetypeApi.kt b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/mottak/oppgavetype/OppgavetypeApi.kt index d6dd928f2..f478a72c7 100644 --- a/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/mottak/oppgavetype/OppgavetypeApi.kt +++ b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/mottak/oppgavetype/OppgavetypeApi.kt @@ -11,6 +11,7 @@ import no.nav.k9.los.nyoppgavestyring.feilhandtering.IllegalDeleteException import no.nav.k9.los.nyoppgavestyring.feilhandtering.MissingDefaultException import org.koin.ktor.ext.inject +// Må legge til tilgangskontroll dersom disse endepunktene aktiveres internal fun Route.OppgavetypeApi() { val requestContextService by inject() val oppgavetypeTjeneste by inject() diff --git a/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/query/OppgaveQueryApis.kt b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/query/OppgaveQueryApis.kt index acc814f72..095f6083e 100644 --- a/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/query/OppgaveQueryApis.kt +++ b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/query/OppgaveQueryApis.kt @@ -2,10 +2,9 @@ package no.nav.k9.los.nyoppgavestyring.query import io.ktor.http.* import io.ktor.server.application.* -import io.ktor.server.locations.* import io.ktor.server.request.* import io.ktor.server.response.* -import io.ktor.server.routing.Route +import io.ktor.server.routing.* import no.nav.k9.los.integrasjon.abac.IPepClient import no.nav.k9.los.integrasjon.rest.RequestContextService import no.nav.k9.los.integrasjon.rest.idToken @@ -18,64 +17,65 @@ fun Route.OppgaveQueryApis() { val oppgaveQueryService by inject() val pepClient by KoinJavaComponent.inject(IPepClient::class.java) - @Location("/query") - class queryOppgave - - post { _: queryOppgave -> - val oppgaveQuery = call.receive() + post("/query") { requestContextService.withRequestContext(call) { - val idToken = kotlin.coroutines.coroutineContext.idToken() - call.respond(oppgaveQueryService.query(QueryRequest(oppgaveQuery), idToken)) + if (pepClient.harBasisTilgang()) { + val oppgaveQuery = call.receive() + val idToken = kotlin.coroutines.coroutineContext.idToken() + call.respond(oppgaveQueryService.query(QueryRequest(oppgaveQuery), idToken)) + } else { + call.respond(HttpStatusCode.Forbidden) + } } } - @Location("/query/antall") - class queryOppgaveAntall - - post { _: queryOppgaveAntall -> - val oppgaveQuery = call.receive() + post("/query/antall") { requestContextService.withRequestContext(call) { - call.respond(oppgaveQueryService.queryForAntall(QueryRequest(oppgaveQuery, false))) + if (pepClient.harBasisTilgang()) { + val oppgaveQuery = call.receive() + call.respond(oppgaveQueryService.queryForAntall(QueryRequest(oppgaveQuery, false))) + } else { + call.respond(HttpStatusCode.Forbidden) + } } } - @Location("/validate") - class validateOppgave - - post { _: validateOppgave -> - val oppgaveQuery = call.receive() + post("/validate") { requestContextService.withRequestContext(call) { - if (!pepClient.erOppgaveStyrer()) { + if (pepClient.harBasisTilgang()) { + val oppgaveQuery = call.receive() + call.respond(oppgaveQueryService.validate(QueryRequest(oppgaveQuery))) + } else { call.respond(HttpStatusCode.Forbidden) } - call.respond(oppgaveQueryService.validate(QueryRequest(oppgaveQuery))) } } - @Location("/queryToFile") - class queryOppgaveToFile - - post { _: queryOppgaveToFile -> - val oppgaveQuery = call.receive() + post("/queryToFile") { requestContextService.withRequestContext(call) { - val idToken = kotlin.coroutines.coroutineContext.idToken() - - call.response.header( - HttpHeaders.ContentDisposition, - ContentDisposition.Attachment.withParameter( - ContentDisposition.Parameters.FileName, "oppgaver.csv" - ).toString() - ) - call.respondText(oppgaveQueryService.queryToFile(QueryRequest(oppgaveQuery), idToken)) + if (pepClient.harBasisTilgang()) { + val oppgaveQuery = call.receive() + val idToken = kotlin.coroutines.coroutineContext.idToken() + call.response.header( + HttpHeaders.ContentDisposition, + ContentDisposition.Attachment.withParameter( + ContentDisposition.Parameters.FileName, "oppgaver.csv" + ).toString() + ) + call.respondText(oppgaveQueryService.queryToFile(QueryRequest(oppgaveQuery), idToken)) + } else { + call.respond(HttpStatusCode.Forbidden) + } } } - @Location("/felter") - class hentAlleFelter - - get { _: hentAlleFelter -> + get("/felter") { requestContextService.withRequestContext(call) { - call.respond(oppgaveQueryService.hentAlleFelter()) + if (pepClient.harBasisTilgang()) { + call.respond(oppgaveQueryService.hentAlleFelter()) + } else { + call.respond(HttpStatusCode.Forbidden) + } } } } \ No newline at end of file diff --git "a/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/s\303\270keboks/S\303\270keboksApi.kt" "b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/s\303\270keboks/S\303\270keboksApi.kt" index 0f8668020..8e8eca52e 100644 --- "a/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/s\303\270keboks/S\303\270keboksApi.kt" +++ "b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/s\303\270keboks/S\303\270keboksApi.kt" @@ -6,6 +6,7 @@ import io.ktor.server.application.* import io.ktor.server.request.* import io.ktor.server.response.* import io.ktor.server.routing.* +import no.nav.k9.los.integrasjon.abac.IPepClient import no.nav.k9.los.integrasjon.rest.RequestContextService import org.koin.ktor.ext.inject @@ -13,6 +14,7 @@ import org.koin.ktor.ext.inject fun Route.SøkeboksApi() { val requestContextService by inject() val søkeboksTjeneste by inject() + val pepClient by inject() post( { @@ -24,9 +26,13 @@ fun Route.SøkeboksApi() { } } ) { - val søkQuery = call.receive() requestContextService.withRequestContext(call) { - call.respond(søkeboksTjeneste.finnOppgaver(søkQuery.searchString)) + if (pepClient.harBasisTilgang()) { + val søkQuery = call.receive() + call.respond(søkeboksTjeneste.finnOppgaver(søkQuery.searchString)) + } else { + call.respond(HttpStatusCode.Forbidden) + } } } } \ No newline at end of file diff --git a/src/main/kotlin/no/nav/k9/los/tjenester/avdelingsleder/AvdelingslederApis.kt b/src/main/kotlin/no/nav/k9/los/tjenester/avdelingsleder/AvdelingslederApis.kt index 172b47916..e060633f1 100644 --- a/src/main/kotlin/no/nav/k9/los/tjenester/avdelingsleder/AvdelingslederApis.kt +++ b/src/main/kotlin/no/nav/k9/los/tjenester/avdelingsleder/AvdelingslederApis.kt @@ -1,10 +1,12 @@ package no.nav.k9.los.tjenester.avdelingsleder +import io.ktor.http.* import io.ktor.server.application.* import io.ktor.server.request.* import io.ktor.server.response.* import io.ktor.server.routing.* import no.nav.k9.los.domene.repository.SaksbehandlerRepository +import no.nav.k9.los.integrasjon.abac.IPepClient import no.nav.k9.los.integrasjon.rest.RequestContextService import no.nav.k9.los.integrasjon.rest.idToken import no.nav.k9.los.tjenester.saksbehandler.oppgave.OppgaveTjeneste @@ -16,53 +18,90 @@ internal fun Route.AvdelingslederApis() { val avdelingslederTjeneste by inject() val requestContextService by inject() val saksbehandlerRepository by inject() + val pepClient by inject() get("/oppgaver/antall-totalt") { requestContextService.withRequestContext(call) { - call.respond(oppgaveTjeneste.hentAntallOppgaverTotalt()) //TODO Må også telle oppgaver som finnes i V3 men ikke V1 (klageoppgaver)? + if (pepClient.erOppgaveStyrer()) { + call.respond(oppgaveTjeneste.hentAntallOppgaverTotalt()) //TODO Må også telle oppgaver som finnes i V3 men ikke V1 (klageoppgaver)? + } else { + call.respond(HttpStatusCode.Forbidden) + } } } //Gjelder bare gamle køer. For nye, bruk oppgaveKoApis/{id}/antall-oppgaver::GET get("/oppgaver/antall") { requestContextService.withRequestContext(call) { - val uuid = call.parameters["id"] - call.respond( - oppgaveTjeneste.hentAntallOppgaver( - oppgavekøId = UUID.fromString(uuid), - taMedReserverte = true + if (pepClient.erOppgaveStyrer()) { + val uuid = call.parameters["id"] + call.respond( + oppgaveTjeneste.hentAntallOppgaver( + oppgavekøId = UUID.fromString(uuid), + taMedReserverte = true + ) ) - ) + } else { + call.respond(HttpStatusCode.Forbidden) + } } } get("/saksbehandlere") { requestContextService.withRequestContext(call) { - println("/saksbehandlere") - call.respond(avdelingslederTjeneste.hentSaksbehandlere()) + if (pepClient.erOppgaveStyrer()) { + call.respond(avdelingslederTjeneste.hentSaksbehandlere()) + } else { + call.respond(HttpStatusCode.Forbidden) + } } } + // TODO: slett når frontend har begynt å bruke nytt endepunkt post("/saksbehandlere/sok") { requestContextService.withRequestContext(call) { - val epost = call.receive() - call.respond(avdelingslederTjeneste.søkSaksbehandler(epost)) + if (pepClient.erOppgaveStyrer()) { + val epost = call.receive() + call.respond(avdelingslederTjeneste.søkSaksbehandler(epost)) + } else { + call.respond(HttpStatusCode.Forbidden) + } + } + } + + post("/saksbehandlere/legg-til") { + requestContextService.withRequestContext(call) { + if (pepClient.erOppgaveStyrer()) { + val epost = call.receive() + call.respond(avdelingslederTjeneste.leggTilSaksbehandler(epost.epost)) + } else { + call.respond(HttpStatusCode.Forbidden) + } } } post("/saksbehandlere/slett") { requestContextService.withRequestContext(call) { - val epost = call.receive() - call.respond(avdelingslederTjeneste.slettSaksbehandler(epost.epost)) + if (pepClient.erOppgaveStyrer()) { + val epost = call.receive() + call.respond(avdelingslederTjeneste.slettSaksbehandler(epost.epost)) + } else { + call.respond(HttpStatusCode.Forbidden) + } } } get("/reservasjoner") { requestContextService.withRequestContext(call) { - val innloggetBruker = saksbehandlerRepository.finnSaksbehandlerMedEpost( - kotlin.coroutines.coroutineContext.idToken().getUsername() - )!! - call.respond(avdelingslederTjeneste.hentAlleAktiveReservasjonerV3(innloggetBruker)) + if (pepClient.erOppgaveStyrer()) { + val innloggetBruker = saksbehandlerRepository.finnSaksbehandlerMedEpost( + kotlin.coroutines.coroutineContext.idToken().getUsername() + )!! + call.respond(avdelingslederTjeneste.hentAlleAktiveReservasjonerV3(innloggetBruker)) + } else { + call.respond(HttpStatusCode.Forbidden) + } } } } + diff --git a/src/main/kotlin/no/nav/k9/los/tjenester/avdelingsleder/AvdelingslederTjeneste.kt b/src/main/kotlin/no/nav/k9/los/tjenester/avdelingsleder/AvdelingslederTjeneste.kt index 8ef61e108..3d7c70dd3 100644 --- a/src/main/kotlin/no/nav/k9/los/tjenester/avdelingsleder/AvdelingslederTjeneste.kt +++ b/src/main/kotlin/no/nav/k9/los/tjenester/avdelingsleder/AvdelingslederTjeneste.kt @@ -6,7 +6,6 @@ import no.nav.k9.los.domene.repository.OppgaveKøRepository import no.nav.k9.los.domene.repository.SaksbehandlerRepository import no.nav.k9.los.integrasjon.abac.IPepClient import no.nav.k9.los.nyoppgavestyring.ko.db.OppgaveKoRepository -import no.nav.k9.los.nyoppgavestyring.ko.dto.OppgaveKo import no.nav.k9.los.nyoppgavestyring.reservasjon.ReservasjonV3Tjeneste import no.nav.k9.los.nyoppgavestyring.visningoguttrekk.OppgaveNøkkelDto import no.nav.k9.los.tjenester.avdelingsleder.oppgaveko.* @@ -33,9 +32,6 @@ class AvdelingslederTjeneste( } suspend fun hentOppgaveKøer(): List { - if (!erOppgaveStyrer()) { - return emptyList() - } return oppgaveKøRepository.hent().map { lagOppgaveKøDto(it) }.sortedBy { it.navn } @@ -63,13 +59,7 @@ class AvdelingslederTjeneste( kriterier = oppgaveKø.lagKriterier() ) - private suspend fun erOppgaveStyrer() = (pepClient.erOppgaveStyrer()) - suspend fun opprettOppgaveKø(): IdDto { - if (!erOppgaveStyrer()) { - return IdDto(UUID.randomUUID().toString()) - } - val uuid = UUID.randomUUID() oppgaveKøRepository.lagre(uuid) { OppgaveKø( @@ -91,12 +81,10 @@ class AvdelingslederTjeneste( } suspend fun slettOppgavekø(uuid: UUID) { - if (!erOppgaveStyrer()) { - return - } oppgaveKøRepository.slett(uuid) } + // TODO: slett når frontend har begynt å bruke nytt endepunkt suspend fun søkSaksbehandler(epostDto: EpostDto): Saksbehandler { var saksbehandler = saksbehandlerRepository.finnSaksbehandlerMedEpost(epostDto.epost) if (saksbehandler == null) { @@ -108,6 +96,15 @@ class AvdelingslederTjeneste( return saksbehandler } + suspend fun leggTilSaksbehandler(epost: String) { + if (saksbehandlerRepository.finnSaksbehandlerMedEpost(epost) != null) { + throw IllegalStateException("Saksbehandler finnes fra før") + } + // lagrer med tomme verdier, disse blir populert etter at saksbehandleren har logget seg inn + val saksbehandler = Saksbehandler(null, null, null, epost, mutableSetOf(), null) + saksbehandlerRepository.addSaksbehandler(saksbehandler) + } + suspend fun slettSaksbehandler( epost: String, ) { @@ -221,8 +218,7 @@ class AvdelingslederTjeneste( } suspend fun endreKriterium(kriteriumDto: AndreKriterierDto) { - oppgaveKøRepository.lagre(UUID.fromString(kriteriumDto.id)) - { oppgaveKø -> + oppgaveKøRepository.lagre(UUID.fromString(kriteriumDto.id)) { oppgaveKø -> if (kriteriumDto.checked) { oppgaveKø!!.filtreringAndreKriterierType = oppgaveKø.filtreringAndreKriterierType.filter { it.andreKriterierType != kriteriumDto.andreKriterierType diff --git a/src/main/kotlin/no/nav/k9/los/tjenester/avdelingsleder/nokkeltall/NokkeltallApis.kt b/src/main/kotlin/no/nav/k9/los/tjenester/avdelingsleder/nokkeltall/NokkeltallApis.kt index 7ce8aa576..b55772b53 100644 --- a/src/main/kotlin/no/nav/k9/los/tjenester/avdelingsleder/nokkeltall/NokkeltallApis.kt +++ b/src/main/kotlin/no/nav/k9/los/tjenester/avdelingsleder/nokkeltall/NokkeltallApis.kt @@ -1,11 +1,8 @@ package no.nav.k9.los.tjenester.avdelingsleder.nokkeltall -import io.ktor.http.* -import io.ktor.server.application.call -import io.ktor.server.locations.Location -import io.ktor.server.locations.get +import io.ktor.server.application.* import io.ktor.server.response.* -import io.ktor.server.routing.Route +import io.ktor.server.routing.* import no.nav.k9.los.integrasjon.rest.RequestContextService import no.nav.k9.los.tjenester.saksbehandler.oppgave.OppgaveTjeneste import org.koin.ktor.ext.inject @@ -17,49 +14,31 @@ fun Route.NokkeltallApis() { val oppgaveTjeneste by inject() val requestContextService by inject() - @Location("/behandlinger-under-arbeid") - class getAlleOppgaver - - get { _: getAlleOppgaver -> + get("/behandlinger-under-arbeid") { requestContextService.withRequestContext(call) { call.respond(nokkeltallTjeneste.hentOppgaverUnderArbeid()) } } - @Location("/beholdning-historikk") - class getAntallOppgaverPerDato - - get { _: getAntallOppgaverPerDato -> + get("/beholdning-historikk") { call.respond(oppgaveTjeneste.hentBeholdningAvOppgaverPerAntallDager()) } - @Location("/nye-ferdigstilte-oppsummering") - class getNyeFerdigstilteOppgaver - - get { _: getNyeFerdigstilteOppgaver -> + get("/nye-ferdigstilte-oppsummering") { call.respond(nokkeltallTjeneste.hentNyeFerdigstilteOppgaverOppsummering()) } - @Location("/dagens-tall") - class hentDagensTall - - get { _: hentDagensTall -> + get("/dagens-tall") { requestContextService.withRequestContext(call) { call.respond(nokkeltallTjeneste.hentDagensTall()) } } - @Location("/ferdigstilte-historikk") - class HentFerdigstilteSiste8Uker - - get { _: HentFerdigstilteSiste8Uker -> + get("/ferdigstilte-historikk") { call.respond(nokkeltallTjeneste.hentFerdigstilteSiste8Uker()) } - @Location("/aksjonspunkter-per-enhet-historikk") - class HentFullførteOppgaverPrEnhetOgYtelse - - get { _: HentFullførteOppgaverPrEnhetOgYtelse -> + get("/aksjonspunkter-per-enhet-historikk") { val historikk = nokkeltallTjeneste.hentFerdigstilteOppgaverHistorikk( VelgbartHistorikkfelt.DATO, VelgbartHistorikkfelt.ENHET, @@ -69,18 +48,11 @@ fun Route.NokkeltallApis() { call.respond(historikk) } - @Location("/nye-historikk") - class hentNyeSiste8Uker - - get { _: hentNyeSiste8Uker -> + get("/nye-historikk") { call.respond(nokkeltallTjeneste.hentNyeSiste8Uker()) } - @Location("/alle-paa-vent_v2") - class HentAllePåVentV2 - - get { _: HentAllePåVentV2 -> + get("/alle-paa-vent_v2") { call.respond(nokkeltallTjeneste.hentOppgaverPåVentV2()) } - } \ No newline at end of file diff --git a/src/main/kotlin/no/nav/k9/los/tjenester/avdelingsleder/oppgaveko/AvdelingslederOppgavekoApis.kt b/src/main/kotlin/no/nav/k9/los/tjenester/avdelingsleder/oppgaveko/AvdelingslederOppgavekoApis.kt index 0f688aa6d..daffc9ef7 100644 --- a/src/main/kotlin/no/nav/k9/los/tjenester/avdelingsleder/oppgaveko/AvdelingslederOppgavekoApis.kt +++ b/src/main/kotlin/no/nav/k9/los/tjenester/avdelingsleder/oppgaveko/AvdelingslederOppgavekoApis.kt @@ -1,11 +1,11 @@ package no.nav.k9.los.tjenester.avdelingsleder.oppgaveko -import io.ktor.server.application.call -import io.ktor.server.request.receive -import io.ktor.server.response.respond -import io.ktor.server.routing.Route -import io.ktor.server.routing.get -import io.ktor.server.routing.post +import io.ktor.http.* +import io.ktor.server.application.* +import io.ktor.server.request.* +import io.ktor.server.response.* +import io.ktor.server.routing.* +import no.nav.k9.los.integrasjon.abac.IPepClient import no.nav.k9.los.integrasjon.rest.RequestContextService import no.nav.k9.los.tjenester.avdelingsleder.AvdelingslederTjeneste import org.koin.ktor.ext.inject @@ -14,100 +14,157 @@ import java.util.* fun Route.AvdelingslederOppgavekøApis() { val avdelingslederTjeneste by inject() val requestContextService by inject() + val pepClient by inject() get { requestContextService.withRequestContext(call) { - call.respond(avdelingslederTjeneste.hentOppgaveKøer()) + if (pepClient.erOppgaveStyrer()) { + call.respond(avdelingslederTjeneste.hentOppgaveKøer()) + } else { + call.respond(HttpStatusCode.Forbidden) + } } } post { requestContextService.withRequestContext(call) { - call.respond(avdelingslederTjeneste.opprettOppgaveKø()) + if (pepClient.erOppgaveStyrer()) { + call.respond(avdelingslederTjeneste.opprettOppgaveKø()) + } else { + call.respond(HttpStatusCode.Forbidden) + } } } post("/navn") { requestContextService.withRequestContext(call) { - val uuid = call.receive() - call.respond(avdelingslederTjeneste.endreOppgavekøNavn(uuid)) + if (pepClient.erOppgaveStyrer()) { + val oppgavekøNavnDto = call.receive() + call.respond(avdelingslederTjeneste.endreOppgavekøNavn(oppgavekøNavnDto)) + } else { + call.respond(HttpStatusCode.Forbidden) + } } } post("/slett") { requestContextService.withRequestContext(call) { - val uuid = call.receive() - call.respond(avdelingslederTjeneste.slettOppgavekø(UUID.fromString(uuid.id))) + if (pepClient.erOppgaveStyrer()) { + val (id) = call.receive() + call.respond(avdelingslederTjeneste.slettOppgavekø(UUID.fromString(id))) + } else { + call.respond(HttpStatusCode.Forbidden) + } } } get("/hent") { requestContextService.withRequestContext(call) { - val uuid = call.request.queryParameters["id"] - call.respond(avdelingslederTjeneste.hentOppgaveKø(UUID.fromString(uuid))) + if (pepClient.erOppgaveStyrer()) { + val uuid = call.request.queryParameters["id"] + call.respond(avdelingslederTjeneste.hentOppgaveKø(UUID.fromString(uuid))) + } else { + call.respond(HttpStatusCode.Forbidden) + } } } post("/behandlingstype") { requestContextService.withRequestContext(call) { - val behandling = call.receive() - call.respond(avdelingslederTjeneste.endreBehandlingsTyper(behandling)) + if (pepClient.erOppgaveStyrer()) { + val behandling = call.receive() + call.respond(avdelingslederTjeneste.endreBehandlingsTyper(behandling)) + } else { + call.respond(HttpStatusCode.Forbidden) + } } } post("/skjermet") { requestContextService.withRequestContext(call) { - val behandling = call.receive() - call.respond(avdelingslederTjeneste.endreSkjerming(behandling)) + if (pepClient.erOppgaveStyrer()) { + val behandling = call.receive() + call.respond(avdelingslederTjeneste.endreSkjerming(behandling)) + } else { + call.respond(HttpStatusCode.Forbidden) + } } } post("/ytelsetype") { requestContextService.withRequestContext(call) { - val ytelse = call.receive() - call.respond(avdelingslederTjeneste.endreYtelsesType(ytelse)) + if (pepClient.erOppgaveStyrer()) { + val ytelse = call.receive() + call.respond(avdelingslederTjeneste.endreYtelsesType(ytelse)) + } else { + call.respond(HttpStatusCode.Forbidden) + } } } post("/andre-kriterier") { requestContextService.withRequestContext(call) { - val kriterium = call.receive() - call.respond(avdelingslederTjeneste.endreKriterium(kriterium)) + if (pepClient.erOppgaveStyrer()) { + val kriterium = call.receive() + call.respond(avdelingslederTjeneste.endreKriterium(kriterium)) + } else { + call.respond(HttpStatusCode.Forbidden) + } } } post("/sortering") { requestContextService.withRequestContext(call) { - val sortering = call.receive() - call.respond(avdelingslederTjeneste.endreKøSortering(sortering)) + if (pepClient.erOppgaveStyrer()) { + val sortering = call.receive() + call.respond(avdelingslederTjeneste.endreKøSortering(sortering)) + } else { + call.respond(HttpStatusCode.Forbidden) + } } } post("/sortering-tidsintervall-dato") { requestContextService.withRequestContext(call) { - val sortering = call.receive() - call.respond(avdelingslederTjeneste.endreKøSorteringDato(sortering)) + if (pepClient.erOppgaveStyrer()) { + val sortering = call.receive() + call.respond(avdelingslederTjeneste.endreKøSorteringDato(sortering)) + } else { + call.respond(HttpStatusCode.Forbidden) + } } } post("/saksbehandler") { requestContextService.withRequestContext(call) { - val saksbehandler = call.receive() - call.respond(avdelingslederTjeneste.leggFjernSaksbehandlerOppgavekø(saksbehandler)) + if (pepClient.erOppgaveStyrer()) { + val saksbehandler = call.receive() + call.respond(avdelingslederTjeneste.leggFjernSaksbehandlerOppgavekø(saksbehandler)) + } else { + call.respond(HttpStatusCode.Forbidden) + } } } post("/saksbehandlere") { requestContextService.withRequestContext(call) { - val saksbehandlere = call.receive>() - call.respond(avdelingslederTjeneste.leggFjernSaksbehandlereFraOppgaveKø(saksbehandlere)) + if (pepClient.erOppgaveStyrer()) { + val saksbehandlere = call.receive>() + call.respond(avdelingslederTjeneste.leggFjernSaksbehandlereFraOppgaveKø(saksbehandlere)) + } else { + call.respond(HttpStatusCode.Forbidden) + } } } post("/kriterier") { requestContextService.withRequestContext(call) { - val kriterier = call.receive() - call.respond(avdelingslederTjeneste.endreKøKriterier(kriterier)) + if (pepClient.erOppgaveStyrer()) { + val kriterier = call.receive() + call.respond(avdelingslederTjeneste.endreKøKriterier(kriterier)) + } else { + call.respond(HttpStatusCode.Forbidden) + } } } } diff --git a/src/main/kotlin/no/nav/k9/los/tjenester/driftsmeldinger/DriftsmeldingerApis.kt b/src/main/kotlin/no/nav/k9/los/tjenester/driftsmeldinger/DriftsmeldingerApis.kt index 04636963a..931c1b6f0 100644 --- a/src/main/kotlin/no/nav/k9/los/tjenester/driftsmeldinger/DriftsmeldingerApis.kt +++ b/src/main/kotlin/no/nav/k9/los/tjenester/driftsmeldinger/DriftsmeldingerApis.kt @@ -1,43 +1,61 @@ package no.nav.k9.los.tjenester.driftsmeldinger -import io.ktor.server.application.call -import io.ktor.server.locations.Location -import io.ktor.server.locations.get -import io.ktor.server.locations.post -import io.ktor.server.request.receive -import io.ktor.server.response.respond -import io.ktor.server.routing.Route +import io.ktor.http.* +import io.ktor.server.application.* +import io.ktor.server.request.* +import io.ktor.server.response.* +import io.ktor.server.routing.* +import no.nav.k9.los.integrasjon.abac.IPepClient +import no.nav.k9.los.integrasjon.rest.RequestContextService import no.nav.k9.los.tjenester.avdelingsleder.oppgaveko.IdDto import org.koin.ktor.ext.inject import java.util.* fun Route.DriftsmeldingerApis() { + val requestContextService by inject() + val pepClient by inject() val driftsmeldingTjeneste by inject() - class driftsmelding - - get { _: driftsmelding -> - call.respond(driftsmeldingTjeneste.hentDriftsmeldinger()) + get { + requestContextService.withRequestContext(call) { + if (pepClient.harBasisTilgang()) { + call.respond(driftsmeldingTjeneste.hentDriftsmeldinger()) + } else { + call.respond(HttpStatusCode.Forbidden) + } + } } - post { _: driftsmelding -> - val melding = call.receive() - call.respond(driftsmeldingTjeneste.leggTilDriftsmelding(melding.driftsmelding)) + post { + requestContextService.withRequestContext(call) { + if (pepClient.kanLeggeUtDriftsmelding()) { + val melding = call.receive() + call.respond(driftsmeldingTjeneste.leggTilDriftsmelding(melding.driftsmelding)) + } else { + call.respond(HttpStatusCode.Forbidden) + } + } } - @Location("/slett") - class slettDriftsmelding - - post { _: slettDriftsmelding -> - val param = call.receive() - call.respond(driftsmeldingTjeneste.slettDriftsmelding(UUID.fromString(param.id))) + post("/slett") { + requestContextService.withRequestContext(call) { + if (pepClient.kanLeggeUtDriftsmelding()) { + val param = call.receive() + call.respond(driftsmeldingTjeneste.slettDriftsmelding(UUID.fromString(param.id))) + } else { + call.respond(HttpStatusCode.Forbidden) + } + } } - @Location("/toggle") - class toggleDriftsmelding - - post { _: toggleDriftsmelding -> - val param = call.receive() - call.respond(driftsmeldingTjeneste.toggleDriftsmelding(param)) + post("/toggle") { + requestContextService.withRequestContext(call) { + if (pepClient.kanLeggeUtDriftsmelding()) { + val param = call.receive() + call.respond(driftsmeldingTjeneste.toggleDriftsmelding(param)) + } else { + call.respond(HttpStatusCode.Forbidden) + } + } } } diff --git a/src/main/kotlin/no/nav/k9/los/tjenester/fagsak/FagsakApis.kt b/src/main/kotlin/no/nav/k9/los/tjenester/fagsak/FagsakApis.kt index 1c8546ec6..1831f3f00 100644 --- a/src/main/kotlin/no/nav/k9/los/tjenester/fagsak/FagsakApis.kt +++ b/src/main/kotlin/no/nav/k9/los/tjenester/fagsak/FagsakApis.kt @@ -1,10 +1,11 @@ package no.nav.k9.los.tjenester.fagsak -import io.ktor.server.application.call -import io.ktor.server.request.receive -import io.ktor.server.response.respond -import io.ktor.server.routing.Route -import io.ktor.server.routing.post +import io.ktor.http.* +import io.ktor.server.application.* +import io.ktor.server.request.* +import io.ktor.server.response.* +import io.ktor.server.routing.* +import no.nav.k9.los.integrasjon.abac.IPepClient import no.nav.k9.los.integrasjon.rest.RequestContextService import no.nav.k9.los.tjenester.saksbehandler.oppgave.OppgaveTjeneste import org.koin.ktor.ext.inject @@ -12,18 +13,27 @@ import org.koin.ktor.ext.inject internal fun Route.FagsakApis() { val oppgaveTjeneste by inject() val requestContextService by inject() + val pepClient by inject() post("/sok") { requestContextService.withRequestContext(call) { - val søk = call.receive() - call.respond(oppgaveTjeneste.søkFagsaker(søk.searchString)) + if (pepClient.harBasisTilgang()) { + val søk = call.receive() + call.respond(oppgaveTjeneste.søkFagsaker(søk.searchString)) + } else { + call.respond(HttpStatusCode.Forbidden) + } } } post("/aktoerid-sok") { requestContextService.withRequestContext(call) { - val param = call.receive() - call.respond(oppgaveTjeneste.finnOppgaverBasertPåAktørId(param.aktoerId)) + if (pepClient.harBasisTilgang()) { + val param = call.receive() + call.respond(oppgaveTjeneste.finnOppgaverBasertPåAktørId(param.aktoerId)) + } else { + call.respond(HttpStatusCode.Forbidden) + } } } } diff --git a/src/main/kotlin/no/nav/k9/los/tjenester/innsikt/Innsikt.kt b/src/main/kotlin/no/nav/k9/los/tjenester/innsikt/InnsiktApis.kt similarity index 99% rename from src/main/kotlin/no/nav/k9/los/tjenester/innsikt/Innsikt.kt rename to src/main/kotlin/no/nav/k9/los/tjenester/innsikt/InnsiktApis.kt index 8af32a9ae..7c405c575 100644 --- a/src/main/kotlin/no/nav/k9/los/tjenester/innsikt/Innsikt.kt +++ b/src/main/kotlin/no/nav/k9/los/tjenester/innsikt/InnsiktApis.kt @@ -3,7 +3,6 @@ package no.nav.k9.los.tjenester.innsikt import io.ktor.http.* import io.ktor.server.application.* import io.ktor.server.html.* -import io.ktor.server.locations.* import io.ktor.server.response.* import io.ktor.server.routing.* import kotlinx.coroutines.runBlocking @@ -31,7 +30,7 @@ import org.slf4j.LoggerFactory import java.time.LocalDateTime import java.util.* -fun Route.innsiktGrensesnitt() { +fun Route.InnsiktApis() { //TODO finn ut hvordan bruke i dev/prod val oppgaveRepository by inject() val oppgaveRepositoryV2 by inject() @@ -52,8 +51,7 @@ fun Route.innsiktGrensesnitt() { val LOGGER = LoggerFactory.getLogger(StatistikkRepository::class.java) - class main - get { _: main -> + get { call.respondHtml { head { title { +"Innsikt i k9-los" } @@ -222,9 +220,7 @@ fun Route.innsiktGrensesnitt() { var køer = listOf() - @Location("/db") - class db - get { _: db -> + get("/db") { if (køer.isEmpty()) { val hentAktiveOppgaver = oppgaveRepository.hentAktiveUreserverteOppgaver() diff --git a/src/main/kotlin/no/nav/k9/los/tjenester/konfig/KonfigApis.kt b/src/main/kotlin/no/nav/k9/los/tjenester/konfig/KonfigApis.kt index c40ad288c..5ce3d2614 100644 --- a/src/main/kotlin/no/nav/k9/los/tjenester/konfig/KonfigApis.kt +++ b/src/main/kotlin/no/nav/k9/los/tjenester/konfig/KonfigApis.kt @@ -1,7 +1,6 @@ package no.nav.k9.los.tjenester.konfig import io.ktor.server.application.* -import io.ktor.server.locations.* import io.ktor.server.response.* import io.ktor.server.routing.* import no.nav.k9.los.Configuration @@ -18,28 +17,19 @@ fun Route.KonfigApis() { val k9punsjUrlDev = "https://k9-punsj-frontend.intern.dev.nav.no/journalpost" val k9punsjUrlProd = "https://k9-punsj-frontend.intern.nav.no/journalpost" - @Location("/k9-sak-url") - class hentK9SakUrl - - get { _: hentK9SakUrl -> + get("/k9-sak-url") { if (KoinProfile.PREPROD == configuration.koinProfile()) call.respond(Konfig(k9sakUrlDev)) else call.respond( Konfig(k9sakUrlProd) ) } - @Location("/k9-punsj-url") - class hentK9PunsjUrl - - get { _: hentK9PunsjUrl -> + get("/k9-punsj-url") { if (KoinProfile.PREPROD == configuration.koinProfile()) call.respond(Konfig(k9punsjUrlDev)) else call.respond( Konfig(k9punsjUrlProd) ) } - @Location("/refresh-url") - class hentSseUrl - - get { _: hentSseUrl -> + get("/refresh-url") { when { configuration.koinProfile() == KoinProfile.PROD -> { call.respond(Konfig(refreshUrlProd)) diff --git a/src/main/kotlin/no/nav/k9/los/tjenester/saksbehandler/NavAnsattApi.kt b/src/main/kotlin/no/nav/k9/los/tjenester/saksbehandler/NavAnsattApi.kt index 5a35e59f7..b04ae2dc7 100644 --- a/src/main/kotlin/no/nav/k9/los/tjenester/saksbehandler/NavAnsattApi.kt +++ b/src/main/kotlin/no/nav/k9/los/tjenester/saksbehandler/NavAnsattApi.kt @@ -1,7 +1,6 @@ package no.nav.k9.los.tjenester.saksbehandler import io.ktor.server.application.* -import io.ktor.server.locations.* import io.ktor.server.response.* import io.ktor.server.routing.* import no.nav.k9.los.Configuration @@ -20,9 +19,7 @@ internal fun Route.NavAnsattApis() { val azureGraphService by inject() val configuration by inject() - @Location("/saksbehandler") - class getInnloggetBruker - get { _: getInnloggetBruker -> + get("/saksbehandler") { if (configuration.koinProfile() != KoinProfile.LOCAL) { requestContextService.withRequestContext(call) { val token = call.idToken() @@ -33,7 +30,7 @@ internal fun Route.NavAnsattApis() { brukerIdent = saksbehandlerIdent, kanSaksbehandle = pepClient.harBasisTilgang(), //TODO mismatch mellom navnet 'kanSaksbehandle' og at alle som har tilgang til systemet har basistilgang kanOppgavestyre = pepClient.erOppgaveStyrer(), - kanReservere = pepClient.harTilgangTilReservingAvOppgaver(), + kanReservere = pepClient.harTilgangTilReserveringAvOppgaver(), kanDrifte = pepClient.kanLeggeUtDriftsmelding() ) if (saksbehandlerRepository.finnSaksbehandlerMedEpost(token.getUsername()) != null) { diff --git "a/src/main/kotlin/no/nav/k9/los/tjenester/saksbehandler/nokkeltall/SaksbehandlerN\303\270kkeltallApis.kt" "b/src/main/kotlin/no/nav/k9/los/tjenester/saksbehandler/nokkeltall/SaksbehandlerN\303\270kkeltallApis.kt" index f695448c3..12141f440 100644 --- "a/src/main/kotlin/no/nav/k9/los/tjenester/saksbehandler/nokkeltall/SaksbehandlerN\303\270kkeltallApis.kt" +++ "b/src/main/kotlin/no/nav/k9/los/tjenester/saksbehandler/nokkeltall/SaksbehandlerN\303\270kkeltallApis.kt" @@ -1,7 +1,6 @@ package no.nav.k9.los.tjenester.saksbehandler.nokkeltall import io.ktor.server.application.* -import io.ktor.server.locations.* import io.ktor.server.response.* import io.ktor.server.routing.* import no.nav.k9.los.integrasjon.rest.RequestContextService @@ -12,10 +11,7 @@ fun Route.SaksbehandlerNøkkeltallApis() { val requestContextService by inject() val oppgaveTjeneste by inject() - @Location("/nokkeltall/nye-og-ferdigstilte-oppgaver") - class getNyeOgFerdigstilteOppgaver - - get { _: getNyeOgFerdigstilteOppgaver -> + get("/nokkeltall/nye-og-ferdigstilte-oppgaver") { requestContextService.withRequestContext(call) { call.respond(oppgaveTjeneste.hentNyeOgFerdigstilteOppgaver()) } diff --git a/src/main/kotlin/no/nav/k9/los/tjenester/saksbehandler/oppgave/OppgaveApis.kt b/src/main/kotlin/no/nav/k9/los/tjenester/saksbehandler/oppgave/OppgaveApis.kt index ffe9b6663..2a03c4e49 100644 --- a/src/main/kotlin/no/nav/k9/los/tjenester/saksbehandler/oppgave/OppgaveApis.kt +++ b/src/main/kotlin/no/nav/k9/los/tjenester/saksbehandler/oppgave/OppgaveApis.kt @@ -2,8 +2,6 @@ package no.nav.k9.los.tjenester.saksbehandler.oppgave import io.ktor.http.* import io.ktor.server.application.* -import io.ktor.server.locations.* -import io.ktor.server.locations.post import io.ktor.server.request.* import io.ktor.server.response.* import io.ktor.server.routing.* @@ -37,14 +35,10 @@ internal fun Route.OppgaveApis() { val oppgaveApisTjeneste by inject() val pdlService by inject() - @Location("/reserver") - class reserverOppgave - post { _: reserverOppgave -> - val oppgaveIdMedOverstyringDto = call.receive() + post("/reserver") { requestContextService.withRequestContext(call) { - if (!pepClient.harTilgangTilReservingAvOppgaver()) { - call.respond(HttpStatusCode.Forbidden) - } else { + if (pepClient.harTilgangTilReserveringAvOppgaver()) { + val oppgaveIdMedOverstyringDto = call.receive() val brukernavn = kotlin.coroutines.coroutineContext.idToken().getUsername() val innloggetBruker = saksbehandlerRepository.finnSaksbehandlerMedEpost(brukernavn) ?: throw IllegalStateException("Fant ikke saksbehandler $brukernavn ved forsøk på å reservasjon av oppgave") @@ -56,219 +50,225 @@ internal fun Route.OppgaveApis() { } catch (e: ManglerTilgangException) { call.respond(HttpStatusCode.Forbidden, e.message!!) } + } else { + call.respond(HttpStatusCode.Forbidden) } } } - @Location("/reserverte") - class getReserverteOppgaver - get { _: getReserverteOppgaver -> + get("/reserverte") { requestContextService.withRequestContext(call) { - val innloggetBrukernavn = kotlin.coroutines.coroutineContext.idToken().getUsername() - val innloggetBruker = saksbehandlerRepository.finnSaksbehandlerMedEpost( - innloggetBrukernavn - ) + if (pepClient.harBasisTilgang()) { + val innloggetBrukernavn = kotlin.coroutines.coroutineContext.idToken().getUsername() + val innloggetBruker = saksbehandlerRepository.finnSaksbehandlerMedEpost( + innloggetBrukernavn + ) - if (innloggetBruker != null) { - val reservasjonV3Dtos = oppgaveApisTjeneste.hentReserverteOppgaverForSaksbehandler(innloggetBruker) - call.respond(reservasjonV3Dtos) + if (innloggetBruker != null) { + val reservasjonV3Dtos = oppgaveApisTjeneste.hentReserverteOppgaverForSaksbehandler(innloggetBruker) + call.respond(reservasjonV3Dtos) + } else { + log.info("Innlogger bruker med brukernavn $innloggetBrukernavn finnes ikke i saksbehandlertabellen") + call.respond( + HttpStatusCode.InternalServerError, + "Innlogger bruker med brukernavn $innloggetBrukernavn finnes ikke i saksbehandlertabellen" + ) + } } else { - log.info("Innlogger bruker med brukernavn $innloggetBrukernavn finnes ikke i saksbehandlertabellen") - call.respond( - HttpStatusCode.InternalServerError, - "Innlogger bruker med brukernavn $innloggetBrukernavn finnes ikke i saksbehandlertabellen" - ) + call.respond(HttpStatusCode.Forbidden) } } } // Fjernes når V1 skal vekk - @Deprecated("Gjelder bare for de gamle køene, frem til disse er sanert") - @Location("/fa-oppgave-fra-ko") - class fåOppgaveFraKø - post { _: fåOppgaveFraKø -> + post("/fa-oppgave-fra-ko") { requestContextService.withRequestContext(call) { - val params = call.receive() + if (pepClient.harTilgangTilReserveringAvOppgaver()) { + val params = call.receive() - val saksbehandler = saksbehandlerRepository.finnSaksbehandlerMedEpost( - kotlin.coroutines.coroutineContext.idToken().getUsername() - )!! + val saksbehandler = saksbehandlerRepository.finnSaksbehandlerMedEpost( + kotlin.coroutines.coroutineContext.idToken().getUsername() + )!! - //reservasjonV3 skjer i enden av oppgaveTjeneste.fåOppgaveFraKø() - val oppgaveFraKø = oppgaveTjeneste.fåOppgaveFraKø( - oppgaveKøId = params.oppgaveKøId, - brukerident = saksbehandler.brukerIdent!! - ) + //reservasjonV3 skjer i enden av oppgaveTjeneste.fåOppgaveFraKø() + val oppgaveFraKø = oppgaveTjeneste.fåOppgaveFraKø( + oppgaveKøId = params.oppgaveKøId, + brukerident = saksbehandler.brukerIdent!! + ) - if (oppgaveFraKø != null) { - log.info("RESERVASJONDEBUG: Lagt til ${saksbehandler.brukerIdent} oppgave=${oppgaveFraKø.eksternId}, beslutter=${oppgaveFraKø.tilBeslutter}, kø=${params.oppgaveKøId} (neste oppgave)") - call.respond(oppgaveFraKø) + if (oppgaveFraKø != null) { + log.info("RESERVASJONDEBUG: Lagt til ${saksbehandler.brukerIdent} oppgave=${oppgaveFraKø.eksternId}, beslutter=${oppgaveFraKø.tilBeslutter}, kø=${params.oppgaveKøId} (neste oppgave)") + call.respond(oppgaveFraKø) + } else { + call.respond(HttpStatusCode.NotFound, "Fant ingen oppgave i valgt kø") + } } else { - call.respond(HttpStatusCode.NotFound, "Fant ingen oppgave i valgt kø") + call.respond(HttpStatusCode.Forbidden) } } } - // TODO: Rename til annuller - @Location("/opphev") - class opphevReservasjoner - post { _: opphevReservasjoner -> + post("/opphev") { requestContextService.withRequestContext(call) { - val params = call.receive>() - val innloggetBruker = saksbehandlerRepository.finnSaksbehandlerMedEpost( - kotlin.coroutines.coroutineContext.idToken().getUsername() - )!! + if (pepClient.harBasisTilgang()) { + val params = call.receive>() + val innloggetBruker = saksbehandlerRepository.finnSaksbehandlerMedEpost( + kotlin.coroutines.coroutineContext.idToken().getUsername() + )!! - try { - log.info( - "Opphever reservasjoner ${ - params.map { it.oppgaveNøkkel }.joinToString(", ") - } (Gjort av ${innloggetBruker.brukerIdent})" - ) - oppgaveApisTjeneste.annullerReservasjoner(params, innloggetBruker) - call.respond(HttpStatusCode.OK) //TODO: Hva er evt meningsfullt å returnere her? - } catch (e: FinnerIkkeDataException) { - call.respond(HttpStatusCode.NotFound, "Fant ingen aktiv reservasjon for angitte reservasjonsnøkler") + try { + log.info( + "Opphever reservasjoner ${ + params.map { it.oppgaveNøkkel }.joinToString(", ") + } (Gjort av ${innloggetBruker.brukerIdent})" + ) + oppgaveApisTjeneste.annullerReservasjoner(params, innloggetBruker) + call.respond(HttpStatusCode.OK) //TODO: Hva er evt meningsfullt å returnere her? + } catch (e: FinnerIkkeDataException) { + call.respond(HttpStatusCode.NotFound, "Fant ingen aktiv reservasjon for angitte reservasjonsnøkler") + } + } else { + call.respond(HttpStatusCode.Forbidden) } } } - @Location("/forleng") //TODO maks 1 uke inntil videre? - class forlengReservasjon - post { _: forlengReservasjon -> + post("/forleng") { requestContextService.withRequestContext(call) { - val forlengReservasjonDto = call.receive() - val innloggetBruker = saksbehandlerRepository.finnSaksbehandlerMedEpost( - kotlin.coroutines.coroutineContext.idToken().getUsername() - )!! + if (pepClient.harBasisTilgang()) { + val forlengReservasjonDto = call.receive() + val innloggetBruker = saksbehandlerRepository.finnSaksbehandlerMedEpost( + kotlin.coroutines.coroutineContext.idToken().getUsername() + )!! - try { - call.respond(oppgaveApisTjeneste.forlengReservasjon(forlengReservasjonDto, innloggetBruker)) - } catch (e: FinnerIkkeDataException) { - call.respond(HttpStatusCode.NotFound, "Fant ingen aktiv reservasjon for angitt reservasjonsnøkkel") + try { + call.respond(oppgaveApisTjeneste.forlengReservasjon(forlengReservasjonDto, innloggetBruker)) + } catch (e: FinnerIkkeDataException) { + call.respond(HttpStatusCode.NotFound, "Fant ingen aktiv reservasjon for angitt reservasjonsnøkkel") + } + } else { + call.respond(HttpStatusCode.Forbidden) } } } - @Location("/flytt") - class flyttReservasjon - post { _: flyttReservasjon -> + post("/flytt") { requestContextService.withRequestContext(call) { - val params = call.receive() + if (pepClient.harBasisTilgang()) { + val params = call.receive() - val innloggetBruker = saksbehandlerRepository.finnSaksbehandlerMedEpost( - kotlin.coroutines.coroutineContext.idToken().getUsername() - )!! + val innloggetBruker = saksbehandlerRepository.finnSaksbehandlerMedEpost( + kotlin.coroutines.coroutineContext.idToken().getUsername() + )!! - try { - log.info("Flytter reservasjonen ${params.oppgaveNøkkel.oppgaveEksternId} til ${params.brukerIdent} (Gjort av ${innloggetBruker.brukerIdent})") - call.respond(oppgaveApisTjeneste.overførReservasjon(params, innloggetBruker)) - } catch (e: FinnerIkkeDataException) { - call.respond(HttpStatusCode.NotFound, "Fant ingen aktiv reservasjon for angitt reservasjonsnøkkel") + try { + log.info("Flytter reservasjonen ${params.oppgaveNøkkel.oppgaveEksternId} til ${params.brukerIdent} (Gjort av ${innloggetBruker.brukerIdent})") + call.respond(oppgaveApisTjeneste.overførReservasjon(params, innloggetBruker)) + } catch (e: FinnerIkkeDataException) { + call.respond(HttpStatusCode.NotFound, "Fant ingen aktiv reservasjon for angitt reservasjonsnøkkel") + } + } else { + call.respond(HttpStatusCode.Forbidden) } } } - @Location("/flytt-til-forrige-saksbehandler") //TODO Antatt ikke i bruk - class flyttReservasjonTilForrigeSaksbehandler - post { _: flyttReservasjonTilForrigeSaksbehandler -> - requestContextService.withRequestContext(call) { - val params = call.receive() - call.respond( - HttpStatusCode.NotImplemented - //oppgaveTjeneste.flyttReservasjonTilForrigeSakbehandler(UUID.fromString(params.oppgaveId)) - ) - } - } - - @Location("/reservasjon/endre") - class endreReservasjon - post { _: endreReservasjon -> + post("/reservasjon/endre") { requestContextService.withRequestContext(call) { - val reservasjonEndringDto = call.receive>() - val innloggetBruker = saksbehandlerRepository.finnSaksbehandlerMedEpost( - kotlin.coroutines.coroutineContext.idToken().getUsername() - )!! - try { - call.respond(oppgaveApisTjeneste.endreReservasjoner(reservasjonEndringDto, innloggetBruker)) - } catch (e: FinnerIkkeDataException) { - call.respond(HttpStatusCode.NotFound, "Fant ingen aktiv reservasjon for angitt reservasjonsnøkkel") + if (pepClient.harBasisTilgang()) { + val reservasjonEndringDto = call.receive>() + val innloggetBruker = saksbehandlerRepository.finnSaksbehandlerMedEpost( + kotlin.coroutines.coroutineContext.idToken().getUsername() + )!! + try { + call.respond(oppgaveApisTjeneste.endreReservasjoner(reservasjonEndringDto, innloggetBruker)) + } catch (e: FinnerIkkeDataException) { + call.respond(HttpStatusCode.NotFound, "Fant ingen aktiv reservasjon for angitt reservasjonsnøkkel") + } + } else { + call.respond(HttpStatusCode.Forbidden) } } } // Fjernes når V1 skal vekk - @Deprecated("Gjelder bare for gamle køer. For nye køer, bruk OppgaveKoApis./{id}/antall-oppgaver") - @Location("/antall") - class hentAntallOppgaverForOppgavekø - get { _: hentAntallOppgaverForOppgavekø -> + get("/antall") { requestContextService.withRequestContext(call) { - var uuid = call.request.queryParameters["id"] - if (uuid.isNullOrBlank()) { - uuid = UUID.randomUUID().toString() //TODO: wtf!? + if (pepClient.harBasisTilgang()) { + val uuid = call.request.queryParameters["id"]!! + call.respond(oppgaveTjeneste.hentAntallOppgaver(UUID.fromString(uuid))) + } else { + call.respond(HttpStatusCode.Forbidden) } - call.respond(oppgaveTjeneste.hentAntallOppgaver(UUID.fromString(uuid)!!)) } } // Fjernes når V1 skal vekk - @Deprecated("Gjelder bare for gamle køer. For nye køer, se OppgaveKoApis./{id}/oppgaver") - class hentOppgaver //erstattet av OppgaveKoApis--/{id}/oppgaver::GET - get { _: hentOppgaver -> - val queryParameter = call.request.queryParameters["id"] + get { requestContextService.withRequestContext(call) { - call.respond( - oppgaveTjeneste.hentNesteOppgaverIKø(UUID.fromString(queryParameter)) - ) + if (pepClient.harBasisTilgang()) { + val queryParameter = call.request.queryParameters["id"] + call.respond( + oppgaveTjeneste.hentNesteOppgaverIKø(UUID.fromString(queryParameter)) + ) + } else { + call.respond(HttpStatusCode.Forbidden) + } } } - @Location("/legg-til-behandlet-sak") //WIP: siste behandlede oppgaver av saksbehandler. Skal virke så lenge vi vedlikeholder data i OppgaveV1. Må erstattes før V1 og V2 kan slettes - class leggTilBehandletSak - post { _: leggTilBehandletSak -> + //WIP: siste behandlede oppgaver av saksbehandler. Skal virke så lenge vi vedlikeholder data i OppgaveV1. Må erstattes før V1 og V2 kan slettes + post("/legg-til-behandlet-sak") { requestContextService.withRequestContext(call) { //TODO klageoppgaver - val oppgavenøkkel = call.receive() - val eksternUuid = UUID.fromString(oppgavenøkkel.oppgaveEksternId) - val oppgave = oppgaveRepository.hent(eksternUuid) - val person = pdlService.person(oppgave.aktorId).person + if (pepClient.harBasisTilgang()) { + val oppgavenøkkel = call.receive() + val eksternUuid = UUID.fromString(oppgavenøkkel.oppgaveEksternId) + val oppgave = oppgaveRepository.hent(eksternUuid) + val person = pdlService.person(oppgave.aktorId).person - if (person == null) { - log.warn("Fant ikke personen som er på oppgaven med eksternId $eksternUuid") - call.respond(HttpStatusCode.InternalServerError, "Fant ikke personen på oppgaven") - } else { - val behandletOppgave = BehandletOppgave(oppgave, person) - call.respond( - oppgaveTjeneste.leggTilBehandletOppgave( - coroutineContext.idToken().getUsername(), - behandletOppgave + if (person == null) { + log.warn("Fant ikke personen som er på oppgaven med eksternId $eksternUuid") + call.respond(HttpStatusCode.InternalServerError, "Fant ikke personen på oppgaven") + } else { + val behandletOppgave = BehandletOppgave(oppgave, person) + call.respond( + oppgaveTjeneste.leggTilBehandletOppgave( + coroutineContext.idToken().getUsername(), + behandletOppgave + ) ) - ) + } + } else { + call.respond(HttpStatusCode.Forbidden) } } } - @Location("/behandlede") //WIP: siste behandlede oppgaver av saksbehandler. Skal virke så lenge vi vedlikeholder data i OppgaveV1. Må erstattes før V1 og V2 kan slettes - class getBehandledeOppgaver - get { _: getBehandledeOppgaver -> + //WIP: siste behandlede oppgaver av saksbehandler. Skal virke så lenge vi vedlikeholder data i OppgaveV1. Må erstattes før V1 og V2 kan slettes + get("/behandlede") { requestContextService.withRequestContext(call) { - call.respond(oppgaveTjeneste.hentSisteBehandledeOppgaver()) + if (pepClient.harBasisTilgang()) { + call.respond(oppgaveTjeneste.hentSisteBehandledeOppgaver()) + } else { + call.respond(HttpStatusCode.Forbidden) + } } } - @Location("/flytt/sok") - class søkSaksbehandler - post { _: søkSaksbehandler -> + post("/flytt/sok") { requestContextService.withRequestContext(call) { - val params = call.receive() - val sokSaksbehandlerMedIdent = oppgaveTjeneste.sokSaksbehandler(params.brukerIdent) - call.respond(sokSaksbehandlerMedIdent) + if (pepClient.harBasisTilgang()) { + val params = call.receive() + val sokSaksbehandlerMedIdent = oppgaveTjeneste.sokSaksbehandler(params.brukerIdent) + call.respond(sokSaksbehandlerMedIdent) + } else { + call.respond(HttpStatusCode.Forbidden) + } } } - @Location("/saksbehandlere") - class getAlleSaksbehandlere - get { _: getAlleSaksbehandlere -> + get("/saksbehandlere") { requestContextService.withRequestContext(call) { if (pepClient.harBasisTilgang()) { val alleSaksbehandlere = saksbehandlerRepository.hentAlleSaksbehandlere() @@ -279,56 +279,8 @@ internal fun Route.OppgaveApis() { } call.respond(saksbehandlerDtoListe) } else { - call.respond(emptyList()) - } - } - } - - @Deprecated("Antatt ikke i bruk. Verifiser og fjern") - @Location("/hent-historiske-reservasjoner-på-oppgave") - class hentHistoriskeReservasjonerPåOppgave - post { _: hentHistoriskeReservasjonerPåOppgave -> - requestContextService.withRequestContext(call) { - val params = call.receive() - call.respond( - oppgaveTjeneste.hentReservasjonsHistorikk(UUID.fromString(params.oppgaveId)) - ) - } - } - - @Deprecated("Antatt ikke i bruk. Verifiser og fjern") - @Location("/oppgaver-for-fagsaker") - class oppgaverForFagsaker - get { _: oppgaverForFagsaker -> - requestContextService.withRequestContext(call) { - val saker = call.request.queryParameters["saksnummerListe"] - val saksnummerliste = saker?.split(",") ?: emptyList() - val oppgaver = oppgaveTjeneste.hentOppgaverFraListe(saksnummerliste) - val result = mutableListOf() - if (oppgaver.isNotEmpty()) { - val oppgaverBySaksnummer = oppgaver.groupBy { it.saksnummer } - for (entry in oppgaverBySaksnummer.entries) { - val x = entry.value.firstOrNull { oppgaveDto -> oppgaveDto.erTilSaksbehandling } - if (x != null) { - result.add(x) - } else { - result.add(entry.value.first()) - } - } - call.respond(result) - } else { - call.respond(oppgaver) + call.respond(HttpStatusCode.Forbidden) } } } - - @Deprecated("Antatt ikke i bruk. Verifiser og fjern") - @Location("/oppgaver-på-samme-bruker") - class oppgaverPåSammeBruker - post { _: oppgaverPåSammeBruker -> - requestContextService.withRequestContext(call) { - val params = call.receive() - call.respond(oppgaveTjeneste.aktiveOppgaverPåSammeBruker(UUID.fromString(params.oppgaveId))) - } - } } diff --git a/src/main/kotlin/no/nav/k9/los/tjenester/saksbehandler/oppgave/OppgaveTjeneste.kt b/src/main/kotlin/no/nav/k9/los/tjenester/saksbehandler/oppgave/OppgaveTjeneste.kt index 6e5c9b9ef..cb8fedb75 100644 --- a/src/main/kotlin/no/nav/k9/los/tjenester/saksbehandler/oppgave/OppgaveTjeneste.kt +++ b/src/main/kotlin/no/nav/k9/los/tjenester/saksbehandler/oppgave/OppgaveTjeneste.kt @@ -116,7 +116,7 @@ class OppgaveTjeneste constructor( overstyrSjekk: Boolean = false, overstyrBegrunnelse: String? = null ): OppgaveStatusDto { - if (!pepClient.harTilgangTilReservingAvOppgaver()) { + if (!pepClient.harTilgangTilReserveringAvOppgaver()) { return OppgaveStatusDto( erReservert = false, reservertTilTidspunkt = null, @@ -290,14 +290,6 @@ class OppgaveTjeneste constructor( ) } - suspend fun aktiveOppgaverPåSammeBruker(oppgaveId: UUID): List { - val oppgave = oppgaveRepository.hent(oppgaveId) - val hentOppgaverMedAktorId = oppgaveRepository.hentOppgaverMedAktorId(oppgave.aktorId) - return hentOppgaverMedAktorId.filter { o -> o.aktiv && o.system == Fagsystem.PUNSJ.kode && o.journalpostId != oppgave.journalpostId } - .map { o -> JournalpostId(o.journalpostId!!) } - .toList() - } - private fun filtrerOppgaverForSaksnummerOgJournalpostIder(dto: SokeResultatDto): SokeResultatDto { val oppgaver = dto.oppgaver @@ -501,16 +493,6 @@ class OppgaveTjeneste constructor( ) } - suspend fun hentOppgaverFraListe(saksnummere: List): List { - return saksnummere.flatMap { oppgaveRepository.hentOppgaverMedSaksnummer(it) } - .map { oppgave -> - tilOppgaveDto( - oppgave = oppgave, - reservasjon = reservasjonOversetter.hentAktivReservasjonFraGammelKontekst(oppgave), - ) - }.toList() - } - suspend fun hentNyeOgFerdigstilteOppgaver(): List { val hentIdentTilInnloggetBruker = azureGraphService.hentIdentTilInnloggetBruker() val alleTallene = statistikkRepository.hentFerdigstilteOgNyeHistorikkPerAntallDager(7) diff --git a/src/main/kotlin/no/nav/k9/los/tjenester/saksbehandler/saksliste/SaksbehandlerOppgavekoApis.kt b/src/main/kotlin/no/nav/k9/los/tjenester/saksbehandler/saksliste/SaksbehandlerOppgavekoApis.kt index d924c6be8..434761ead 100644 --- a/src/main/kotlin/no/nav/k9/los/tjenester/saksbehandler/saksliste/SaksbehandlerOppgavekoApis.kt +++ b/src/main/kotlin/no/nav/k9/los/tjenester/saksbehandler/saksliste/SaksbehandlerOppgavekoApis.kt @@ -1,10 +1,9 @@ package no.nav.k9.los.tjenester.saksbehandler.saksliste +import io.ktor.http.* import io.ktor.server.application.* -import io.ktor.server.locations.* import io.ktor.server.response.* import io.ktor.server.routing.* -import no.nav.k9.los.domene.modell.OppgaveKø import no.nav.k9.los.domene.repository.OppgaveKøRepository import no.nav.k9.los.integrasjon.abac.IPepClient import no.nav.k9.los.integrasjon.rest.RequestContextService @@ -17,27 +16,25 @@ internal fun Route.SaksbehandlerOppgavekoApis() { val requestContextService by inject() val sakslisteTjeneste by inject() - @Deprecated("Brukes kun for gamle køer. Fjernes når V1 er sanert. Kall for nye køer: Se over") - @Location("/oppgaveko") - class getKoerForSaksbehandlerV1 - get { _: getKoerForSaksbehandlerV1 -> + // Brukes kun for gamle køer. Fjernes når V1 er sanert. Kall for nye køer: Se over + get("/oppgaveko") { requestContextService.withRequestContext(call) { if (pepClient.harBasisTilgang()) { call.respond(sakslisteTjeneste.hentSaksbehandlersKøer()) } else { - call.respond(emptyList()) + call.respond(HttpStatusCode.Forbidden) } } } - @Deprecated("Gjelder bare for gamla køer frem til disse saneres. Kall for nye køer: OppgaveKoApis::/{id}::GET") - @Location("/oppgaveko/saksbehandlere") - class hentSakslistensSaksbehandlere - get { _: hentSakslistensSaksbehandlere -> + // Gjelder bare for gamla køer frem til disse saneres. Kall for nye køer: OppgaveKoApis::/{id}::GET + get("/oppgaveko/saksbehandlere") { requestContextService.withRequestContext(call) { - call.respond( - oppgaveKøRepository.hentOppgavekø(UUID.fromString(call.parameters["id"])).saksbehandlere - ) + if (pepClient.harBasisTilgang()) { + call.respond(oppgaveKøRepository.hentOppgavekø(UUID.fromString(call.parameters["id"])).saksbehandlere) + } else { + call.respond(HttpStatusCode.Forbidden) + } } } } diff --git a/src/main/resources/adapterdefinisjoner/k9-oppgavetyper-k9tilbake.json b/src/main/resources/adapterdefinisjoner/k9-oppgavetyper-k9tilbake.json index 7c4853689..d7ac0d20c 100644 --- a/src/main/resources/adapterdefinisjoner/k9-oppgavetyper-k9tilbake.json +++ b/src/main/resources/adapterdefinisjoner/k9-oppgavetyper-k9tilbake.json @@ -36,6 +36,11 @@ "visPåOppgave": true, "påkrevd": false }, + { + "id": "mottattDato", + "visPåOppgave": true, + "påkrevd": false + }, { "id": "registrertDato", "visPåOppgave": true, diff --git a/src/test/kotlin/no/nav/k9/los/tjenester/saksbehandler/oppgave/OppgaveTjenesteSettSkjermetTest.kt b/src/test/kotlin/no/nav/k9/los/tjenester/saksbehandler/oppgave/OppgaveTjenesteSettSkjermetTest.kt index e1ea0c926..e9bdc2447 100644 --- a/src/test/kotlin/no/nav/k9/los/tjenester/saksbehandler/oppgave/OppgaveTjenesteSettSkjermetTest.kt +++ b/src/test/kotlin/no/nav/k9/los/tjenester/saksbehandler/oppgave/OppgaveTjenesteSettSkjermetTest.kt @@ -507,7 +507,7 @@ class OppgaveTjenesteSettSkjermetTest : KoinTest, AbstractPostgresTest() { every { config.koinProfile() } returns KoinProfile.LOCAL coEvery { pepClient.harBasisTilgang() } returns true coEvery { pepClient.harTilgangTilOppgave(any()) } returns true - coEvery { pepClient.harTilgangTilReservingAvOppgaver() } returns true + coEvery { pepClient.harTilgangTilReserveringAvOppgaver() } returns true coEvery { pdlService.person(any()) } returns PersonPdlResponse(false, PersonPdl( data = PersonPdl.Data( hentPerson = PersonPdl.Data.HentPerson(