diff options
author | Li Haoyi <haoyi.sg@gmail.com> | 2018-07-22 02:09:54 +0800 |
---|---|---|
committer | Li Haoyi <haoyi.sg@gmail.com> | 2018-07-22 02:09:54 +0800 |
commit | 3ce62dfde24d4b03f8e443f19e08a634082d0343 (patch) | |
tree | 55cd8b8ce943bc80207cf5f0608b4070126561b8 /cask | |
parent | 48b60ea02268b060f859101a41fee5394925237a (diff) | |
download | cask-3ce62dfde24d4b03f8e443f19e08a634082d0343.tar.gz cask-3ce62dfde24d4b03f8e443f19e08a634082d0343.tar.bz2 cask-3ce62dfde24d4b03f8e443f19e08a634082d0343.zip |
Wrap undertow cookies in a nice case class
Diffstat (limited to 'cask')
-rw-r--r-- | cask/src/cask/Cookie.scala | 46 | ||||
-rw-r--r-- | cask/src/cask/Main.scala | 2 | ||||
-rw-r--r-- | cask/src/cask/ParamReader.scala | 3 | ||||
-rw-r--r-- | cask/src/cask/Routes.scala | 3 | ||||
-rw-r--r-- | cask/src/cask/Util.scala | 4 | ||||
-rw-r--r-- | cask/test/src/test/cask/Cookies.scala | 20 |
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)) ) } |