package controllers;
import java.text.ParseException;
import java.util.Date;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import models.User;
import models.forms.LoginForm;
import play.*;
import play.data.Form;
import play.data.format.Formatters;
import play.data.format.Formatters.SimpleFormatter;
import play.mvc.*;
import play.db.jpa.Transactional;
import security.FingerprintMaker;
import security.StoreSecured;
import services.ServicesInstances;
import services.UserService;
/**
* To work with new view, we need to import it as a normal Java dependency.
*/
import views.html.UserController.*;
public class UserController extends Controller {
/**
* This Form object is common for all controllers. It's a empty version of register form. We create the version of form
* handled by submit method (registerSubmit) with userForm.bindFromRequest().
*/
private static Form<User> userForm = Form.form(User.class);
private static Form<LoginForm> loginForm = Form.form(LoginForm.class);
@Transactional(readOnly=true)
public static Result register() {
return ok(register.render(userForm));
}
@Transactional()
public static Result registerSubmit() {
Form<User> submittedForm = userForm.bindFromRequest("login", "password", "birthday");
Logger.debug("Data is :"+submittedForm.data());
Logger.debug("User errors :"+submittedForm.errors());
Logger.debug("User global errors :"+submittedForm.globalErrors());
Logger.debug("User hasGlobalErrors :"+submittedForm.hasGlobalErrors());
Logger.debug("User hasErrors :"+submittedForm.hasErrors());
if (!submittedForm.hasErrors()) {
User user = submittedForm.get();
Logger.debug("User from form is:"+user);
UserService userService = (UserService) ServicesInstances.USER_SERVICE.getService();
boolean added = userService.addNewUser(user);
if (added) {
// TODO : redirect to success page
} else {
// TODO : pass error message to the template
}
Logger.debug("Found user :"+user);
}
return ok(register.render(submittedForm));
}
@Transactional
public static Result login() {
return ok(login.render(loginForm, flash()));
}
@Transactional
public static Result loginSubmit() {
Form<LoginForm> submittedForm = loginForm.bindFromRequest("login", "password");
if (!submittedForm.hasErrors()) {
String fingerprint = null;
try {
fingerprint = FingerprintMaker.makeFromRequest(request(), Play.application().configuration().getString("fingerprint.secret"));
} catch (Exception e) {
// TODO : redirect to 500 error page
}
LoginForm formObj = submittedForm.get();
Logger.debug("User exists, no errors. Found user is: "+formObj);
session().put(StoreSecured.COOKIE_KEY_USER, formObj.getLogin());
session().put(StoreSecured.COOKIE_KEY_FINGERPRINT, fingerprint);
return redirect(routes.UserController.dashboard());
}
return badRequest(login.render(submittedForm, flash()));
}
@Transactional
@Security.Authenticated(StoreSecured.class)
public static Result logout() {
session().clear();
flash("logout", "1");
return redirect(routes.UserController.login());
}
@Transactional
@Security.Authenticated(StoreSecured.class)
public static Result dashboard() {
Logger.debug("Dashboard called before the render");
return ok(dashboard.render());
}
}