summaryrefslogtreecommitdiff
path: root/cask/src/cask/endpoints
diff options
context:
space:
mode:
Diffstat (limited to 'cask/src/cask/endpoints')
-rw-r--r--cask/src/cask/endpoints/FormEndpoint.scala18
-rw-r--r--cask/src/cask/endpoints/JsonEndpoint.scala10
-rw-r--r--cask/src/cask/endpoints/ParamReader.scala16
-rw-r--r--cask/src/cask/endpoints/StaticEndpoints.scala10
-rw-r--r--cask/src/cask/endpoints/WebEndpoints.scala16
-rw-r--r--cask/src/cask/endpoints/WebSocketEndpoint.scala15
6 files changed, 44 insertions, 41 deletions
diff --git a/cask/src/cask/endpoints/FormEndpoint.scala b/cask/src/cask/endpoints/FormEndpoint.scala
index a952a2a..cc74093 100644
--- a/cask/src/cask/endpoints/FormEndpoint.scala
+++ b/cask/src/cask/endpoints/FormEndpoint.scala
@@ -7,40 +7,40 @@ import io.undertow.server.handlers.form.FormParserFactory
import collection.JavaConverters._
-sealed trait FormReader[T] extends Router.ArgReader[Seq[FormEntry], T, ParamContext]
+sealed trait FormReader[T] extends Router.ArgReader[Seq[FormEntry], T, Request]
object FormReader{
implicit def paramFormReader[T: QueryParamReader] = new FormReader[T]{
def arity = implicitly[QueryParamReader[T]].arity
- def read(ctx: ParamContext, label: String, input: Seq[FormEntry]) = {
+ def read(ctx: Request, label: String, input: Seq[FormEntry]) = {
implicitly[QueryParamReader[T]].read(ctx, label, if (input == null) null else input.map(_.valueOrFileName))
}
}
implicit def formEntryReader = new FormReader[FormEntry]{
def arity = 1
- def read(ctx: ParamContext, label: String, input: Seq[FormEntry]) = input.head
+ def read(ctx: Request, label: String, input: Seq[FormEntry]) = input.head
}
implicit def formEntriesReader = new FormReader[Seq[FormEntry]]{
def arity = 1
- def read(ctx: ParamContext, label: String, input: Seq[FormEntry]) = input
+ def read(ctx: Request, label: String, input: Seq[FormEntry]) = input
}
implicit def formValueReader = new FormReader[FormValue]{
def arity = 1
- def read(ctx: ParamContext, label: String, input: Seq[FormEntry]) = input.head.asInstanceOf[FormValue]
+ def read(ctx: Request, label: String, input: Seq[FormEntry]) = input.head.asInstanceOf[FormValue]
}
implicit def formValuesReader = new FormReader[Seq[FormValue]]{
def arity = 1
- def read(ctx: ParamContext, label: String, input: Seq[FormEntry]) = input.map(_.asInstanceOf[FormValue])
+ def read(ctx: Request, label: String, input: Seq[FormEntry]) = input.map(_.asInstanceOf[FormValue])
}
implicit def formFileReader = new FormReader[FormFile]{
def arity = 1
- def read(ctx: ParamContext, label: String, input: Seq[FormEntry]) = input.head.asInstanceOf[FormFile]
+ def read(ctx: Request, label: String, input: Seq[FormEntry]) = input.head.asInstanceOf[FormFile]
}
implicit def formFilesReader = new FormReader[Seq[FormFile]]{
def arity = 1
- def read(ctx: ParamContext, label: String, input: Seq[FormEntry]) = input.map(_.asInstanceOf[FormFile])
+ def read(ctx: Request, label: String, input: Seq[FormEntry]) = input.map(_.asInstanceOf[FormFile])
}
}
class postForm(val path: String, override val subpath: Boolean = false) extends Endpoint {
@@ -49,7 +49,7 @@ class postForm(val path: String, override val subpath: Boolean = false) extends
val methods = Seq("post")
type Input = Seq[FormEntry]
type InputParser[T] = FormReader[T]
- def wrapFunction(ctx: ParamContext,
+ def wrapFunction(ctx: Request,
delegate: Map[String, Input] => Router.Result[Output]): Router.Result[Response] = {
try {
val formData = FormParserFactory.builder().build().createParser(ctx.exchange).parseBlocking()
diff --git a/cask/src/cask/endpoints/JsonEndpoint.scala b/cask/src/cask/endpoints/JsonEndpoint.scala
index f91b888..212597c 100644
--- a/cask/src/cask/endpoints/JsonEndpoint.scala
+++ b/cask/src/cask/endpoints/JsonEndpoint.scala
@@ -5,15 +5,15 @@ import java.io.ByteArrayOutputStream
import cask.internal.{Router, Util}
import cask.internal.Router.EntryPoint
import cask.main.{Endpoint, HttpDecorator, Routes}
-import cask.model.{ParamContext, Response}
+import cask.model.{Request, Response}
-sealed trait JsReader[T] extends Router.ArgReader[ujson.Js.Value, T, cask.model.ParamContext]
+sealed trait JsReader[T] extends Router.ArgReader[ujson.Js.Value, T, cask.model.Request]
object JsReader{
implicit def defaultJsReader[T: upickle.default.Reader] = new JsReader[T]{
def arity = 1
- def read(ctx: cask.model.ParamContext, label: String, input: ujson.Js.Value): T = {
+ def read(ctx: cask.model.Request, label: String, input: ujson.Js.Value): T = {
implicitly[upickle.default.Reader[T]].apply(input)
}
}
@@ -21,7 +21,7 @@ object JsReader{
implicit def paramReader[T: ParamReader] = new JsReader[T] {
override def arity = 0
- override def read(ctx: cask.model.ParamContext, label: String, v: ujson.Js.Value) = {
+ override def read(ctx: cask.model.Request, label: String, v: ujson.Js.Value) = {
implicitly[ParamReader[T]].read(ctx, label, Nil)
}
}
@@ -31,7 +31,7 @@ class postJson(val path: String, override val subpath: Boolean = false) extends
val methods = Seq("post")
type Input = ujson.Js.Value
type InputParser[T] = JsReader[T]
- def wrapFunction(ctx: ParamContext,
+ def wrapFunction(ctx: Request,
delegate: Map[String, Input] => Router.Result[Output]): Router.Result[Response] = {
val obj = for{
str <-
diff --git a/cask/src/cask/endpoints/ParamReader.scala b/cask/src/cask/endpoints/ParamReader.scala
index f1ec0bf..e43f482 100644
--- a/cask/src/cask/endpoints/ParamReader.scala
+++ b/cask/src/cask/endpoints/ParamReader.scala
@@ -1,22 +1,28 @@
package cask.endpoints
import cask.internal.Router
-import cask.model.ParamContext
+import cask.model.{Cookie, Request}
import io.undertow.server.HttpServerExchange
import io.undertow.server.handlers.form.{FormData, FormParserFactory}
-abstract class ParamReader[T] extends Router.ArgReader[Unit, T, cask.model.ParamContext]{
+abstract class ParamReader[T] extends Router.ArgReader[Unit, T, cask.model.Request]{
def arity: Int
- def read(ctx: cask.model.ParamContext, label: String, v: Unit): T
+ def read(ctx: cask.model.Request, label: String, v: Unit): T
}
object ParamReader{
- class NilParam[T](f: (ParamContext, String) => T) extends ParamReader[T]{
+ class NilParam[T](f: (Request, String) => T) extends ParamReader[T]{
def arity = 0
- def read(ctx: cask.model.ParamContext, label: String, v: Unit): T = f(ctx, label)
+ def read(ctx: cask.model.Request, label: String, v: Unit): T = f(ctx, label)
}
implicit object HttpExchangeParam extends NilParam[HttpServerExchange]((ctx, label) => ctx.exchange)
implicit object FormDataParam extends NilParam[FormData]((ctx, label) =>
FormParserFactory.builder().build().createParser(ctx.exchange).parseBlocking()
)
+
+ implicit object RequestParam extends NilParam[Request]((ctx, label) => ctx)
+
+ implicit object CookieParam extends NilParam[Cookie]((ctx, label) =>
+ Cookie.fromUndertow(ctx.exchange.getRequestCookies().get(label))
+ )
}
diff --git a/cask/src/cask/endpoints/StaticEndpoints.scala b/cask/src/cask/endpoints/StaticEndpoints.scala
index 1d66b2c..15eae0d 100644
--- a/cask/src/cask/endpoints/StaticEndpoints.scala
+++ b/cask/src/cask/endpoints/StaticEndpoints.scala
@@ -1,7 +1,7 @@
package cask.endpoints
import cask.main.Endpoint
-import cask.model.ParamContext
+import cask.model.Request
class staticFiles(val path: String) extends Endpoint{
type Output = String
@@ -9,8 +9,8 @@ class staticFiles(val path: String) extends Endpoint{
type Input = Seq[String]
type InputParser[T] = QueryParamReader[T]
override def subpath = true
- def wrapFunction(ctx: ParamContext, delegate: Delegate): Returned = {
- delegate(Map()).map(t => cask.model.StaticFile(t + "/" + ctx.remaining.mkString("/")))
+ def wrapFunction(ctx: Request, delegate: Delegate): Returned = {
+ delegate(Map()).map(t => cask.model.StaticFile(t + "/" + ctx.remainingPathSegments.mkString("/")))
}
def wrapPathSegment(s: String): Input = Seq(s)
@@ -22,9 +22,9 @@ class staticResources(val path: String, resourceRoot: ClassLoader = getClass.get
type Input = Seq[String]
type InputParser[T] = QueryParamReader[T]
override def subpath = true
- def wrapFunction(ctx: ParamContext, delegate: Delegate): Returned = {
+ def wrapFunction(ctx: Request, delegate: Delegate): Returned = {
delegate(Map()).map(t =>
- cask.model.StaticResource(t + "/" + ctx.remaining.mkString("/"), resourceRoot)
+ cask.model.StaticResource(t + "/" + ctx.remainingPathSegments.mkString("/"), resourceRoot)
)
}
diff --git a/cask/src/cask/endpoints/WebEndpoints.scala b/cask/src/cask/endpoints/WebEndpoints.scala
index 41c3113..02aeec4 100644
--- a/cask/src/cask/endpoints/WebEndpoints.scala
+++ b/cask/src/cask/endpoints/WebEndpoints.scala
@@ -2,7 +2,7 @@ package cask.endpoints
import cask.internal.Router
import cask.main.{Endpoint, HttpDecorator}
-import cask.model.{ParamContext, Response}
+import cask.model.{Request, Response}
import collection.JavaConverters._
@@ -11,7 +11,7 @@ trait WebEndpoint extends Endpoint with HttpDecorator{
type Output = Response
type Input = Seq[String]
type InputParser[T] = QueryParamReader[T]
- def wrapFunction(ctx: ParamContext,
+ def wrapFunction(ctx: Request,
delegate: Map[String, Input] => Router.Result[Output]): Router.Result[Response] = {
delegate(
ctx.exchange.getQueryParameters
@@ -34,14 +34,14 @@ class put(val path: String, override val subpath: Boolean = false) extends WebEn
class route(val path: String, val methods: Seq[String], override val subpath: Boolean = false) extends WebEndpoint
abstract class QueryParamReader[T]
- extends Router.ArgReader[Seq[String], T, cask.model.ParamContext]{
+ extends Router.ArgReader[Seq[String], T, cask.model.Request]{
def arity: Int
- def read(ctx: cask.model.ParamContext, label: String, v: Seq[String]): T
+ def read(ctx: cask.model.Request, label: String, v: Seq[String]): T
}
object QueryParamReader{
class SimpleParam[T](f: String => T) extends QueryParamReader[T]{
def arity = 1
- def read(ctx: cask.model.ParamContext, label: String, v: Seq[String]): T = f(v.head)
+ def read(ctx: cask.model.Request, label: String, v: Seq[String]): T = f(v.head)
}
implicit object StringParam extends SimpleParam[String](x => x)
@@ -54,20 +54,20 @@ object QueryParamReader{
implicit object FloatParam extends SimpleParam[Float](_.toFloat)
implicit def SeqParam[T: QueryParamReader] = new QueryParamReader[Seq[T]]{
def arity = 1
- def read(ctx: cask.model.ParamContext, label: String, v: Seq[String]): Seq[T] = {
+ def read(ctx: cask.model.Request, label: String, v: Seq[String]): Seq[T] = {
v.map(x => implicitly[QueryParamReader[T]].read(ctx, label, Seq(x)))
}
}
implicit def OptionParam[T: QueryParamReader] = new QueryParamReader[Option[T]]{
def arity = 1
- def read(ctx: cask.model.ParamContext, label: String, v: Seq[String]): Option[T] = {
+ def read(ctx: cask.model.Request, label: String, v: Seq[String]): Option[T] = {
v.headOption.map(x => implicitly[QueryParamReader[T]].read(ctx, label, Seq(x)))
}
}
implicit def paramReader[T: ParamReader] = new QueryParamReader[T] {
override def arity = 0
- override def read(ctx: cask.model.ParamContext, label: String, v: Seq[String]) = {
+ override def read(ctx: cask.model.Request, label: String, v: Seq[String]) = {
implicitly[ParamReader[T]].read(ctx, label, v)
}
}
diff --git a/cask/src/cask/endpoints/WebSocketEndpoint.scala b/cask/src/cask/endpoints/WebSocketEndpoint.scala
index 89c05b9..8c6bc16 100644
--- a/cask/src/cask/endpoints/WebSocketEndpoint.scala
+++ b/cask/src/cask/endpoints/WebSocketEndpoint.scala
@@ -1,25 +1,22 @@
package cask.endpoints
import cask.internal.Router
-import cask.model.{ParamContext, Subpath}
+import cask.model.Request
import io.undertow.server.HttpServerExchange
import io.undertow.websockets.WebSocketConnectionCallback
-trait WebsocketParam[T] extends Router.ArgReader[Seq[String], T, cask.model.ParamContext]
+trait WebsocketParam[T] extends Router.ArgReader[Seq[String], T, cask.model.Request]
object WebsocketParam{
- class NilParam[T](f: (ParamContext, String) => T) extends WebsocketParam[T]{
+ class NilParam[T](f: (Request, String) => T) extends WebsocketParam[T]{
def arity = 0
- def read(ctx: ParamContext, label: String, v: Seq[String]): T = f(ctx, label)
+ def read(ctx: Request, label: String, v: Seq[String]): T = f(ctx, label)
}
implicit object HttpExchangeParam extends NilParam[HttpServerExchange](
(ctx, label) => ctx.exchange
)
- implicit object SubpathParam extends NilParam[Subpath](
- (ctx, label) => new Subpath(ctx.remaining)
- )
class SimpleParam[T](f: String => T) extends WebsocketParam[T]{
def arity = 1
- def read(ctx: cask.model.ParamContext, label: String, v: Seq[String]): T = f(v.head)
+ def read(ctx: cask.model.Request, label: String, v: Seq[String]): T = f(v.head)
}
implicit object StringParam extends SimpleParam[String](x => x)
@@ -44,7 +41,7 @@ class websocket(val path: String, override val subpath: Boolean = false) extends
type Input = Seq[String]
type InputParser[T] = WebsocketParam[T]
type Returned = Router.Result[WebsocketResult]
- def wrapFunction(ctx: ParamContext, delegate: Delegate): Returned = delegate(Map())
+ def wrapFunction(ctx: Request, delegate: Delegate): Returned = delegate(Map())
def wrapPathSegment(s: String): Input = Seq(s)