Skip to content

Commit

Permalink
Enhetlig tilgangskontroll. Bort med @location. (#2707)
Browse files Browse the repository at this point in the history
  • Loading branch information
mbolstad authored Oct 31, 2024
1 parent 5995942 commit d48d70c
Show file tree
Hide file tree
Showing 25 changed files with 503 additions and 541 deletions.
1 change: 0 additions & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down
15 changes: 6 additions & 9 deletions src/main/kotlin/no/nav/k9/los/K9Los.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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.*
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -301,8 +300,6 @@ fun Application.k9Los() {
logRequests()
}

install(Locations)

install(Routing) {

MetricsRoute()
Expand All @@ -320,7 +317,7 @@ fun Application.k9Los() {
// localSetup.initPunsjoppgave()
api(sseChannel)
route("/forvaltning") {
innsiktGrensesnitt()
InnsiktApis()
forvaltningApis()
route("k9saktillos") { K9SakTilLosApi() }
route("k9klagetillos") { K9KlageTilLosApi() }
Expand All @@ -335,7 +332,7 @@ fun Application.k9Los() {
} else {
authenticate(*issuers.allIssuers()) {
route("forvaltning") {
innsiktGrensesnitt()
InnsiktApis()
forvaltningApis()
route("k9saktillos") { K9SakTilLosApi() }
route("k9klagetillos") { K9KlageTilLosApi() }
Expand Down Expand Up @@ -413,9 +410,9 @@ private fun Route.api(sseChannel: BroadcastChannel<SseEvent>) {
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() }
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ interface IPepClient {

suspend fun kanLeggeUtDriftsmelding(): Boolean

suspend fun harTilgangTilReservingAvOppgaver(): Boolean
suspend fun harTilgangTilReserveringAvOppgaver(): Boolean

suspend fun kanSendeSakTilStatistikk(
fagsakNummer: String
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ class PepClientLocal : IPepClient {
return true
}

override suspend fun harTilgangTilReservingAvOppgaver(): Boolean {
override suspend fun harTilgangTilReserveringAvOppgaver(): Boolean {
return true
}

Expand Down
100 changes: 50 additions & 50 deletions src/main/kotlin/no/nav/k9/los/nyoppgavestyring/ko/OppgaveKoApis.kt
Original file line number Diff line number Diff line change
@@ -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.*
Expand All @@ -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<RequestContextService>()
val oppgaveKoTjeneste by inject<OppgaveKoTjeneste>()
val saksbehandlerRepository by inject<SaksbehandlerRepository>()
val pepClient by KoinJavaComponent.inject<IPepClient>(IPepClient::class.java)
val pepClient by inject<IPepClient>()

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<KopierOppgaveKoDto>()
requestContextService.withRequestContext(call) {
if (!pepClient.erOppgaveStyrer()) {
if (pepClient.erOppgaveStyrer()) {
val kopierOppgaveKoDto = call.receive<KopierOppgaveKoDto>()
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<OpprettOppgaveKoDto>()
requestContextService.withRequestContext(call) {
if (!pepClient.erOppgaveStyrer()) {
if (pepClient.erOppgaveStyrer()) {
val opprettOppgaveKoDto = call.receive<OpprettOppgaveKoDto>()
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()))
}
}

Expand All @@ -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(),
Expand Down Expand Up @@ -161,13 +162,11 @@ fun Route.OppgaveKoApis() {

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(),
Expand All @@ -186,12 +185,13 @@ fun Route.OppgaveKoApis() {
}

post("") {
val oppgaveKo = call.receive<OppgaveKo>()
requestContextService.withRequestContext(call) {
if (!pepClient.erOppgaveStyrer()) {
if (pepClient.erOppgaveStyrer()) {
val oppgaveKo = call.receive<OppgaveKo>()
call.respond(oppgaveKoTjeneste.endre(oppgaveKo))
} else {
call.respond(HttpStatusCode.Forbidden)
}
call.respond(oppgaveKoTjeneste.endre(oppgaveKo))
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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<RequestContextService>()
val feltdefinisjonTjeneste by inject<FeltdefinisjonTjeneste>()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,27 +1,20 @@
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.*
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<RequestContextService>()
val oppgaveV3Tjeneste by inject<OppgaveV3Tjeneste>()
val transactionalManager by inject<TransactionalManager>()
val behandlingProsessEventK9Repository by inject<BehandlingProsessEventK9Repository>()
val config by inject<Configuration>()

put {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<RequestContextService>()
val oppgavetypeTjeneste by inject<OppgavetypeTjeneste>()
Expand Down
Loading

0 comments on commit d48d70c

Please sign in to comment.