Subversion Repositories SmartDukaan

Rev

Rev 2021 | Rev 2817 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1862 vikas 1
package in.shop2020.serving.interceptors;
2
 
2637 vikas 3
import in.shop2020.datalogger.EventType;
1862 vikas 4
import in.shop2020.model.v1.user.Affiliate;
5
import in.shop2020.model.v1.user.Tracker;
2637 vikas 6
import in.shop2020.serving.services.UserSessionInfo;
2021 vikas 7
import in.shop2020.serving.utils.DesEncrypter;
1862 vikas 8
import in.shop2020.thrift.clients.UserContextServiceClient;
2637 vikas 9
import in.shop2020.utils.DataLogger;
1862 vikas 10
 
2637 vikas 11
import java.util.HashMap;
12
import java.util.Map;
13
 
1862 vikas 14
import javax.servlet.http.Cookie;
15
import javax.servlet.http.HttpServletRequest;
16
import javax.servlet.http.HttpServletResponse;
2637 vikas 17
import javax.servlet.http.HttpSession;
1862 vikas 18
 
19
import org.apache.log4j.Logger;
20
import org.apache.struts2.ServletActionContext;
21
 
22
import com.opensymphony.xwork2.ActionInvocation;
23
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
24
 
25
public class TrackingInterceptor extends AbstractInterceptor {
26
 
27
	private static final long serialVersionUID = 1L;
28
	private static Logger log = Logger.getLogger(TrackingInterceptor.class);
29
 
30
	private static final int SECONDS_IN_TWO_MONTHS = 60*60*24*60;
2021 vikas 31
	private static final int SECONDS_IN_YEAR = 60*60*24*365;
1866 vikas 32
	public static final String TRACKER = "tracker";
1999 vikas 33
	public static final String AFF_COOKIE = "uafc";
2021 vikas 34
	public static final String SRC_COOKIE = "usrcc";
2637 vikas 35
	public static final String SESSION_SRC_COOKIE = "sess_srcc";
1862 vikas 36
 
37
	private String cookieDomain = "";
38
	private Cookie trackerCookie = null;
1999 vikas 39
	private Cookie affCookie = null;
2021 vikas 40
	private Cookie firstSourceCookie = null;
2637 vikas 41
	private Cookie sessionSourceCookie = null;
1862 vikas 42
    private Map<String, Cookie> cookiesMap = null;
43
 
44
    public void setCookieDomain(String cookieDomain) {
45
        this.cookieDomain = cookieDomain;
46
    }
1999 vikas 47
 
2021 vikas 48
    @Override
1862 vikas 49
	public String intercept(ActionInvocation invocation) throws Exception {
50
		HttpServletRequest request = ServletActionContext.getRequest();
51
 
52
		String affId = request.getParameter("afid");
2021 vikas 53
		createCookiesMap(request);
54
		cleanTrackerCookie();
55
		updateFirstSourceCookie();
2637 vikas 56
		updateSessionSourceCookie();
1862 vikas 57
 
58
		if(affId != null && !affId.isEmpty()) {
1999 vikas 59
		    updateAffCookie(affId);
1862 vikas 60
		}
61
 
62
        return invocation.invoke();
63
	}
64
 
2021 vikas 65
    /**
2637 vikas 66
     * Update first source cookie
2021 vikas 67
     * 
68
     */
69
    private void updateFirstSourceCookie() {
70
        firstSourceCookie = (Cookie) cookiesMap.get(SRC_COOKIE);
71
        if (firstSourceCookie != null) {
72
            return;
73
        }
74
        HttpServletRequest request = ServletActionContext.getRequest();
75
        String src = "";
76
        String referer = request.getHeader("referer");
77
        if (referer == null || referer.isEmpty() || referer.contains("saholic") || referer.contains("shop2020")) {
78
            src = "DIRECT : " + "(" + request.getRequestURL() + ")" ;
79
        }
80
        else if (referer.contains("google.co")) {
81
            src = "ORGANIC : " + "(" + referer + ")";
82
        }
83
        else {
84
            src = referer;
85
        }
86
        DesEncrypter des = new DesEncrypter("Saholic");
87
        String sourceCookieVal = des.encrypt(src);
88
 
89
        firstSourceCookie = new Cookie(SRC_COOKIE, sourceCookieVal);
90
        firstSourceCookie.setMaxAge(SECONDS_IN_YEAR);
91
        firstSourceCookie.setPath("/");
92
        if (!cookieDomain.isEmpty()) {
93
            firstSourceCookie.setDomain(cookieDomain);
94
        }
95
        cookiesMap.put(SRC_COOKIE, firstSourceCookie);
96
        HttpServletResponse response = ServletActionContext.getResponse();
97
        response.addCookie(firstSourceCookie);
98
    }
2637 vikas 99
 
100
    /**
101
     * Update first source cookie
102
     * 
103
     */
104
    private void updateSessionSourceCookie() {
105
        sessionSourceCookie = (Cookie) cookiesMap.get(SESSION_SRC_COOKIE);
106
        if (sessionSourceCookie != null) {
107
            return;
108
        }
109
        HttpServletRequest request = ServletActionContext.getRequest();
110
        String src = "";
111
        String referer = request.getHeader("referer");
112
        if (referer == null || referer.isEmpty() || referer.contains("saholic") || referer.contains("shop2020")) {
113
            src = "DIRECT : " + "(" + request.getRequestURL() + ")" ;
114
        }
115
        else if (referer.contains("google.co")) {
116
            src = "ORGANIC : " + "(" + referer + ")";
117
        }
118
        else {
119
            src = referer;
120
        }
121
        DesEncrypter des = new DesEncrypter("Saholic");
122
        String sessionSourceCookieVal = des.encrypt(src);
123
 
124
        sessionSourceCookie = new Cookie(SESSION_SRC_COOKIE, sessionSourceCookieVal);
125
        sessionSourceCookie.setPath("/");
126
        if (!cookieDomain.isEmpty()) {
127
            sessionSourceCookie.setDomain(cookieDomain);
128
        }
129
        cookiesMap.put(SESSION_SRC_COOKIE, sessionSourceCookie);
130
        HttpServletResponse response = ServletActionContext.getResponse();
131
        response.addCookie(sessionSourceCookie);
132
        HttpSession session = request.getSession();
133
        UserSessionInfo userinfo = (UserSessionInfo) session.getAttribute(UserInterceptor.USER_INFO);
134
        DataLogger.logData(EventType.NEW_SESSION, request.getSession().getId(), userinfo.getUserId(), userinfo.getEmail(), src);
135
    }
2021 vikas 136
 
1862 vikas 137
    private void createCookiesMap(HttpServletRequest request) {
138
        cookiesMap  = new HashMap<String, Cookie>();
139
        Cookie[] cookies = request.getCookies();
140
        // This check is necessary for the first request when no cookies are
141
        // sent.
142
        if(cookies==null)
143
            return;
144
        for (Cookie cookie : cookies) {
145
            cookiesMap.put(cookie.getName(), cookie);
146
        }
147
    }
1999 vikas 148
 
2021 vikas 149
    private void cleanTrackerCookie() {
1999 vikas 150
        trackerCookie = (Cookie) cookiesMap.get(TRACKER);
151
        affCookie = (Cookie) cookiesMap.get(AFF_COOKIE);
152
 
153
        if (trackerCookie != null) {
154
            if (affCookie == null) {
155
                try {
156
                    UserContextServiceClient userContextServiceClient = new UserContextServiceClient();
157
                    in.shop2020.model.v1.user.UserContextService.Client userClient = userContextServiceClient.getClient();
158
                    Tracker tracker = userClient.getTrackerById(Long.parseLong(trackerCookie.getValue()));
159
                    affCookie = new Cookie(AFF_COOKIE, String.valueOf(tracker.getAffiliateId()));
160
                    affCookie.setMaxAge(SECONDS_IN_TWO_MONTHS);
161
                    affCookie.setPath("/");
162
                    if (!cookieDomain.isEmpty()) {
163
                        affCookie.setDomain(cookieDomain);
164
                    }
165
                    cookiesMap.put(AFF_COOKIE, trackerCookie);
166
                    HttpServletResponse response = ServletActionContext.getResponse();
167
                    response.addCookie(affCookie);
168
                } catch (Exception e) {
169
                    // TODO Auto-generated catch block
170
                    e.printStackTrace();
171
                }
172
            }
173
 
174
            if (!cookieDomain.isEmpty()) {
175
                trackerCookie.setDomain(cookieDomain);
176
            }
177
            trackerCookie.setPath("/");
178
            trackerCookie.setMaxAge(0);
179
            HttpServletResponse response = ServletActionContext.getResponse();
180
            response.addCookie(trackerCookie);
181
        }
182
    }
1862 vikas 183
 
1999 vikas 184
	private void updateAffCookie(String affId) {
1862 vikas 185
        try {
186
            UserContextServiceClient userContextServiceClient = new UserContextServiceClient();
187
            in.shop2020.model.v1.user.UserContextService.Client userClient = userContextServiceClient
188
                    .getClient();
189
            long affiliateId = Long.parseLong(affId);
190
            Affiliate affiliate = userClient.getAffiliateById(affiliateId);
191
            if (affiliate != null) {
1999 vikas 192
                affCookie = (Cookie) cookiesMap.get(AFF_COOKIE);
193
                if (affCookie != null) {
194
                    Long.parseLong(affCookie.getValue());
195
                    if (affiliateId == Long.parseLong(affCookie.getValue())) {
1862 vikas 196
                        return;
197
                    }
198
                }
1999 vikas 199
                // create new aff cookie if affCookie ==null or affiliateId() != affCookie.
200
                Cookie newAffCookie = new Cookie(AFF_COOKIE, String.valueOf(affiliateId));
201
                newAffCookie.setMaxAge(SECONDS_IN_TWO_MONTHS);
202
                newAffCookie.setPath("/");
1862 vikas 203
                if (!cookieDomain.isEmpty()) {
1999 vikas 204
                    newAffCookie.setDomain(cookieDomain);
1862 vikas 205
                }
1999 vikas 206
                cookiesMap.put(AFF_COOKIE, newAffCookie);
1862 vikas 207
                HttpServletResponse response = ServletActionContext.getResponse();
1999 vikas 208
                response.addCookie(newAffCookie);
1862 vikas 209
            }
210
        } catch (Exception e) {
211
            log.error(e);
212
        }
213
	}
1877 vikas 214
}