-
Notifications
You must be signed in to change notification settings - Fork 0
/
Example.scala
65 lines (64 loc) · 2.36 KB
/
Example.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import net.ivoah.vial.*
import scalatags.Text.all.*
object Example {
@main
def main(): Unit = {
val router = Router {
case ("GET", "/", request) => Response("<!DOCTYPE html>\n" + html(
head(tag("title")("Vial")),
body(
p(
for (endpoint <- Seq(
"/",
"/hello",
"/hello/$name",
"/bye", "/auth",
"/params?foo=bar&baz=biff",
"/cookies"
)) yield frag(
a(href:=endpoint, endpoint), br()
)
)
)
))
case ("GET", "/hello", _) => Response("Hello!")
case ("GET", s"/hello/$name", _) => Response(s"Hello $name!")
case ("GET", "/bye", _) => Response("Goodbye :)")
case ("GET", s"/favicon.ico", _) => Response.fromResource(s"/favicon.ico")
case ("GET", "/auth", request) => request.auth match {
case Some((username, password)) if username == "foo" && password == "bar" => Response("Authenticated!")
case _ => Response.Unauthorized()
}
case ("GET", "/params", request) => Response("<!DOCTYPE html>\n" + html(
head(tag("title")("Params")),
body(
h3("Params"),
ul(
request.params.toSeq.map{case (k, v) => li(s"${k}: ${v}")}
)
)
))
case ("GET", "/cookies", request) => Response("<!DOCTYPE html>\n" + html(
head(tag("title")("Cookies")),
body(
h3("Cookies"),
ul(
li(form(action:="/set_cookie", method:="POST",
input(`type`:="text", name:="name"), ": ", input(`type`:="text", name:="value"), input(`type`:="submit", value:="set cookie")
)),
request.cookies.map(c => li(
form(display:="inline", action:="/delete_cookie", method:="POST",
input(`type`:="hidden", name:="name", value:=c.name),
input(`type`:="submit", value:="╳")
), " ", s"${c.name}: ${c.value}"
))
)
)
))
case ("POST", "/set_cookie", request) => Response.Redirect("/cookies").withCookie(Cookie(request.form("name"), request.form("value")))
case ("POST", "/delete_cookie", request) => Response.Redirect("/cookies").withCookie(Cookie(request.form("name"), "", maxAge = Some(0)))
}
val server = Server(router)
server.serve()
}
}