package controllers; import be.objectify.deadbolt.java.actions.Group; import be.objectify.deadbolt.java.actions.Restrict; import com.feth.play.module.pa.PlayAuthenticate; import models.User; import play.data.Form; import play.mvc.Controller; import play.mvc.Result; import providers.MyUsernamePasswordAuthProvider; import providers.MyUsernamePasswordAuthProvider.MyLogin; import providers.MyUsernamePasswordAuthProvider.MySignup; import service.UserProvider; import views.html.*; import javax.inject.Inject; import java.text.SimpleDateFormat; import java.util.Date; public class Application extends Controller { public static final String FLASH_MESSAGE_KEY = "message"; public static final String FLASH_ERROR_KEY = "error"; public static final String USER_ROLE = "user"; private final PlayAuthenticate auth; private final MyUsernamePasswordAuthProvider provider; private final UserProvider userProvider; public static String formatTimestamp(final long t) { return new SimpleDateFormat("yyyy-dd-MM HH:mm:ss").format(new Date(t)); } @Inject public Application(final PlayAuthenticate auth, final MyUsernamePasswordAuthProvider provider, final UserProvider userProvider) { this.auth = auth; this.provider = provider; this.userProvider = userProvider; } public Result index() { return ok(index.render(this.userProvider)); } @Restrict(@Group(Application.USER_ROLE)) public Result restricted() { final User localUser = this.userProvider.getUser(session()); return ok(restricted.render(this.userProvider, localUser)); } @Restrict(@Group(Application.USER_ROLE)) public Result profile() { final User localUser = userProvider.getUser(session()); return ok(profile.render(this.auth, this.userProvider, localUser)); } public Result login() { return ok(login.render(this.auth, this.userProvider, this.provider.getLoginForm())); } public Result doLogin() { com.feth.play.module.pa.controllers.Authenticate.noCache(response()); final Form<MyLogin> filledForm = this.provider.getLoginForm() .bindFromRequest(); if (filledForm.hasErrors()) { // User did not fill everything properly return badRequest(login.render(this.auth, this.userProvider, filledForm)); } else { // Everything was filled return this.provider.handleLogin(ctx()); } } public Result signup() { return ok(signup.render(this.auth, this.userProvider, this.provider.getSignupForm())); } public Result jsRoutes() { return ok( play.routing.JavaScriptReverseRouter.create("jsRoutes", routes.javascript.Signup.forgotPassword())) .as("text/javascript"); } public Result doSignup() { com.feth.play.module.pa.controllers.Authenticate.noCache(response()); final Form<MySignup> filledForm = this.provider.getSignupForm().bindFromRequest(); if (filledForm.hasErrors()) { // User did not fill everything properly return badRequest(signup.render(this.auth, this.userProvider, filledForm)); } else { // Everything was filled // do something with your part of the form before handling the user // signup return this.provider.handleSignup(ctx()); } } }