Skip to content

Commit

Permalink
chore: created async version of getnavEmail and used it
Browse files Browse the repository at this point in the history
Co-authored-by: Andreas <[email protected]>
  • Loading branch information
jaflaten and andreasDev committed Nov 29, 2024
1 parent d005b2a commit 07051da
Show file tree
Hide file tree
Showing 9 changed files with 53 additions and 29 deletions.
2 changes: 2 additions & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ val prometheusVersion = "0.16.0"
val mockkVersion = "1.13.10"
val kluentVersion = "1.73"
val coroutinesVersion = "1.8.1"
val coroutineReactorVersion = "1.9.0"
val hibernateVersion = "6.2.6.Final"
val jacksonDatatypeJsr310Version = "2.18.0"

Expand All @@ -57,6 +58,7 @@ dependencies {
implementation("com.netflix.graphql.dgs:graphql-dgs-extended-scalars")
implementation("com.graphql-java:graphql-java:$graphqlVersion")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-slf4j:$coroutinesVersion")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-reactor:$coroutineReactorVersion")
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
implementation("com.fasterxml.jackson.module:jackson-module-jaxb-annotations")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ class SykmelderService(
val log = applog()
val securelog = securelog()

suspend fun getSykmelder(
fun getSykmelder(
hprNummer: String,
callId: String,
): Sykmelder {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,27 +41,32 @@ class NasjonalOppgaveService(
val securelog = securelog()
val mapper = jacksonObjectMapper()

fun lagreOppgave(papirManuellOppgave: PapirManuellOppgave): NasjonalManuellOppgaveDAO {
suspend fun lagreOppgave(papirManuellOppgave: PapirManuellOppgave): NasjonalManuellOppgaveDAO = withContext(Dispatchers.IO) {
val eksisterendeOppgave = nasjonalOppgaveRepository.findBySykmeldingId(papirManuellOppgave.sykmeldingId)

if (eksisterendeOppgave.isPresent) {
return nasjonalOppgaveRepository.save(mapToDao(papirManuellOppgave, eksisterendeOppgave.get().id))
nasjonalOppgaveRepository.save(mapToDao(papirManuellOppgave, eksisterendeOppgave.get().id))
}
return nasjonalOppgaveRepository.save(mapToDao(papirManuellOppgave, null))
nasjonalOppgaveRepository.save(mapToDao(papirManuellOppgave, null))
}

fun oppdaterOppgave(sykmeldingId: String, utfall: String, ferdigstiltAv: String, avvisningsgrunn: String?): NasjonalManuellOppgaveDAO {
return nasjonalOppgaveRepository.save(
mapToUpdateDao(sykmeldingId, utfall, ferdigstiltAv, avvisningsgrunn, nasjonalOppgaveRepository.findBySykmeldingId(sykmeldingId).get()),
)
suspend fun oppdaterOppgave(sykmeldingId: String, utfall: String, ferdigstiltAv: String, avvisningsgrunn: String?): NasjonalManuellOppgaveDAO {
return withContext(Dispatchers.IO) {
nasjonalOppgaveRepository.save(
mapToUpdateDao(sykmeldingId, utfall, ferdigstiltAv, avvisningsgrunn, nasjonalOppgaveRepository.findBySykmeldingId(sykmeldingId).get()),
)
}
}

fun findByOppgaveId(oppgaveId: Int): NasjonalManuellOppgaveDAO? {
val oppgave = nasjonalOppgaveRepository.findByOppgaveId(oppgaveId)
suspend fun findByOppgaveId(oppgaveId: Int): NasjonalManuellOppgaveDAO? {
val oppgave = withContext(Dispatchers.IO) {
nasjonalOppgaveRepository.findByOppgaveId(oppgaveId)
}
if (!oppgave.isPresent) return null
return oppgave.get()
}

fun getNasjonalOppgave(oppgaveId: String): NasjonalManuellOppgaveDAO {
suspend fun getNasjonalOppgave(oppgaveId: String): NasjonalManuellOppgaveDAO {
val oppgave = findByOppgaveId(oppgaveId.toInt())
if (oppgave == null) {
log.warn("Fant ikke oppgave med id $oppgaveId")
Expand Down Expand Up @@ -91,10 +96,11 @@ class NasjonalOppgaveService(
}
val avvisningsgrunn = mapper.readValue(request, AvvisSykmeldingRequest::class.java).reason
if (eksisterendeOppgave.isPresent) {
log.info("navEmail: ${oppgaveSecurityService.getNavEmail()}")
val navEmail = oppgaveSecurityService.getNavEmailAsync()
log.info("navEmail: $navEmail")
// val veilederIdent = oppgaveSecurityService.getNavIdent().veilederIdent
val veilederIdent = oppgaveSecurityService.getNavEmail()
ferdigstillNasjonalAvvistOppgave(oppgaveId, authorization, navEnhet, oppgaveSecurityService.getNavEmail(), avvisningsgrunn, veilederIdent)
val veilederIdent = navEmail
ferdigstillNasjonalAvvistOppgave(oppgaveId, authorization, navEnhet, navEmail, avvisningsgrunn, veilederIdent)
val res = oppdaterOppgave(
eksisterendeOppgave.get().sykmeldingId,
utfall = Utfall.AVVIST.toString(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ class NasjonalSykmeldingService(
sykmelder = sykmelder,
navEnhet = navEnhet,
// veileder = oppgaveSecurityService.getNavIdent(),
veileder = Veileder(oppgaveSecurityService.getNavEmail()),
veileder = Veileder(oppgaveSecurityService.getNavEmailAsync()),
avvist = false,
oppgave = null,
)
Expand All @@ -114,7 +114,7 @@ class NasjonalSykmeldingService(
): ResponseEntity<Any> {
if (validationResult.status == Status.OK || validationResult.status == Status.MANUAL_PROCESSING) {
// val veileder = oppgaveSecurityService.getNavIdent()
val veileder = Veileder(oppgaveSecurityService.getNavEmail())
val veileder = Veileder(oppgaveSecurityService.getNavEmailAsync())
if (ferdigstillRegistrering.oppgaveId != null) {
journalpostService.ferdigstillNasjonalJournalpost(
ferdigstillRegistrering = ferdigstillRegistrering,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ class NasjonalOppgaveController(

@GetMapping("/oppgave/{oppgaveid}")
@ResponseBody
fun getPapirsykmeldingManuellOppgave(
suspend fun getPapirsykmeldingManuellOppgave(
@PathVariable oppgaveid: String,
@RequestHeader("Authorization") authorization: String,
): ResponseEntity<PapirManuellOppgave> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package no.nav.sykdig.digitalisering.papirsykmelding.db

import no.nav.sykdig.digitalisering.papirsykmelding.db.model.NasjonalManuellOppgaveDAO
import org.springframework.data.repository.CrudRepository
import org.springframework.data.repository.kotlin.CoroutineCrudRepository
import org.springframework.stereotype.Repository
import org.springframework.transaction.annotation.Transactional
import java.util.Optional
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package no.nav.sykdig.digitalisering.tilgangskontroll

import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.reactive.awaitSingle
import kotlinx.coroutines.withContext
import no.nav.sykdig.auditLogger.AuditLogger
import no.nav.sykdig.auditlog
import no.nav.sykdig.digitalisering.SykDigOppgaveService
Expand All @@ -13,6 +16,7 @@ import no.nav.sykdig.generated.types.JournalpostResult
import no.nav.sykdig.generated.types.JournalpostStatus
import no.nav.sykdig.objectMapper
import no.nav.sykdig.securelog
import org.springframework.security.core.context.ReactiveSecurityContextHolder
import org.springframework.security.core.context.SecurityContextHolder
import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationToken
import org.springframework.stereotype.Service
Expand All @@ -39,14 +43,16 @@ class OppgaveSecurityService(
return tilgang
}

fun hasAccessToNasjonalOppgave(oppgaveId: String): Boolean {
suspend fun hasAccessToNasjonalOppgave(oppgaveId: String): Boolean {
securelog.info("sjekker om bruker har tilgang på oppgave $oppgaveId")
val oppgave = nasjonalOppgaveRepository.findByOppgaveId(oppgaveId.toInt())
val navEmail = getNavEmail()
val oppgave = withContext(Dispatchers.IO) {
nasjonalOppgaveRepository.findByOppgaveId(oppgaveId.toInt())
}
val navEmail = getNavEmailAsync()
val fnr = oppgave.get().fnr
if (oppgave.isPresent && fnr != null ) {
if (oppgave.isPresent && fnr != null) {
val tilgang = hasAccess(fnr, navEmail)
securelog.info("Innlogget bruker: $navEmail har${ if (!tilgang) " ikke" else ""} tilgang til oppgave med id $oppgaveId")
securelog.info("Innlogget bruker: $navEmail har${if (!tilgang) " ikke" else ""} tilgang til oppgave med id $oppgaveId")
return tilgang
}
return false
Expand Down Expand Up @@ -115,7 +121,7 @@ class OppgaveSecurityService(
return tilgang
}

fun getNavIdent(): Veileder{
fun getNavIdent(): Veileder {
val authentication = SecurityContextHolder.getContext().authentication as JwtAuthenticationToken
return Veileder(authentication.token.claims["NAVident"].toString())
}
Expand All @@ -124,6 +130,13 @@ class OppgaveSecurityService(
val authentication = SecurityContextHolder.getContext().authentication as JwtAuthenticationToken
return authentication.token.claims["preferred_username"].toString()
}

suspend fun getNavEmailAsync(): String {
return ReactiveSecurityContextHolder.getContext().map { context ->
val auth = context.authentication as JwtAuthenticationToken
auth.token.claims["preferred_username"].toString()
}.awaitSingle()
}
}


Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package no.nav.sykdig.digitalisering.papirsykmelding

import kotlinx.coroutines.flow.count
import kotlinx.coroutines.runBlocking
import no.nav.sykdig.IntegrationTest
import no.nav.sykdig.digitalisering.papirsykmelding.api.model.PapirSmRegistering
import no.nav.sykdig.digitalisering.papirsykmelding.db.model.NasjonalManuellOppgaveDAO
Expand All @@ -14,15 +16,15 @@ import java.util.UUID

class NasjonalOppgaveRepositoryTest : IntegrationTest() {
@Test
fun `given New NasjonalOppgave opprett og hent`() {
fun `given New NasjonalOppgave opprett og hent`() = runBlocking {
val savedOppgave = nasjonalOppgaveRepository.save(testData(null, "123"))
val retrievedOppgave = nasjonalOppgaveRepository.findBySykmeldingId(savedOppgave.sykmeldingId)
Assertions.assertTrue(retrievedOppgave.isPresent)
assertEquals(savedOppgave.sykmeldingId, retrievedOppgave.get().sykmeldingId)
}

@Test
fun `insert two instances with same sykmeldingId`() {
fun `insert two instances with same sykmeldingId`() = runBlocking {
nasjonalOppgaveRepository.save(testData(null, "1"))
val eksisterendeOppgave = nasjonalOppgaveRepository.findBySykmeldingId("1")
nasjonalOppgaveRepository.save(testData(eksisterendeOppgave.get().id, "1"))
Expand All @@ -31,15 +33,15 @@ class NasjonalOppgaveRepositoryTest : IntegrationTest() {
}

@Test
fun `insert two instances with unique id`() {
fun `insert two instances with unique id`() = runBlocking {
nasjonalOppgaveRepository.save(testData(null, "3"))
nasjonalOppgaveRepository.save(testData(null, "4"))
val retrievedOppgave = nasjonalOppgaveRepository.findAll()
assertEquals(2, retrievedOppgave.count())
}

@BeforeEach
fun setup() {
fun setup() = runBlocking {
nasjonalOppgaveRepository.deleteAll()
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ class NasjonalOppgaveServiceTest : IntegrationTest() {
private lateinit var restTemplate: RestTemplate

@BeforeEach
fun setUp() {
fun setUp() = runBlocking {
mockJwtAuthentication()
val mockServer = MockRestServiceServer.createServer(restTemplate)

Expand Down Expand Up @@ -107,7 +107,7 @@ class NasjonalOppgaveServiceTest : IntegrationTest() {
}

@Test
fun `oppgave isPresent`() {
fun `oppgave isPresent`() = runBlocking {
val uuid = UUID.randomUUID()
val dao = testDataNasjonalManuellOppgaveDAO(uuid, "123", 123)
val oppgave = nasjonalOppgaveService.lagreOppgave(testDataPapirManuellOppgave())
Expand Down

0 comments on commit 07051da

Please sign in to comment.