Rev 1866 | Rev 2005 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
package in.shop2020.serving.interceptors;import java.util.Date;import java.util.HashMap;import java.util.Map;import in.shop2020.model.v1.user.Affiliate;import in.shop2020.model.v1.user.Tracker;import in.shop2020.thrift.clients.UserContextServiceClient;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;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;public static final String TRACKER = "tracker";private String cookieDomain = "";private Cookie trackerCookie = 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");if(affId != null && !affId.isEmpty()) {createCookiesMap(request);updateTrackerCookie(affId);}return invocation.invoke();}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 updateTrackerCookie(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) {trackerCookie = (Cookie) cookiesMap.get(TRACKER);if (trackerCookie != null) {Tracker tracker = userClient.getTrackerById(Long.parseLong(trackerCookie.getValue()));if (tracker.getAffiliateId() == affiliateId) {return;}}// create new tracker and cookie if trackerCookie ==null or tracker.getAffiliateId() != affiliateId.Tracker newTracker = userClient.createTracker(affiliateId, (new Date()).getTime());trackerCookie = new Cookie(TRACKER, String.valueOf(newTracker.getId()));trackerCookie.setMaxAge(SECONDS_IN_TWO_MONTHS);trackerCookie.setPath("/");if (!cookieDomain.isEmpty()) {trackerCookie.setDomain(cookieDomain);}cookiesMap.put(TRACKER, trackerCookie);HttpServletResponse response = ServletActionContext.getResponse();response.addCookie(trackerCookie);}} catch (Exception e) {log.error(e);}}}