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());
}
}
}