package controllers;
import cloudify.widget.common.MailChimpWidgetLoginHandler;
import models.Widget;
import org.codehaus.jackson.JsonNode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import play.data.validation.Constraints;
import play.mvc.Result;
import server.HeaderMessage;
import utils.StringUtils;
/**
* Created with IntelliJ IDEA.
* User: guym
* Date: 4/10/14
* Time: 1:41 PM
*/
public class WidgetCustomLoginController extends AbstractLoginController{
private static Logger logger = LoggerFactory.getLogger(WidgetCustomLoginController.class);
public static Result customLogin( String widgetKey ){
if ( StringUtils.isEmptyOrSpaces(widgetKey) ){
return internalServerError("missing widgetId");
}
Widget widget = Widget.getWidget(widgetKey);
logger.info("logged in custom");
JsonNode jsonNode = request().body().asJson();
logger.info("jsonNode is : " + jsonNode);
try {
handleLogin( widget, new CustomLoginDetails(jsonNode));
}catch(CustomLoginException e){
return internalServerError(e.getMessage());
}catch( Exception e ){
logger.info("custom login failed",e);
return internalServerError("invalid details");
}
return ok();
}
public static class CustomLoginException extends RuntimeException{
public CustomLoginException() {
super();
}
public CustomLoginException(String message) {
super(message);
}
public CustomLoginException(String message, Throwable cause) {
super(message, cause);
}
public CustomLoginException(Throwable cause) {
super(cause);
}
}
public static class CustomLoginDetails implements MailChimpWidgetLoginHandler.MailChimpLoginDetails{
public String email;
public String firstName;
public String lastName;
public CustomLoginDetails( JsonNode jsonNode ){
if ( !jsonNode.has("name")){
throw new CustomLoginException("name is required");
}
if ( !jsonNode.has("lastName")){
throw new CustomLoginException("last name is required");
}
if ( !jsonNode.has("email")){
throw new CustomLoginException("email is required");
}
firstName = jsonNode.get("name").getTextValue();
lastName = jsonNode.get("lastName").getTextValue();
email = jsonNode.get("email").getTextValue();
Constraints.EmailValidator ev = new Constraints.EmailValidator();
if ( StringUtils.isEmpty(email) || !ev.isValid( email ) ){
new HeaderMessage().setError( "Email is incorrect" ).apply( response().getHeaders() );
throw new CustomLoginException("invalid email address :: " + email );
}
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
}