package com.salesmanager.integration;
import java.net.URLEncoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.w3c.dom.Document;
import com.opensymphony.xwork2.ActionInvocation;
import com.salesmanager.core.constants.ConfigurationConstants;
import com.salesmanager.core.entity.merchant.MerchantConfiguration;
import com.salesmanager.core.entity.merchant.MerchantStore;
import com.salesmanager.core.entity.reference.Page;
import com.salesmanager.core.service.ServiceFactory;
import com.salesmanager.core.service.merchant.ConfigurationRequest;
import com.salesmanager.core.service.merchant.ConfigurationResponse;
import com.salesmanager.core.service.merchant.MerchantService;
import com.salesmanager.core.service.reference.ReferenceService;
import com.salesmanager.core.util.www.BaseActionAware;
import com.salesmanager.core.util.www.PageExecutionContext;
import com.salesmanager.core.util.www.PageRequestAction;
import com.salesmanager.core.util.www.SalesManagerInterceptor;
import com.salesmanager.core.util.www.SalesManagerPrincipalProxy;
import com.salesmanager.core.util.www.integration.fb.FacebookIntegrationFactory;
import com.salesmanager.core.util.www.integration.fb.FacebookUser;
public class FbPageInterceptor extends SalesManagerInterceptor {
private Logger log = Logger.getLogger(FbPageInterceptor.class);
@Override
protected String baseIntercept(ActionInvocation invoke,
HttpServletRequest req, HttpServletResponse resp) throws Exception {
// TODO Auto-generated method stub
MerchantStore store = (MerchantStore)req.getAttribute("STORE");
HttpServletRequest request = (HttpServletRequest)req;
HttpServletResponse response = (HttpServletResponse)resp;
HttpSession session = request.getSession(true);
String pageAppender = "/page/";
if(req.getRequestURI().contains("/fbPage/")) {
pageAppender = "/fbPage/";
}
String pathnocontext = StringUtils.removeStart(req.getRequestURI(), req
.getContextPath() + "/integration" + pageAppender);
String p = pathnocontext;
String path = "";
//should have /fbPage/<PAGE>/
//first slash [page name]
int indexOfLastSlash = p.indexOf("/");
if(indexOfLastSlash>0) {
path = p.substring(0,indexOfLastSlash);
}
ReferenceService rservice = (ReferenceService)ServiceFactory.getService(ServiceFactory.ReferenceService);
Page page = rservice.getPage(path.trim(), store.getMerchantId());
if(page==null) {
log.error("FB Page " + path.trim() + " does not exist");
return "errorPage";
}
FacebookUser user = FacebookIntegrationFactory.getFacebookUser(request, page);
if(page.getSecured() && !user.isAuthorized()) {
String url = FacebookIntegrationFactory.getAuthorizationUrl(user, page);
request.setAttribute("url", url);
return "oauth";
}
PageExecutionContext pageExecutionContext = new PageExecutionContext();
pageExecutionContext.addToExecutionContext("facebookUser", user);
try {
PageRequestAction action = ((PageRequestAction) invoke
.getAction());
action.setExecutionContext(pageExecutionContext);
} catch (Exception e) {
log
.error("The current action does not extend PageRequestAction "
+ invoke.getAction().getClass());
}
return null;
}
}