2020-06-12 19:56:51 +00:00
|
|
|
/* ktlint-disable no-wildcard-imports */
|
2020-06-13 23:19:04 +00:00
|
|
|
package mdnet.base.server
|
2020-06-12 19:56:51 +00:00
|
|
|
|
2020-06-14 11:06:10 +00:00
|
|
|
import java.time.ZoneOffset
|
|
|
|
import java.time.ZonedDateTime
|
|
|
|
import java.time.format.DateTimeFormatter
|
|
|
|
import java.util.*
|
2020-06-12 19:56:51 +00:00
|
|
|
import mdnet.base.Constants
|
|
|
|
import org.http4k.core.Filter
|
|
|
|
import org.http4k.core.HttpHandler
|
|
|
|
import org.http4k.core.Request
|
|
|
|
import org.http4k.core.Response
|
|
|
|
import org.http4k.core.Status
|
|
|
|
import org.slf4j.LoggerFactory
|
|
|
|
|
|
|
|
private val HTTP_TIME_FORMATTER = DateTimeFormatter.ofPattern("EEE, dd MMM yyyy HH:mm:ss O", Locale.ENGLISH)
|
|
|
|
private val LOGGER = LoggerFactory.getLogger("Application")
|
|
|
|
|
|
|
|
fun addCommonHeaders(): Filter {
|
|
|
|
return Filter { next: HttpHandler ->
|
|
|
|
{ request: Request ->
|
|
|
|
val response = next(request)
|
|
|
|
response.header("Date", HTTP_TIME_FORMATTER.format(ZonedDateTime.now(ZoneOffset.UTC)))
|
|
|
|
.header("Server", "Mangadex@Home Node ${Constants.CLIENT_VERSION} (${Constants.CLIENT_BUILD})")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
fun catchAllHideDetails(): Filter {
|
|
|
|
return Filter { next: HttpHandler ->
|
|
|
|
{ request: Request ->
|
|
|
|
try {
|
|
|
|
next(request)
|
|
|
|
} catch (e: Exception) {
|
|
|
|
if (LOGGER.isWarnEnabled) {
|
|
|
|
LOGGER.warn("Request error detected", e)
|
|
|
|
}
|
|
|
|
Response(Status.INTERNAL_SERVER_ERROR)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2020-06-14 11:06:10 +00:00
|
|
|
|
2020-06-19 20:16:24 +00:00
|
|
|
fun timeRequest(): Filter {
|
|
|
|
return Filter { next: HttpHandler ->
|
|
|
|
{ request: Request ->
|
2020-06-14 11:06:10 +00:00
|
|
|
val start = System.currentTimeMillis()
|
|
|
|
val response = next(request)
|
|
|
|
val latency = System.currentTimeMillis() - start
|
|
|
|
if (LOGGER.isTraceEnabled && response.header("X-Uri") != null) {
|
|
|
|
// Dirty hack to get sanitizedUri from ImageServer
|
|
|
|
val sanitizedUri = response.header("X-Uri")
|
|
|
|
// Log in TRACE
|
2020-06-16 01:55:53 +00:00
|
|
|
if (LOGGER.isInfoEnabled) {
|
|
|
|
LOGGER.info("Request for $sanitizedUri completed in ${latency}ms")
|
|
|
|
}
|
2020-06-14 11:06:10 +00:00
|
|
|
// Delete response header entirely
|
|
|
|
response.header("X-Uri", null)
|
|
|
|
}
|
|
|
|
// Set response header with processing times
|
|
|
|
response.header("X-Time-Taken", latency.toString())
|
2020-06-19 20:16:24 +00:00
|
|
|
}
|
2020-06-14 11:06:10 +00:00
|
|
|
}
|
|
|
|
}
|