Created
May 2, 2015 16:55
-
-
Save JosephMoniz/d983e4783b72f14d1706 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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