/example/src/main/scala/com/softwaremill/example/session/SetSessionScala.scala

https://github.com/softwaremill/akka-http-session · Scala · 65 lines · 53 code · 12 blank · 0 comment · 0 complexity · ad77d9c52126b6e812160cb0c3d62ce0 MD5 · raw file

  1. package com.softwaremill.example.session
  2. import akka.actor.ActorSystem
  3. import akka.http.scaladsl.Http
  4. import akka.http.scaladsl.server.Directives._
  5. import akka.stream.ActorMaterializer
  6. import com.softwaremill.session.CsrfDirectives._
  7. import com.softwaremill.session.CsrfOptions._
  8. import com.softwaremill.session.SessionDirectives._
  9. import com.softwaremill.session.SessionOptions._
  10. import com.softwaremill.session._
  11. import com.typesafe.scalalogging.StrictLogging
  12. import scala.io.StdIn
  13. object SetSessionScala extends App with StrictLogging {
  14. implicit val system = ActorSystem("example")
  15. implicit val materializer = ActorMaterializer()
  16. import system.dispatcher
  17. val sessionConfig = SessionConfig.default(
  18. "c05ll3lesrinf39t7mc5h6un6r0c69lgfno69dsak3vabeqamouq4328cuaekros401ajdpkh60rrtpd8ro24rbuqmgtnd1ebag6ljnb65i8a55d482ok7o0nch0bfbe")
  19. implicit val sessionManager = new SessionManager[MyScalaSession](sessionConfig)
  20. implicit val refreshTokenStorage = new InMemoryRefreshTokenStorage[MyScalaSession] {
  21. def log(msg: String) = logger.info(msg)
  22. }
  23. def mySetSession(v: MyScalaSession) = setSession(refreshable, usingCookies, v)
  24. val myRequiredSession = requiredSession(refreshable, usingCookies)
  25. val myInvalidateSession = invalidateSession(refreshable, usingCookies)
  26. val routes =
  27. randomTokenCsrfProtection(checkHeader) {
  28. pathPrefix("api") {
  29. path("do_login") {
  30. post {
  31. entity(as[String]) { body =>
  32. logger.info(s"Logging in $body")
  33. mySetSession(MyScalaSession(body)) {
  34. setNewCsrfToken(checkHeader) { ctx =>
  35. ctx.complete("ok")
  36. }
  37. }
  38. }
  39. }
  40. }
  41. }
  42. }
  43. val bindingFuture = Http().bindAndHandle(routes, "localhost", 8080)
  44. println("Server started, press enter to stop. Visit http://localhost:8080 to see the demo.")
  45. StdIn.readLine()
  46. import system.dispatcher
  47. bindingFuture
  48. .flatMap(_.unbind())
  49. .onComplete { _ =>
  50. system.terminate()
  51. println("Server stopped")
  52. }
  53. }