Skip to content

Commit

Permalink
chore: verifying oppgaveId input to prevent server side request forgery
Browse files Browse the repository at this point in the history
  • Loading branch information
jaflaten committed Dec 5, 2024
1 parent 2a5da9b commit feb93a0
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,15 @@ class NasjonalOppgaveService(
return updated
}

fun findByOppgaveId(oppgaveId: Int): NasjonalManuellOppgaveDAO? {
val oppgave = nasjonalOppgaveRepository.findByOppgaveId(oppgaveId)
fun isValidOppgaveId(oppgaveId: String): Boolean {
val regex = Regex("^\\d{9}$|^[a-zA-Z0-9]{1,20}$")
return oppgaveId.matches(regex)
}

fun findByOppgaveId(oppgaveId: String): NasjonalManuellOppgaveDAO? {
if(!isValidOppgaveId(oppgaveId))
throw IllegalArgumentException("Invalid oppgaveId does not contain only alphanumerical characters. oppgaveId: $oppgaveId")
val oppgave = nasjonalOppgaveRepository.findByOppgaveId(oppgaveId.toInt())

if (oppgave == null) return null
return oppgave
Expand All @@ -82,7 +89,7 @@ class NasjonalOppgaveService(
}

fun getNasjonalOppgave(oppgaveId: String): NasjonalManuellOppgaveDAO {
val oppgave = findByOppgaveId(oppgaveId.toInt())
val oppgave = findByOppgaveId(oppgaveId)
if (oppgave == null) {
log.warn("Fant ikke oppgave med id $oppgaveId")
throw NoOppgaveException("Fant ikke oppgave")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ class NasjonalSykmeldingService(
)
}

suspend fun sendPapirsykmelding(smRegistreringManuell: SmRegistreringManuell, navEnhet: String, callId: String, oppgaveId: Int): ResponseEntity<Any> {
suspend fun sendPapirsykmelding(smRegistreringManuell: SmRegistreringManuell, navEnhet: String, callId: String, oppgaveId: String): ResponseEntity<Any> {
val oppgave = nasjonalOppgaveService.findByOppgaveId(oppgaveId) ?: return ResponseEntity(HttpStatus.NOT_FOUND)
val sykmeldingId = oppgave.sykmeldingId
log.info("Forsøker å ferdigstille papirsykmelding med sykmeldingId $sykmeldingId")
Expand All @@ -85,21 +85,20 @@ class NasjonalSykmeldingService(

val ferdigstillRegistrering =
FerdigstillRegistrering(
oppgaveId = oppgaveId,
oppgaveId = oppgaveId.toInt(),
journalpostId = journalpostId,
dokumentInfoId = dokumentInfoId,
pasientFnr = receivedSykmelding.personNrPasient,
sykmeldingId = sykmeldingId,
sykmelder = sykmelder,
navEnhet = navEnhet,
// veileder = oppgaveSecurityService.getNavIdent(),
veileder = Veileder(oppgaveSecurityService.getNavEmail()),
avvist = false,
oppgave = null,
)

if (!validationResult.ruleHits.isWhitelisted()) {
return handleBrokenRule(validationResult, oppgaveId)
return handleBrokenRule(validationResult, oppgaveId.toInt())
}

return handleOK(validationResult, receivedSykmelding.copy(validationResult = validationResult), ferdigstillRegistrering, loggingMeta, null)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,8 @@ class NasjonalOppgaveController(
@PathVariable oppgaveId: String,
@RequestHeader("Authorization") authorization: String,
): ResponseEntity<PapirManuellOppgave> {
val nasjonalOppgave = nasjonalOppgaveService.findByOppgaveId(oppgaveId.toInt())

val nasjonalOppgave = nasjonalOppgaveService.findByOppgaveId(oppgaveId)
if (nasjonalOppgave != null) {
log.info("papirsykmelding: henter oppgave med id $oppgaveId fra syk-dig-db")
return ResponseEntity.ok(nasjonalOppgaveService.mapFromDao(nasjonalOppgave))
Expand Down Expand Up @@ -120,7 +121,7 @@ class NasjonalOppgaveController(
@RequestBody papirSykmelding: SmRegistreringManuell,
): ResponseEntity<Any> {
val callId = UUID.randomUUID().toString()
return nasjonalSykmeldingService.sendPapirsykmelding(papirSykmelding, navEnhet, callId, oppgaveId.toInt())
return nasjonalSykmeldingService.sendPapirsykmelding(papirSykmelding, navEnhet, callId, oppgaveId)

}

Expand Down

0 comments on commit feb93a0

Please sign in to comment.