Rev 2021 | Rev 2817 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
package in.shop2020.serving.interceptors;import in.shop2020.datalogger.EventType;import in.shop2020.model.v1.user.Affiliate;import in.shop2020.model.v1.user.Tracker;import in.shop2020.serving.services.UserSessionInfo;import in.shop2020.serving.utils.DesEncrypter;import in.shop2020.thrift.clients.UserContextServiceClient;import in.shop2020.utils.DataLogger;import java.util.HashMap;import java.util.Map;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import org.apache.log4j.Logger;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.AbstractInterceptor;public class TrackingInterceptor extends AbstractInterceptor {private static final long serialVersionUID = 1L;private static Logger log = Logger.getLogger(TrackingInterceptor.class);private static final int SECONDS_IN_TWO_MONTHS = 60*60*24*60;private static final int SECONDS_IN_YEAR = 60*60*24*365;public static final String TRACKER = "tracker";public static final String AFF_COOKIE = "uafc";public static final String SRC_COOKIE = "usrcc";public static final String SESSION_SRC_COOKIE = "sess_srcc";private String cookieDomain = "";private Cookie trackerCookie = null;private Cookie affCookie = null;private Cookie firstSourceCookie = null;private Cookie sessionSourceCookie = null;private Map<String, Cookie> cookiesMap = null;public void setCookieDomain(String cookieDomain) {this.cookieDomain = cookieDomain;}@Overridepublic String intercept(ActionInvocation invocation) throws Exception {HttpServletRequest request = ServletActionContext.getRequest();String affId = request.getParameter("afid");createCookiesMap(request);cleanTrackerCookie();updateFirstSourceCookie();updateSessionSourceCookie();if(affId != null && !affId.isEmpty()) {updateAffCookie(affId);}return invocation.invoke();}/*** Update first source cookie**/private void updateFirstSourceCookie() {firstSourceCookie = (Cookie) cookiesMap.get(SRC_COOKIE);if (firstSourceCookie != null) {return;}HttpServletRequest request = ServletActionContext.getRequest();String src = "";String referer = request.getHeader("referer");if (referer == null || referer.isEmpty() || referer.contains("saholic") || referer.contains("shop2020")) {src = "DIRECT : " + "(" + request.getRequestURL() + ")" ;}else if (referer.contains("google.co")) {src = "ORGANIC : " + "(" + referer + ")";}else {src = referer;}DesEncrypter des = new DesEncrypter("Saholic");String sourceCookieVal = des.encrypt(src);firstSourceCookie = new Cookie(SRC_COOKIE, sourceCookieVal);firstSourceCookie.setMaxAge(SECONDS_IN_YEAR);firstSourceCookie.setPath("/");if (!cookieDomain.isEmpty()) {firstSourceCookie.setDomain(cookieDomain);}cookiesMap.put(SRC_COOKIE, firstSourceCookie);HttpServletResponse response = ServletActionContext.getResponse();response.addCookie(firstSourceCookie);}/*** Update first source cookie**/private void updateSessionSourceCookie() {sessionSourceCookie = (Cookie) cookiesMap.get(SESSION_SRC_COOKIE);if (sessionSourceCookie != null) {return;}HttpServletRequest request = ServletActionContext.getRequest();String src = "";String referer = request.getHeader("referer");if (referer == null || referer.isEmpty() || referer.contains("saholic") || referer.contains("shop2020")) {src = "DIRECT : " + "(" + request.getRequestURL() + ")" ;}else if (referer.contains("google.co")) {src = "ORGANIC : " + "(" + referer + ")";}else {src = referer;}DesEncrypter des = new DesEncrypter("Saholic");String sessionSourceCookieVal = des.encrypt(src);sessionSourceCookie = new Cookie(SESSION_SRC_COOKIE, sessionSourceCookieVal);sessionSourceCookie.setPath("/");if (!cookieDomain.isEmpty()) {sessionSourceCookie.setDomain(cookieDomain);}cookiesMap.put(SESSION_SRC_COOKIE, sessionSourceCookie);HttpServletResponse response = ServletActionContext.getResponse();response.addCookie(sessionSourceCookie);HttpSession session = request.getSession();UserSessionInfo userinfo = (UserSessionInfo) session.getAttribute(UserInterceptor.USER_INFO);DataLogger.logData(EventType.NEW_SESSION, request.getSession().getId(), userinfo.getUserId(), userinfo.getEmail(), src);}private void createCookiesMap(HttpServletRequest request) {cookiesMap = new HashMap<String, Cookie>();Cookie[] cookies = request.getCookies();// This check is necessary for the first request when no cookies are// sent.if(cookies==null)return;for (Cookie cookie : cookies) {cookiesMap.put(cookie.getName(), cookie);}}private void cleanTrackerCookie() {trackerCookie = (Cookie) cookiesMap.get(TRACKER);affCookie = (Cookie) cookiesMap.get(AFF_COOKIE);if (trackerCookie != null) {if (affCookie == null) {try {UserContextServiceClient userContextServiceClient = new UserContextServiceClient();in.shop2020.model.v1.user.UserContextService.Client userClient = userContextServiceClient.getClient();Tracker tracker = userClient.getTrackerById(Long.parseLong(trackerCookie.getValue()));affCookie = new Cookie(AFF_COOKIE, String.valueOf(tracker.getAffiliateId()));affCookie.setMaxAge(SECONDS_IN_TWO_MONTHS);affCookie.setPath("/");if (!cookieDomain.isEmpty()) {affCookie.setDomain(cookieDomain);}cookiesMap.put(AFF_COOKIE, trackerCookie);HttpServletResponse response = ServletActionContext.getResponse();response.addCookie(affCookie);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}if (!cookieDomain.isEmpty()) {trackerCookie.setDomain(cookieDomain);}trackerCookie.setPath("/");trackerCookie.setMaxAge(0);HttpServletResponse response = ServletActionContext.getResponse();response.addCookie(trackerCookie);}}private void updateAffCookie(String affId) {try {UserContextServiceClient userContextServiceClient = new UserContextServiceClient();in.shop2020.model.v1.user.UserContextService.Client userClient = userContextServiceClient.getClient();long affiliateId = Long.parseLong(affId);Affiliate affiliate = userClient.getAffiliateById(affiliateId);if (affiliate != null) {affCookie = (Cookie) cookiesMap.get(AFF_COOKIE);if (affCookie != null) {Long.parseLong(affCookie.getValue());if (affiliateId == Long.parseLong(affCookie.getValue())) {return;}}// create new aff cookie if affCookie ==null or affiliateId() != affCookie.Cookie newAffCookie = new Cookie(AFF_COOKIE, String.valueOf(affiliateId));newAffCookie.setMaxAge(SECONDS_IN_TWO_MONTHS);newAffCookie.setPath("/");if (!cookieDomain.isEmpty()) {newAffCookie.setDomain(cookieDomain);}cookiesMap.put(AFF_COOKIE, newAffCookie);HttpServletResponse response = ServletActionContext.getResponse();response.addCookie(newAffCookie);}} catch (Exception e) {log.error(e);}}}