Skip to content

Commit

Permalink
feat(common) #62: add validator for message routing headers
Browse files Browse the repository at this point in the history
  • Loading branch information
lilgallon committed Jan 19, 2024
1 parent 992be08 commit 0911532
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ import com.izivia.ocpi.toolkit.common.Header.OCPI_FROM_PARTY_ID
import com.izivia.ocpi.toolkit.common.Header.OCPI_TO_COUNTRY_CODE
import com.izivia.ocpi.toolkit.common.Header.OCPI_TO_PARTY_ID
import com.izivia.ocpi.toolkit.common.context.*
import com.izivia.ocpi.toolkit.common.validation.validate
import com.izivia.ocpi.toolkit.common.validation.validateLength
import com.izivia.ocpi.toolkit.modules.credentials.repositories.PartnerRepository
import com.izivia.ocpi.toolkit.modules.versions.domain.ModuleID
import com.izivia.ocpi.toolkit.transport.TransportClient
Expand Down Expand Up @@ -33,6 +35,15 @@ object ContentType {
const val APPLICATION_JSON = "application/json"
}

fun Map<String, String>.validateMessageRoutingHeaders() {
validate {
validateLength(OCPI_TO_PARTY_ID, getByNormalizedKey(OCPI_TO_PARTY_ID).orEmpty(), 3)
validateLength(OCPI_TO_COUNTRY_CODE, getByNormalizedKey(OCPI_TO_COUNTRY_CODE).orEmpty(), 2)
validateLength(OCPI_FROM_PARTY_ID, getByNormalizedKey(OCPI_FROM_PARTY_ID).orEmpty(), 3)
validateLength(OCPI_FROM_COUNTRY_CODE, getByNormalizedKey(OCPI_FROM_COUNTRY_CODE).orEmpty(), 2)
}
}

/**
* Parse body of a paginated request. The result will be stored in a SearchResult which contains all pagination
* information.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.izivia.ocpi.toolkit.samples.common

import com.izivia.ocpi.toolkit.common.*
import com.izivia.ocpi.toolkit.common.context.ResponseMessageRoutingHeaders
import com.izivia.ocpi.toolkit.common.validation.toReadableString
import com.izivia.ocpi.toolkit.transport.TransportServer
import com.izivia.ocpi.toolkit.transport.domain.*
import kotlinx.coroutines.runBlocking
Expand All @@ -11,6 +12,7 @@ import org.http4k.routing.*
import org.http4k.server.Http4kServer
import org.http4k.server.Netty
import org.http4k.server.asServer
import org.valiktor.ConstraintViolationException

class Http4kTransportServer(
val baseUrl: String,
Expand Down Expand Up @@ -55,17 +57,25 @@ class Http4kTransportServer(
.associate { (key, value) -> key to value!! },
body = req.bodyString()
)
.also { httpRequest ->
try {
httpRequest.headers.validateMessageRoutingHeaders()
} catch (e: ConstraintViolationException) {
throw OcpiClientInvalidParametersException(
message = "invalid message routing headers: " + e.toReadableString()
)
}
}
.also { httpRequest ->
runBlocking { secureFilter(httpRequest) }
}
.also { httpRequest -> filters.forEach { filter -> filter(httpRequest) } }
.let { httpRequest ->
val requestMessageRoutingHeaders = httpRequest.messageRoutingHeaders()
val responseMessageRoutingHeaders = ResponseMessageRoutingHeaders
.invertFromRequest(requestMessageRoutingHeaders)

httpRequest to runBlocking(
requestMessageRoutingHeaders +
ResponseMessageRoutingHeaders.invertFromRequest(requestMessageRoutingHeaders)
) {
httpRequest to runBlocking(requestMessageRoutingHeaders + responseMessageRoutingHeaders) {
callback(httpRequest)
}
}
Expand Down

0 comments on commit 0911532

Please sign in to comment.