Skip to content

Instantly share code, notes, and snippets.

@JosephMoniz
Created May 2, 2015 16:55
Show Gist options
  • Save JosephMoniz/d983e4783b72f14d1706 to your computer and use it in GitHub Desktop.
Save JosephMoniz/d983e4783b72f14d1706 to your computer and use it in GitHub Desktop.
package com.plasmaconduit.framework
import com.plasmaconduit.conveyance.Box
import com.plasmaconduit.edge.http._
import com.plasmaconduit.framework._
import com.plasmaconduit.framework.mvc.Controller
import com.plasmaconduit.framework.mvc.middlewares.SessionMiddleware
import com.plasmaconduit.framework.routes.containers.{HttpGetMethodRoutes, HttpRoutes}
import com.plasmaconduit.framework.routes.destinations.HttpPathRoute
import com.plasmaconduit.framework.sessions.jwt.JWTSessionHandler
import com.plasmaconduit.framework.routes.PathRegexes._
import com.plasmaconduit.json._
import com.plasmaconduit.jwa.JWTSha256
import scala.util.matching.Regex
object Main {
def main(args: Array[String]): Unit = {
val server = PlasmaConduit(
port = 3000,
middleware = List(SessionMiddleware(JWTSessionHandler(JWTSha256, "topsykretz"))),
defaultRoute = MissingController(),
routes = HttpRoutes(
HttpGetMethodRoutes(
HttpPathRoute("/", RootController()),
HttpPathRoute("/about", AboutController()),
HttpPathRoute("/redirect", RedirectController()),
HttpPathRoute("/json", JsonController()),
HttpPathRoute(new Regex(s"/paged/$number", "page"), PagedController())
)
)
)
server.run()
}
}
final case class MissingController() extends Controller {
def action(implicit request: HttpRequest): Box[Throwable, HttpResponse] = {
NotFound("Missing")
}
}
final case class RootController() extends Controller {
def action(implicit request: HttpRequest): Box[Throwable, HttpResponse] = {
Ok("Welcome to the plasma conduit framework")
}
}
final case class RedirectController() extends Controller {
def action(implicit request: HttpRequest): Box[Throwable, HttpResponse] = {
Found("").withHeader(Location("/"))
}
}
final case class JsonController() extends Controller {
def action(implicit request: HttpRequest): Box[Throwable, HttpResponse] = {
Ok(JsObject(
"status" -> "ok",
"message" -> JsObject(
"email" -> "users@gmail.com",
"admin" -> false
)
))
}
}
final case class AboutController() extends Controller {
def action(implicit request: HttpRequest): Box[Throwable, HttpResponse] = {
val visits = request.session.get("visits").getOrElse("0").toLong
Ok(s"This is so cool, you've viewed it $visits times!")
.withSession(request.session.set("visits", (visits + 1).toString))
}
}
final case class PagedController() extends Controller {
def action(implicit request: HttpRequest): Box[Throwable, HttpResponse] = {
val page = request.pathVars.getOrElse("page", "0")
Ok(s"Welcome to page $page")
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment