in dsl/kotless/kotless-lang-local/src/main/kotlin/io/kotless/local/handler/DynamicHandler.kt [17:70]
override fun handle(target: String, baseRequest: Request, request: HttpServletRequest, response: HttpServletResponse) {
val apiRequest = AwsHttpRequest(
resource = request.requestURI,
path = request.requestURI,
method = HttpMethod.valueOf(request.method),
myHeaders = request.headerNames.asSequence().map { it to request.getHeader(it) }.toMap(),
myQueryStringParameters = request.parameterNames.asSequence().map { it to request.getParameter(it) }.toMap(),
pathParameters = emptyMap(),
requestContext = AwsHttpRequest.RequestContext(
resourcePath = request.requestURI,
path = request.requestURI,
accountId = "-1",
resourceId = "-1",
stage = "/",
identity = AwsHttpRequest.RequestContext.RequestIdentity(
sourceIp = request.remoteAddr,
userAgent = request.getHeader("User-Agent")
),
protocol = request.protocol,
requestTimeEpoch = System.currentTimeMillis(),
domainName = request.serverName
),
myBody = request.reader.readText(),
isBase64Encoded = false
)
val output = ByteArrayOutputStream()
handler.handleRequest(
input = JSON.string(AwsHttpRequest.serializer(), apiRequest).byteInputStream(),
output = output,
any = null
)
val apiResponse = JSON.parse(HttpResponse.serializer(), output.toString(Charsets.UTF_8.name()))
response.apply {
status = apiResponse.statusCode
for ((name, value) in apiResponse.headers) {
setHeader(name, value)
}
val apiResponseBody = apiResponse.body
if (apiResponseBody != null) {
if (apiResponse.isBase64Encoded) {
outputStream.write(Base64.getDecoder().decode(apiResponseBody))
} else {
outputStream.write(apiResponseBody.toByteArray(Charsets.UTF_8))
}
}
}
baseRequest.isHandled = true
}