summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cask/src/cask/Cookie.scala46
-rw-r--r--cask/src/cask/Main.scala2
-rw-r--r--cask/src/cask/ParamReader.scala3
-rw-r--r--cask/src/cask/Routes.scala3
-rw-r--r--cask/src/cask/Util.scala4
-rw-r--r--cask/test/src/test/cask/Cookies.scala20
6 files changed, 61 insertions, 17 deletions
diff --git a/cask/src/cask/Cookie.scala b/cask/src/cask/Cookie.scala
new file mode 100644
index 0000000..8d1d239
--- /dev/null
+++ b/cask/src/cask/Cookie.scala
@@ -0,0 +1,46 @@
+package cask
+
+import io.undertow.server.handlers.CookieImpl
+
+object Cookie{
+ def fromUndertow(from: io.undertow.server.handlers.Cookie): Cookie = {
+ Cookie(
+ from.getName,
+ from.getValue,
+ from.getComment,
+ from.getDomain,
+ if (from.getExpires == null) null else from.getExpires.toInstant,
+ from.getMaxAge,
+ from.getPath,
+ from.getVersion,
+ from.isDiscard,
+ from.isHttpOnly,
+ from.isSecure
+ )
+ }
+ def toUndertow(from: Cookie): io.undertow.server.handlers.Cookie = {
+ val out = new CookieImpl(from.name, from.value)
+ out.setComment(from.comment)
+ out.setDomain(from.domain)
+ out.setExpires(if (from.expires == null) null else java.util.Date.from(from.expires))
+ out.setMaxAge(from.maxAge)
+ out.setPath(from.path)
+ out.setVersion(from.version)
+ out.setDiscard(from.discard)
+ out.setHttpOnly(from.httpOnly)
+ out.setSecure(from.secure)
+ }
+}
+case class Cookie(name: String,
+ value: String,
+ comment: String = null,
+ domain: String = null,
+ expires: java.time.Instant = null,
+ maxAge: Integer = null,
+ path: String = null,
+ version: Int = 1,
+ discard: Boolean = false,
+ httpOnly: Boolean = false,
+ secure: Boolean = false) {
+
+}
diff --git a/cask/src/cask/Main.scala b/cask/src/cask/Main.scala
index 13e638b..6ee928e 100644
--- a/cask/src/cask/Main.scala
+++ b/cask/src/cask/Main.scala
@@ -41,7 +41,7 @@ abstract class BaseMain{
response.headers.foreach{case (k, v) =>
exchange.getResponseHeaders.put(new HttpString(k), v)
}
- response.cookies.foreach(exchange.setResponseCookie)
+ response.cookies.foreach(c => exchange.setResponseCookie(Cookie.toUndertow(c)))
exchange.setStatusCode(response.statusCode)
response.data.write(exchange.getOutputStream)
diff --git a/cask/src/cask/ParamReader.scala b/cask/src/cask/ParamReader.scala
index 75b0d14..ac3614f 100644
--- a/cask/src/cask/ParamReader.scala
+++ b/cask/src/cask/ParamReader.scala
@@ -1,7 +1,6 @@
package cask
import io.undertow.server.HttpServerExchange
-import io.undertow.server.handlers.Cookie
import io.undertow.server.handlers.form.{FormData, FormParserFactory}
abstract class ParamReader[T]
@@ -37,7 +36,7 @@ object ParamReader{
implicit object SubpathParam extends NilParam[Subpath]((server, remaining) => new Subpath(remaining))
implicit object CookieParam extends NilParam[Cookies]((server, remaining) => {
import collection.JavaConverters._
- new Cookies(server.getRequestCookies.asScala.toMap)
+ new Cookies(server.getRequestCookies.asScala.toMap.map{case (k, v) => (k, Cookie.fromUndertow(v))})
})
implicit object FormDataParam extends NilParam[FormData]((server, remaining) =>
FormParserFactory.builder().build().createParser(server).parseBlocking()
diff --git a/cask/src/cask/Routes.scala b/cask/src/cask/Routes.scala
index dabf711..4883e34 100644
--- a/cask/src/cask/Routes.scala
+++ b/cask/src/cask/Routes.scala
@@ -8,9 +8,6 @@ import io.undertow.server.HttpServerExchange
import scala.reflect.macros.blackbox.Context
import java.io.InputStream
-import io.undertow.server.handlers.Cookie
-
-
case class Response(data: Response.Data,
statusCode: Int = 200,
headers: Seq[(String, String)] = Nil,
diff --git a/cask/src/cask/Util.scala b/cask/src/cask/Util.scala
index 3d5035a..8614639 100644
--- a/cask/src/cask/Util.scala
+++ b/cask/src/cask/Util.scala
@@ -1,9 +1,5 @@
package cask
-import java.net.HttpCookie
-
-import io.undertow.server.handlers.{Cookie, CookieImpl}
-
object Util {
def splitPath(p: String) =
p.dropWhile(_ == '/').reverse.dropWhile(_ == '/').reverse.split('/').filter(_.nonEmpty)
diff --git a/cask/test/src/test/cask/Cookies.scala b/cask/test/src/test/cask/Cookies.scala
index 9b32f25..3cf1941 100644
--- a/cask/test/src/test/cask/Cookies.scala
+++ b/cask/test/src/test/cask/Cookies.scala
@@ -1,19 +1,25 @@
package test.cask
-import io.undertow.server.handlers.CookieImpl
-
object Cookies extends cask.MainRoutes{
- @cask.get("/read-cookies")
+ @cask.get("/read-cookie")
def readCookies(cookies: cask.Cookies) = {
- val username = cookies.value.get("username")
- username.map(_.getValue).toString
+ val username = cookies.value.get("my-username")
+ username.map(_.value).toString
}
- @cask.get("store-cookies")
+ @cask.get("/store-cookie")
def storeCookies() = {
cask.Response(
"Cookies Set!",
- cookies = Seq(new CookieImpl("username", "the username"))
+ cookies = Seq(cask.Cookie("my-username", "the username"))
+ )
+ }
+
+ @cask.get("/delete-cookie")
+ def deleteCookie() = {
+ cask.Response(
+ "Cookies Deleted!",
+ cookies = Seq(cask.Cookie("my-username", "the username", expires = java.time.Instant.EPOCH))
)
}