Subversion Repositories SmartDukaan

Rev

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