package br.edu.uniritter.liquid.democracy.controller;
import static br.edu.uniritter.liquid.democracy.validator.CustomMatchers.notNull;
import static org.hamcrest.Matchers.is;
import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.Validator;
import br.com.caelum.vraptor.validator.Validations;
import br.edu.uniritter.liquid.democracy.annotation.Public;
import br.edu.uniritter.liquid.democracy.model.User;
import br.edu.uniritter.liquid.democracy.service.SecurityService;
import br.edu.uniritter.liquid.democracy.session.UserInfo;
@Resource
public class SecurityController {
private Result result;
private UserInfo info;
private SecurityService service;
private final Validator validator;
public SecurityController(Result result, UserInfo info, SecurityService service, Validator validator) {
this.result = result;
this.info = info;
this.service = service;
this.validator = validator;
}
@Public
@Get("/login")
public void login() {}
@Public
@Post("/login")
public void login(final User user) {
final User userAuth = service.authenticate(user);
validate(userAuth);
info.setUser(user);
result.redirectTo(HomeController.class).home();
}
@Get("/logout")
public void logout() {
info.logout();
result.redirectTo(HomeController.class).home();
}
@Public
@Get("/register")
public void register() {}
@Public
@Post("/register")
public void register(final User user) {
service.create(user);
validate(user);
info.setUser(user);
result.redirectTo(HomeController.class).home();
}
private void validate(final User user){
validator.checking(new Validations() {
{
that(user, is(notNull()), "error", "error.login");
}
});
validator.onErrorUsePageOf(SecurityController.class).login();
}
}