Subversion Repositories SmartDukaan

Rev

Rev 3209 | Rev 3493 | 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;
3126 rajveer 7
import in.shop2020.thrift.clients.UserClient;
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";
3185 vikas 37
    public static final String SESSION_ID_COOKIE = "sess_idc";
2945 vikas 38
    public static final String ENCRIPTION_STRING = "Saholic";
39
 
40
    private String cookieDomain = "";
41
    private Cookie affCookie = null;
42
    private Cookie firstSourceCookie = null;
43
    private Cookie sessionSourceCookie = null;
44
    private Cookie firstSourceTimeCookie = null;
2817 vikas 45
    private Cookie sessionSourceTimeCookie = null;
3185 vikas 46
    private Cookie sessionIdCookie = null;
1862 vikas 47
    private Map<String, Cookie> cookiesMap = null;
2945 vikas 48
    private HttpServletRequest request;
49
    private HttpServletResponse response;
50
 
1862 vikas 51
    public void setCookieDomain(String cookieDomain) {
52
        this.cookieDomain = cookieDomain;
53
    }
1999 vikas 54
 
2021 vikas 55
    @Override
2945 vikas 56
    public String intercept(ActionInvocation invocation) throws Exception {
57
        request = ServletActionContext.getRequest();
58
        response = ServletActionContext.getResponse();
1862 vikas 59
 
2945 vikas 60
        String affId = request.getParameter("afid");
61
        createCookiesMap();
62
        updateFirstSourceCookie();
63
        updateSessionSourceCookie();
1862 vikas 64
 
2945 vikas 65
        updateAffCookie(affId);
1862 vikas 66
        return invocation.invoke();
2945 vikas 67
    }
1862 vikas 68
 
2021 vikas 69
    /**
2637 vikas 70
     * Update first source cookie
2021 vikas 71
     * 
72
     */
73
    private void updateFirstSourceCookie() {
74
        firstSourceCookie = (Cookie) cookiesMap.get(SRC_COOKIE);
75
        if (firstSourceCookie != null) {
76
            return;
77
        }
3286 vikas 78
        String src = getSource();
2817 vikas 79
        DesEncrypter des = new DesEncrypter(ENCRIPTION_STRING);
2021 vikas 80
        String sourceCookieVal = des.encrypt(src);
2945 vikas 81
 
2021 vikas 82
        firstSourceCookie = new Cookie(SRC_COOKIE, sourceCookieVal);
83
        firstSourceCookie.setMaxAge(SECONDS_IN_YEAR);
84
        firstSourceCookie.setPath("/");
85
        if (!cookieDomain.isEmpty()) {
86
            firstSourceCookie.setDomain(cookieDomain);
87
        }
88
        cookiesMap.put(SRC_COOKIE, firstSourceCookie);
2945 vikas 89
 
90
        firstSourceTimeCookie = new Cookie(SRC_TIME_COOKIE,
91
                Long.toString((new Date()).getTime()));
2817 vikas 92
        firstSourceTimeCookie.setMaxAge(SECONDS_IN_YEAR);
93
        firstSourceTimeCookie.setPath("/");
94
        if (!cookieDomain.isEmpty()) {
95
            firstSourceTimeCookie.setDomain(cookieDomain);
96
        }
97
        cookiesMap.put(SRC_TIME_COOKIE, firstSourceTimeCookie);
2945 vikas 98
 
2021 vikas 99
        response.addCookie(firstSourceCookie);
2817 vikas 100
        response.addCookie(firstSourceTimeCookie);
2021 vikas 101
    }
2945 vikas 102
 
2637 vikas 103
    /**
104
     * Update first source cookie
105
     * 
106
     */
107
    private void updateSessionSourceCookie() {
108
        sessionSourceCookie = (Cookie) cookiesMap.get(SESSION_SRC_COOKIE);
109
        if (sessionSourceCookie != null) {
110
            return;
111
        }
3286 vikas 112
        String src = getSource();
113
 
2817 vikas 114
        DesEncrypter des = new DesEncrypter(ENCRIPTION_STRING);
2637 vikas 115
        String sessionSourceCookieVal = des.encrypt(src);
2945 vikas 116
 
3185 vikas 117
        //session source
2945 vikas 118
        sessionSourceCookie = new Cookie(SESSION_SRC_COOKIE,
119
                sessionSourceCookieVal);
2637 vikas 120
        sessionSourceCookie.setPath("/");
121
        if (!cookieDomain.isEmpty()) {
122
            sessionSourceCookie.setDomain(cookieDomain);
123
        }
124
        cookiesMap.put(SESSION_SRC_COOKIE, sessionSourceCookie);
2945 vikas 125
 
3185 vikas 126
        //session time
2945 vikas 127
        sessionSourceTimeCookie = new Cookie(SESSION_SRC_TIME_COOKIE,
128
                Long.toString((new Date()).getTime()));
2817 vikas 129
        sessionSourceTimeCookie.setPath("/");
130
        if (!cookieDomain.isEmpty()) {
131
            sessionSourceTimeCookie.setDomain(cookieDomain);
132
        }
133
        cookiesMap.put(SESSION_SRC_TIME_COOKIE, sessionSourceTimeCookie);
3185 vikas 134
 
135
        //session id
136
        String sessionId = request.getSession().getId();
137
        sessionIdCookie = new Cookie(SESSION_ID_COOKIE, sessionId);
138
        sessionIdCookie.setPath("/");
139
        if (!cookieDomain.isEmpty()) {
140
            sessionIdCookie.setDomain(cookieDomain);
141
        }
142
        cookiesMap.put(SESSION_ID_COOKIE, sessionIdCookie);
2945 vikas 143
 
3185 vikas 144
 
2637 vikas 145
        response.addCookie(sessionSourceCookie);
2817 vikas 146
        response.addCookie(sessionSourceTimeCookie);
3185 vikas 147
        response.addCookie(sessionIdCookie);
2945 vikas 148
 
149
        UserSessionInfo userInfo = (UserSessionInfo) request
150
                .getAttribute(UserInterceptor.USER_INFO_COOKIE_NAME);
3209 vikas 151
 
152
        String firstSrc = "";
153
        firstSourceCookie = (Cookie) cookiesMap.get(SRC_COOKIE);
154
        if (firstSourceCookie != null) {
155
            firstSrc = des.decrypt(firstSourceCookie.getValue());
156
        }
3185 vikas 157
        DataLogger.logData(EventType.NEW_SESSION, cookiesMap.get(SESSION_ID_COOKIE).getValue(),
3209 vikas 158
                userInfo.getUserId(), userInfo.getEmail(), src, firstSrc);
2637 vikas 159
    }
2021 vikas 160
 
2945 vikas 161
    private void createCookiesMap() {
162
        cookiesMap = new HashMap<String, Cookie>();
1862 vikas 163
        Cookie[] cookies = request.getCookies();
164
        // This check is necessary for the first request when no cookies are
165
        // sent.
2945 vikas 166
        if (cookies == null)
1862 vikas 167
            return;
168
        for (Cookie cookie : cookies) {
169
            cookiesMap.put(cookie.getName(), cookie);
170
        }
171
    }
2945 vikas 172
 
173
    private void updateAffCookie(String affId) {
174
        try {
175
            if(affId == null || affId.isEmpty()) {
176
                String referer = request.getHeader("referer");
177
                if (referer != null && !referer.isEmpty() && !referer.contains("saholic.com" ) && !referer.contains("shop2020.in" )) {
178
                    Cookie affCookie = cookiesMap.get(AFF_COOKIE);
3199 vikas 179
                    if(affCookie != null) {
180
                        affCookie.setDomain(cookieDomain);
181
                        affCookie.setPath("/");
182
                        affCookie.setValue("");
183
                        affCookie.setMaxAge(0);
184
                        response.addCookie(affCookie);
185
                    }
1999 vikas 186
                }
2945 vikas 187
                return;
1999 vikas 188
            }
3126 rajveer 189
            UserClient userContextServiceClient = new UserClient();
2945 vikas 190
            in.shop2020.model.v1.user.UserContextService.Client userClient = userContextServiceClient.getClient();
1862 vikas 191
            long affiliateId = Long.parseLong(affId);
192
            Affiliate affiliate = userClient.getAffiliateById(affiliateId);
193
            if (affiliate != null) {
1999 vikas 194
                affCookie = (Cookie) cookiesMap.get(AFF_COOKIE);
195
                if (affCookie != null) {
196
                    Long.parseLong(affCookie.getValue());
197
                    if (affiliateId == Long.parseLong(affCookie.getValue())) {
1862 vikas 198
                        return;
199
                    }
200
                }
1999 vikas 201
                // create new aff cookie if affCookie ==null or affiliateId() != affCookie.
202
                Cookie newAffCookie = new Cookie(AFF_COOKIE, String.valueOf(affiliateId));
2936 vikas 203
                newAffCookie.setMaxAge(SECONDS_IN_DAY * 5);
1999 vikas 204
                newAffCookie.setPath("/");
1862 vikas 205
                if (!cookieDomain.isEmpty()) {
1999 vikas 206
                    newAffCookie.setDomain(cookieDomain);
1862 vikas 207
                }
1999 vikas 208
                cookiesMap.put(AFF_COOKIE, newAffCookie);
209
                response.addCookie(newAffCookie);
1862 vikas 210
            }
211
        } catch (Exception e) {
3199 vikas 212
            log.error("Failed to update affcookie.", e);
1862 vikas 213
        }
214
	}
3286 vikas 215
 
216
    private String getSource() {
217
        String src = "";
218
        String referer = request.getHeader("referer");
219
        if (referer == null || referer.isEmpty() || referer.contains("saholic")
220
                || referer.contains("shop2020")) {
221
            String queryString = request.getQueryString();
222
            queryString = queryString == null? "" : "?" + queryString;
223
            src = "DIRECT : " + "(" + request.getRequestURL() + queryString + ")";
224
        } else if (referer.contains("google.co")) {
225
            if(request.getQueryString().contains("afid=6")) {
226
                src = "PAID : " + "(" + referer + ")";
227
            }
228
            else {
229
                src = "ORGANIC : " + "(" + referer + ")";
230
            }
231
        } else {
232
            if(request.getQueryString().contains("afid=6")) {
233
                src = "PAID : " + "(" + referer + ")";
234
            }
235
            else {
236
                src = referer;
237
            }
238
        }
239
        return src;
240
    }
1877 vikas 241
}