package org.hadatac.console.controllers;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.hadatac.console.controllers.triplestore.UserManagement;
import org.hadatac.console.models.SysUser;
import play.Routes;
import play.data.Form;
import play.mvc.*;
import play.mvc.Http.Session;
import play.mvc.Result;
import org.hadatac.console.providers.MyUsernamePasswordAuthProvider;
import org.hadatac.console.providers.MyUsernamePasswordAuthProvider.MyLogin;
import org.hadatac.console.providers.MyUsernamePasswordAuthProvider.MySignup;
import org.hadatac.console.views.html.*;
import org.hadatac.console.views.html.triplestore.*;
import be.objectify.deadbolt.java.actions.Group;
import be.objectify.deadbolt.java.actions.Restrict;
import com.feth.play.module.pa.PlayAuthenticate;
import com.feth.play.module.pa.providers.password.UsernamePasswordAuthProvider;
import com.feth.play.module.pa.user.AuthUser;
public class AuthApplication extends Controller {
public static final String FLASH_MESSAGE_KEY = "message";
public static final String FLASH_ERROR_KEY = "error";
public static final String DATA_OWNER_ROLE = "data_owner";
public static final String DATA_MANAGER_ROLE = "data_manager";
public static Result index() {
return ok(portal.render());
}
public static SysUser getLocalUser(final Session session) {
final AuthUser currentAuthUser = PlayAuthenticate.getUser(session);
final SysUser localUser = SysUser.findByAuthUserIdentity(currentAuthUser);
return localUser;
}
@Restrict(@Group(AuthApplication.DATA_OWNER_ROLE))
public static Result restricted() {
final SysUser localUser = getLocalUser(session());
return ok(restricted.render(localUser));
}
@Restrict(@Group(AuthApplication.DATA_OWNER_ROLE))
public static Result profile() {
final SysUser localUser = getLocalUser(session());
return ok(profile.render(localUser));
}
public static Result login() {
return ok(login.render(MyUsernamePasswordAuthProvider.LOGIN_FORM));
}
public static Result doLogin() {
com.feth.play.module.pa.controllers.Authenticate.noCache(response());
final Form<MyLogin> filledForm = MyUsernamePasswordAuthProvider.LOGIN_FORM
.bindFromRequest();
if (filledForm.hasErrors()) {
return badRequest(login.render(filledForm));
} else {
return UsernamePasswordAuthProvider.handleLogin(ctx());
}
}
public static Result signup() {
return ok(signup.render(MyUsernamePasswordAuthProvider.SIGNUP_FORM));
}
public static Result jsRoutes() {
return ok(
Routes.javascriptRouter("jsRoutes",
org.hadatac.console.controllers.routes.javascript.Signup.forgotPassword()))
.as("text/javascript");
}
public static Result doSignup() {
com.feth.play.module.pa.controllers.Authenticate.noCache(response());
final Form<MySignup> filledForm =
MyUsernamePasswordAuthProvider.SIGNUP_FORM.bindFromRequest();
if (filledForm.hasErrors()) {
// User did not fill everything properly
return badRequest(signup.render(filledForm));
} else {
if (SysUser.existsSolr()) { // only check for pre-registration if it is not the first user signing up
if (!UserManagement.isPreRegistered(filledForm.get().email)) {
return ok(notRegistered.render());
}
}
// Everything was filled
// do something with your part of the form before handling the user
// signup
return UsernamePasswordAuthProvider.handleSignup(ctx());
}
}
public static Result doSignout() {
session().remove("LabKeyUserName");
session().remove("LabKeyPassword");
return com.feth.play.module.pa.controllers.Authenticate.logout();
}
public static String formatTimestamp(final long t) {
return new SimpleDateFormat("yyyy-dd-MM HH:mm:ss").format(new Date(t));
}
}