Subversion Repositories SmartDukaan

Rev

Rev 17539 | Blame | Compare with Previous | Last modification | View Log | RSS feed

package in.shop2020.serving.interceptors;

import in.shop2020.serving.services.UserSessionInfo;
import in.shop2020.serving.utils.Utils;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.codec.binary.Base64;
import org.apache.log4j.Logger;
import org.apache.struts2.ServletActionContext;
import org.json.JSONObject;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

import de.ailis.pherialize.Pherialize;

public class LoginInterceptor extends AbstractInterceptor {


        /**
         * 
         */
        private static final long serialVersionUID = 1L;
        private static Logger log = Logger.getLogger(Class.class);
        
        @Override
        public String intercept(ActionInvocation invocation) throws Exception {
                HttpServletRequest request = ServletActionContext.getRequest();
                HttpServletResponse response = ServletActionContext.getResponse();
        
        UserSessionInfo userInfo = (UserSessionInfo) request.getAttribute(UserInterceptor.USER_INFO_COOKIE_NAME);
        if(userInfo.isPrivateDealUser()){
                response.sendRedirect(getMobileRedirectUrl(String.valueOf(userInfo.getUserId()), request));
                        return null;
        }
        if(userInfo == null || !userInfo.isLoggedIn()){
                response.sendRedirect("/login?redirectUrl=" + getRedirectUrl(request));
                return null;
        }
                return invocation.invoke();
        }
        
        String getMobileRedirectUrl(String userId, HttpServletRequest request){
                UserSessionInfo userInfo = (UserSessionInfo) request.getAttribute(UserInterceptor.USER_INFO_COOKIE_NAME);
                String next = "cart";
                log.info("next " + next);
                String serverName = request.getServerName().replaceFirst("www", "m");
        try {
                String authUrl = "http://localhost:8080/mobileapi/login!authorizeProfitMandiUser?userId=" + 
                                                        String.valueOf(userInfo.getUserId()) + "&source=Saholic";
                        String urlResponse = Utils.fetchUrl(authUrl);
                        JSONObject responseToken = new JSONObject(urlResponse);
                        String token = responseToken.getString("tokenString");
                        log.info("token " +token);
                        
                        
                        Map<String, Object> mapData = new HashMap<String, Object>();
                        mapData.put("next", next);
                        mapData.put("Id", userId);
                        mapData.put("cartId", userInfo.getCartId());
                        mapData.put("email", userInfo.getEmail());
                        mapData.put("isPrivateDealUser", userInfo.isPrivateDealUser());
                        String data = Base64.encodeBase64String(Pherialize.serialize(mapData).getBytes());
                        
                        String url = "http://" + serverName + "/autologin/?data=" + data + "&token=" + token + "&v=2";
                        log.info("url " + url);
                        return url;
        } catch (Exception e) {
                log.info("Could not parse", e);
                log.info(next);
                        return "http://" + serverName + "/" + next;
                }
        }
        
        public String getRedirectUrl(HttpServletRequest request) {
                String queryString = request.getQueryString();
                if (queryString == null) {
                        queryString = "";
                } else {
                        queryString = "?" + queryString;
                }
                log.info("Redirect Url : " + request.getRequestURI() + queryString);
                return request.getRequestURI() + queryString;
        }
}