diff --git a/samples/java/play-authenticate-usage/app/controllers/AppScala.scala b/samples/java/play-authenticate-usage/app/controllers/AppScala.scala new file mode 100644 index 00000000..0734e9f2 --- /dev/null +++ b/samples/java/play-authenticate-usage/app/controllers/AppScala.scala @@ -0,0 +1,23 @@ +package controllers + +import models.User +import play.api.mvc.{Action, Controller} +import security.{ContextAction, ScDeadboltHandler} +import be.objectify.deadbolt.scala.{DeadboltHandler, DeadboltActions} + + + +/** + */ +object AppScala extends Controller with DeadboltActions { + + def index = ContextAction {implicit request => + Ok(views.html.index()) + } + + def restrictOne = Restrict(Array(Application.USER_ROLE), new ScDeadboltHandler) { + ContextAction {implicit request => + Ok(views.html.index()) + } + } +} diff --git a/samples/java/play-authenticate-usage/app/security/ContextAction.scala b/samples/java/play-authenticate-usage/app/security/ContextAction.scala new file mode 100644 index 00000000..fff8428c --- /dev/null +++ b/samples/java/play-authenticate-usage/app/security/ContextAction.scala @@ -0,0 +1,16 @@ +package security + +/** + */ +import play.api.mvc._ +import scala.concurrent.Future +import play.mvc.Http.Context +import play.core.j.JavaHelpers + +object ContextAction extends ActionBuilder[Request] { + + def invokeBlock[A](request: Request[A], block: (Request[A]) => Future[Result]) = { + Context.current.set(JavaHelpers.createJavaContext(request)) + block(request) + } +} diff --git a/samples/java/play-authenticate-usage/app/security/ScDeadboltHandler.scala b/samples/java/play-authenticate-usage/app/security/ScDeadboltHandler.scala new file mode 100644 index 00000000..d29c83a4 --- /dev/null +++ b/samples/java/play-authenticate-usage/app/security/ScDeadboltHandler.scala @@ -0,0 +1,47 @@ +package security + +import be.objectify.deadbolt.scala.{DynamicResourceHandler, DeadboltHandler} +import play.api.mvc.{Request, Result, Results} +import models.User +import be.objectify.deadbolt.core.models.Subject +import com.feth.play.module.pa.PlayAuthenticate +import com.feth.play.module.pa.user.AuthUserIdentity + +import scala.concurrent.Future +import scala.concurrent.ExecutionContext.Implicits.global +/** + * + */ +class ScDeadboltHandler(dynamicResourceHandler: Option[DynamicResourceHandler] = None) extends DeadboltHandler { + + + override def beforeAuthCheck[A](request: Request[A]) :Option[Future[Result] ]= { + + val java_ctx = play.core.j.JavaHelpers.createJavaContext(request) + if (PlayAuthenticate.isLoggedIn(java_ctx.session)) { + return None + } + else { + val originalUrl: String = PlayAuthenticate.storeOriginalUrl(java_ctx ) + java_ctx.flash.put("error", "You need to log in first, to view '" + originalUrl + "'") + val f: Future[Result] = Future { + Results.Redirect(PlayAuthenticate.getResolver.login.url()) + } + Some(f) + } + } + + override def getDynamicResourceHandler[A](request: Request[A]): Option[DynamicResourceHandler] = None + + + override def getSubject[A](request: Request[A]): Option[Subject] = { + // e.g. request.session.get("user") + val java_ctx = play.core.j.JavaHelpers.createJavaContext(request) + val u: AuthUserIdentity = PlayAuthenticate.getUser(java_ctx) + Some( User.findByAuthUserIdentity(u )) + } + + def onAuthFailure[A](request: Request[A]): Future[Result] = { + Future{ Results.Forbidden(views.html.restricted())} + } +} diff --git a/samples/java/play-authenticate-usage/build.sbt b/samples/java/play-authenticate-usage/build.sbt index b62cbf05..a6ee575f 100644 --- a/samples/java/play-authenticate-usage/build.sbt +++ b/samples/java/play-authenticate-usage/build.sbt @@ -8,6 +8,7 @@ version := "1.0-SNAPSHOT" val appDependencies = Seq( "be.objectify" %% "deadbolt-java" % "2.3.0-RC1", + "be.objectify" %% "deadbolt-scala" % "2.3.0-RC1", // Comment the next line for local development of the Play Authentication core: "com.feth" %% "play-authenticate" % "0.6.5-SNAPSHOT", "postgresql" % "postgresql" % "9.1-901-1.jdbc4",