Subversion Repositories SmartDukaan

Rev

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