diff --git a/apps/bekreftelse-api/build.gradle.kts b/apps/bekreftelse-api/build.gradle.kts index 2dc73c11..fc273ba3 100644 --- a/apps/bekreftelse-api/build.gradle.kts +++ b/apps/bekreftelse-api/build.gradle.kts @@ -84,12 +84,6 @@ tasks.withType().configureEach { useJUnitPlatform() } -tasks.withType().configureEach { - compilerOptions { - freeCompilerArgs.add("-Xcontext-receivers") - } -} - tasks.withType(Jar::class) { manifest { attributes["Implementation-Version"] = project.version diff --git a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/routes/BekreftelseRoutes.kt b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/routes/BekreftelseRoutes.kt index 2e6cf33f..d7f12a57 100644 --- a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/routes/BekreftelseRoutes.kt +++ b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/routes/BekreftelseRoutes.kt @@ -21,42 +21,36 @@ fun Route.bekreftelseRoutes(applicationContext: ApplicationContext) { route("/api/v1") { authenticate("idporten", "tokenx", "azure") { get("/tilgjengelige-bekreftelser") { - with(resolveRequest()) { - with(authorizationService.authorize(TilgangType.LESE)) { - val response = bekreftelseService.finnTilgjengeligBekreftelser( - TilgjengeligeBekreftelserRequest(sluttbruker.identitetsnummer), - useMockData - ) - - call.respond(HttpStatusCode.OK, response) - } - } + val requestContext = resolveRequest() + val securityContext = authorizationService.authorize(requestContext, TilgangType.LESE) + val response = bekreftelseService.finnTilgjengeligBekreftelser( + securityContext, + TilgjengeligeBekreftelserRequest(securityContext.sluttbruker.identitetsnummer), + requestContext.useMockData + ) + call.respond(HttpStatusCode.OK, response) } post("/tilgjengelige-bekreftelser") { request -> - with(resolveRequest(request.identitetsnummer)) { - with(authorizationService.authorize(TilgangType.LESE)) { - val response = bekreftelseService.finnTilgjengeligBekreftelser( - request, - useMockData - ) - - call.respond(HttpStatusCode.OK, response) - } - } + val requestContext = resolveRequest(request.identitetsnummer) + val securityContext = authorizationService.authorize(requestContext, TilgangType.LESE) + val response = bekreftelseService.finnTilgjengeligBekreftelser( + securityContext, + request, + requestContext.useMockData + ) + call.respond(HttpStatusCode.OK, response) } post("/bekreftelse") { request -> - with(resolveRequest(request.identitetsnummer)) { - with(authorizationService.authorize(TilgangType.SKRIVE)) { - bekreftelseService.mottaBekreftelse( - request, - useMockData - ) - - call.respond(HttpStatusCode.OK) - } - } + val requestContext = resolveRequest(request.identitetsnummer) + val securityContext = authorizationService.authorize(requestContext, TilgangType.SKRIVE) + bekreftelseService.mottaBekreftelse( + securityContext, + request, + requestContext.useMockData + ) + call.respond(HttpStatusCode.OK) } } } diff --git a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/services/AuthorizationService.kt b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/services/AuthorizationService.kt index 1be1d7c6..81a008f9 100644 --- a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/services/AuthorizationService.kt +++ b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/services/AuthorizationService.kt @@ -35,10 +35,9 @@ class AuthorizationService( private val logger: Logger = LoggerFactory.getLogger("no.nav.paw.logger.auth") private val auditLogger: Logger = buildAuditLogger - context(RequestContext) @WithSpan - suspend fun authorize(tilgangType: TilgangType): SecurityContext { - val tokenContext = principal?.context ?: throw BearerTokenManglerException("Sesjon mangler") + suspend fun authorize(requestContext: RequestContext, tilgangType: TilgangType): SecurityContext { + val tokenContext = requestContext.principal?.context ?: throw BearerTokenManglerException("Sesjon mangler") val accessToken = tokenContext.resolveTokens().firstOrNull() ?: throw UgyldigBearerTokenException("Ingen gyldige Bearer Tokens funnet") @@ -48,7 +47,7 @@ class AuthorizationService( } val securityContext = SecurityContext( - sluttbruker = resolveSluttbruker(accessToken, identitetsnummer), + sluttbruker = resolveSluttbruker(accessToken, requestContext.identitetsnummer), innloggetBruker = resolveInnloggetBruker(accessToken), accessToken = accessToken, tilgangType = tilgangType diff --git a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/services/BekreftelseService.kt b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/services/BekreftelseService.kt index f6fca4ad..63f205cc 100644 --- a/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/services/BekreftelseService.kt +++ b/apps/bekreftelse-api/src/main/kotlin/no/nav/paw/bekreftelse/api/services/BekreftelseService.kt @@ -45,39 +45,39 @@ class BekreftelseService( return checkNotNull(internStateStore) { "Intern state store er ikke initiert" } } - context(SecurityContext) @WithSpan suspend fun finnTilgjengeligBekreftelser( + securityContext: SecurityContext, request: TilgjengeligeBekreftelserRequest, useMockData: Boolean ): TilgjengeligBekreftelserResponse { // TODO Fjern når vi har ferdig Kafka-logikk if (useMockData) { - return mockDataService.finnTilgjengeligBekreftelser(sluttbruker.identitetsnummer) + return mockDataService.finnTilgjengeligBekreftelser(securityContext.sluttbruker.identitetsnummer) } - val internState = getInternStateStore().get(sluttbruker.arbeidssoekerId) + val internState = getInternStateStore().get(securityContext.sluttbruker.arbeidssoekerId) if (internState != null) { logger.info("Fant ${internState.tilgjendeligeBekreftelser.size} tilgjengelige bekreftelser") return internState.tilgjendeligeBekreftelser.toResponse() } else { - return finnTilgjengeligBekreftelserFraAnnenNode(request) + return finnTilgjengeligBekreftelserFraAnnenNode(securityContext, request) } } - context(SecurityContext) @WithSpan suspend fun mottaBekreftelse( + securityContext: SecurityContext, request: BekreftelseRequest, useMockData: Boolean ) { // TODO Fjern når vi har ferdig Kafka-logikk if (useMockData) { - return mockDataService.mottaBekreftelse(sluttbruker.identitetsnummer, request.bekreftelseId) + return mockDataService.mottaBekreftelse(securityContext.sluttbruker.identitetsnummer, request.bekreftelseId) } - val internState = getInternStateStore().get(sluttbruker.arbeidssoekerId) + val internState = getInternStateStore().get(securityContext.sluttbruker.arbeidssoekerId) if (internState != null) { val tilgjengeligBekreftelse = internState.tilgjendeligeBekreftelser @@ -88,24 +88,24 @@ class BekreftelseService( periodeId = tilgjengeligBekreftelse.periodeId, gjelderFra = tilgjengeligBekreftelse.gjelderFra, gjelderTil = tilgjengeligBekreftelse.gjelderTil, - innloggetBruker + securityContext.innloggetBruker ) - bekreftelseKafkaProducer.produceMessage(sluttbruker.kafkaKey, bekreftelse) + bekreftelseKafkaProducer.produceMessage(securityContext.sluttbruker.kafkaKey, bekreftelse) } else { // TODO Rekreftelse ikke funnet. Hva gjør vi? } } else { - sendBekreftelseTilAnnenNode(request) + sendBekreftelseTilAnnenNode(securityContext, request) } } - context(SecurityContext) private suspend fun finnTilgjengeligBekreftelserFraAnnenNode( + securityContext: SecurityContext, request: TilgjengeligeBekreftelserRequest ): TilgjengeligBekreftelserResponse { val metadata = kafkaStreams.queryMetadataForKey( applicationConfig.kafkaTopology.internStateStoreName, - sluttbruker.arbeidssoekerId, + securityContext.sluttbruker.arbeidssoekerId, Serdes.Long().serializer() ) @@ -115,19 +115,19 @@ class BekreftelseService( } else { return bekreftelseHttpConsumer.finnTilgjengeligBekreftelser( host = metadata.activeHost().host(), - bearerToken = accessToken.jwt, + bearerToken = securityContext.accessToken.jwt, request = request ) } } - context(SecurityContext) private suspend fun sendBekreftelseTilAnnenNode( + securityContext: SecurityContext, request: BekreftelseRequest ) { val metadata = kafkaStreams.queryMetadataForKey( applicationConfig.kafkaTopology.internStateStoreName, - sluttbruker.arbeidssoekerId, + securityContext.sluttbruker.arbeidssoekerId, Serdes.Long().serializer() ) @@ -137,7 +137,7 @@ class BekreftelseService( } else { bekreftelseHttpConsumer.sendBekreftelse( host = metadata.activeHost().host(), - bearerToken = accessToken.jwt, + bearerToken = securityContext.accessToken.jwt, request = request ) } diff --git a/apps/bekreftelse-api/src/test/kotlin/no/nav/paw/bekreftelse/api/ApplicationTestContext.kt b/apps/bekreftelse-api/src/test/kotlin/no/nav/paw/bekreftelse/api/ApplicationTestContext.kt index 9af858e1..1fc99ae9 100644 --- a/apps/bekreftelse-api/src/test/kotlin/no/nav/paw/bekreftelse/api/ApplicationTestContext.kt +++ b/apps/bekreftelse-api/src/test/kotlin/no/nav/paw/bekreftelse/api/ApplicationTestContext.kt @@ -103,19 +103,16 @@ class ApplicationTestContext { route("/api/secured") { authenticate("idporten", "tokenx", "azure") { get("/") { - with(resolveRequest()) { - with(authorizationService.authorize(TilgangType.LESE)) { - call.respond("WHATEVER") - } - } + authorizationService.authorize(resolveRequest(), TilgangType.LESE) + call.respond("WHATEVER") } post("/") { request -> - with(resolveRequest(request.identitetsnummer)) { - with(authorizationService.authorize(TilgangType.SKRIVE)) { - call.respond("WHATEVER") - } - } + authorizationService.authorize( + requestContext = resolveRequest(request.identitetsnummer), + tilgangType = TilgangType.SKRIVE + ) + call.respond("WHATEVER") } } }