aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/scala/xyz/driver/core/app.scala11
-rw-r--r--src/main/scala/xyz/driver/core/database/Dal.scala7
2 files changed, 17 insertions, 1 deletions
diff --git a/src/main/scala/xyz/driver/core/app.scala b/src/main/scala/xyz/driver/core/app.scala
index f7731e3..e35c300 100644
--- a/src/main/scala/xyz/driver/core/app.scala
+++ b/src/main/scala/xyz/driver/core/app.scala
@@ -26,6 +26,8 @@ import xyz.driver.core.time.provider.{SystemTimeProvider, TimeProvider}
import scala.compat.Platform.ConcurrentModificationException
import scala.concurrent.duration._
import scala.concurrent.{Await, ExecutionContext, Future}
+import scalaz.Scalaz.stringInstance
+import scalaz.syntax.equal._
object app {
@@ -59,6 +61,9 @@ object app {
}
}
+ private def extractHeader(request: HttpRequest)(headerName: String): Option[String] =
+ request.headers.find(_.name().toLowerCase === headerName).map(_.value())
+
protected def bindHttp(modules: Seq[Module]): Unit = {
val serviceTypes = modules.flatMap(_.routeTypes)
val swaggerService = new Swagger(baseUrl, Scheme.forValue(scheme), version, actorSystem, serviceTypes, config)
@@ -74,6 +79,12 @@ object app {
val trackingId = rest.extractTrackingId(ctx.request)
MDC.put("trackingId", trackingId)
MDC.put("origin", origin)
+ MDC.put("xForwardedFor",
+ extractHeader(ctx.request)("x-forwarded-for")
+ .orElse(extractHeader(ctx.request)("x_forwarded_for"))
+ .getOrElse("unknown"))
+ MDC.put("remoteAddress", extractHeader(ctx.request)("remote-address").getOrElse("unknown"))
+ MDC.put("userAgent", extractHeader(ctx.request)("user-agent").getOrElse("unknown"))
MDC.put("ip", ip.toOption.map(_.getHostAddress).getOrElse("unknown"))
def requestLogging: Future[Unit] = Future {
diff --git a/src/main/scala/xyz/driver/core/database/Dal.scala b/src/main/scala/xyz/driver/core/database/Dal.scala
index 55766db..ed72d3b 100644
--- a/src/main/scala/xyz/driver/core/database/Dal.scala
+++ b/src/main/scala/xyz/driver/core/database/Dal.scala
@@ -31,12 +31,17 @@ class FutureDal(executionContext: ExecutionContext) extends Dal {
class SlickDal(database: Database, executionContext: ExecutionContext) extends Dal {
import database.profile.api._
implicit val exec = executionContext
+
override type T[D] = slick.dbio.DBIO[D]
- implicit protected class QueryOps[+E, U](query: Query[E, U, Seq]) {
+ implicit protected class QueryOps[U](query: Query[_, U, Seq]) {
def resultT: ListT[T, U] = ListT[T, U](query.result.map(_.toList))
}
+ implicit protected class CompiledQueryOps[U](compiledQuery: slick.lifted.RunnableCompiled[_, Seq[U]]) {
+ def resultT: ListT[T, U] = ListT.listT[T](compiledQuery.result.map(_.toList))
+ }
+
override implicit val monadT: Monad[T] = new Monad[T] {
override def point[A](a: => A): T[A] = DBIO.successful(a)
override def bind[A, B](fa: T[A])(f: A => T[B]): T[B] = fa.flatMap(f)