Subversion Repositories SmartDukaan

Rev

Rev 3185 | Rev 3209 | 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
        }
78
        String src = "";
79
        String referer = request.getHeader("referer");
2945 vikas 80
        if (referer == null || referer.isEmpty() || referer.contains("saholic")
81
                || referer.contains("shop2020")) {
3185 vikas 82
            String queryString = request.getQueryString();
83
            queryString = queryString == null? "" : "?" + queryString;
84
            src = "DIRECT : " + "(" + request.getRequestURL() + queryString + ")";
2945 vikas 85
        } else if (referer.contains("google.co")) {
2021 vikas 86
            src = "ORGANIC : " + "(" + referer + ")";
2945 vikas 87
        } else {
2021 vikas 88
            src = referer;
89
        }
2817 vikas 90
        DesEncrypter des = new DesEncrypter(ENCRIPTION_STRING);
2021 vikas 91
        String sourceCookieVal = des.encrypt(src);
2945 vikas 92
 
2021 vikas 93
        firstSourceCookie = new Cookie(SRC_COOKIE, sourceCookieVal);
94
        firstSourceCookie.setMaxAge(SECONDS_IN_YEAR);
95
        firstSourceCookie.setPath("/");
96
        if (!cookieDomain.isEmpty()) {
97
            firstSourceCookie.setDomain(cookieDomain);
98
        }
99
        cookiesMap.put(SRC_COOKIE, firstSourceCookie);
2945 vikas 100
 
101
        firstSourceTimeCookie = new Cookie(SRC_TIME_COOKIE,
102
                Long.toString((new Date()).getTime()));
2817 vikas 103
        firstSourceTimeCookie.setMaxAge(SECONDS_IN_YEAR);
104
        firstSourceTimeCookie.setPath("/");
105
        if (!cookieDomain.isEmpty()) {
106
            firstSourceTimeCookie.setDomain(cookieDomain);
107
        }
108
        cookiesMap.put(SRC_TIME_COOKIE, firstSourceTimeCookie);
2945 vikas 109
 
2021 vikas 110
        response.addCookie(firstSourceCookie);
2817 vikas 111
        response.addCookie(firstSourceTimeCookie);
2021 vikas 112
    }
2945 vikas 113
 
2637 vikas 114
    /**
115
     * Update first source cookie
116
     * 
117
     */
118
    private void updateSessionSourceCookie() {
119
        sessionSourceCookie = (Cookie) cookiesMap.get(SESSION_SRC_COOKIE);
120
        if (sessionSourceCookie != null) {
121
            return;
122
        }
123
        String src = "";
124
        String referer = request.getHeader("referer");
2945 vikas 125
        if (referer == null || referer.isEmpty() || referer.contains("saholic")
126
                || referer.contains("shop2020")) {
3185 vikas 127
            String queryString = request.getQueryString();
128
            queryString = queryString == null? "" : "?" + queryString;
129
            src = "DIRECT : " + "(" + request.getRequestURL() + queryString + ")";
2945 vikas 130
        } else if (referer.contains("google.co")) {
2637 vikas 131
            src = "ORGANIC : " + "(" + referer + ")";
2945 vikas 132
        } else {
2637 vikas 133
            src = referer;
134
        }
2817 vikas 135
        DesEncrypter des = new DesEncrypter(ENCRIPTION_STRING);
2637 vikas 136
        String sessionSourceCookieVal = des.encrypt(src);
2945 vikas 137
 
3185 vikas 138
        //session source
2945 vikas 139
        sessionSourceCookie = new Cookie(SESSION_SRC_COOKIE,
140
                sessionSourceCookieVal);
2637 vikas 141
        sessionSourceCookie.setPath("/");
142
        if (!cookieDomain.isEmpty()) {
143
            sessionSourceCookie.setDomain(cookieDomain);
144
        }
145
        cookiesMap.put(SESSION_SRC_COOKIE, sessionSourceCookie);
2945 vikas 146
 
3185 vikas 147
        //session time
2945 vikas 148
        sessionSourceTimeCookie = new Cookie(SESSION_SRC_TIME_COOKIE,
149
                Long.toString((new Date()).getTime()));
2817 vikas 150
        sessionSourceTimeCookie.setPath("/");
151
        if (!cookieDomain.isEmpty()) {
152
            sessionSourceTimeCookie.setDomain(cookieDomain);
153
        }
154
        cookiesMap.put(SESSION_SRC_TIME_COOKIE, sessionSourceTimeCookie);
3185 vikas 155
 
156
        //session id
157
        String sessionId = request.getSession().getId();
158
        sessionIdCookie = new Cookie(SESSION_ID_COOKIE, sessionId);
159
        sessionIdCookie.setPath("/");
160
        if (!cookieDomain.isEmpty()) {
161
            sessionIdCookie.setDomain(cookieDomain);
162
        }
163
        cookiesMap.put(SESSION_ID_COOKIE, sessionIdCookie);
2945 vikas 164
 
3185 vikas 165
 
2637 vikas 166
        response.addCookie(sessionSourceCookie);
2817 vikas 167
        response.addCookie(sessionSourceTimeCookie);
3185 vikas 168
        response.addCookie(sessionIdCookie);
2945 vikas 169
 
170
        UserSessionInfo userInfo = (UserSessionInfo) request
171
                .getAttribute(UserInterceptor.USER_INFO_COOKIE_NAME);
3185 vikas 172
        DataLogger.logData(EventType.NEW_SESSION, cookiesMap.get(SESSION_ID_COOKIE).getValue(),
2945 vikas 173
                userInfo.getUserId(), userInfo.getEmail(), src);
2637 vikas 174
    }
2021 vikas 175
 
2945 vikas 176
    private void createCookiesMap() {
177
        cookiesMap = new HashMap<String, Cookie>();
1862 vikas 178
        Cookie[] cookies = request.getCookies();
179
        // This check is necessary for the first request when no cookies are
180
        // sent.
2945 vikas 181
        if (cookies == null)
1862 vikas 182
            return;
183
        for (Cookie cookie : cookies) {
184
            cookiesMap.put(cookie.getName(), cookie);
185
        }
186
    }
2945 vikas 187
 
188
    private void updateAffCookie(String affId) {
189
        try {
190
            if(affId == null || affId.isEmpty()) {
191
                String referer = request.getHeader("referer");
192
                if (referer != null && !referer.isEmpty() && !referer.contains("saholic.com" ) && !referer.contains("shop2020.in" )) {
193
                    Cookie affCookie = cookiesMap.get(AFF_COOKIE);
3199 vikas 194
                    if(affCookie != null) {
195
                        affCookie.setDomain(cookieDomain);
196
                        affCookie.setPath("/");
197
                        affCookie.setValue("");
198
                        affCookie.setMaxAge(0);
199
                        response.addCookie(affCookie);
200
                    }
1999 vikas 201
                }
2945 vikas 202
                return;
1999 vikas 203
            }
3126 rajveer 204
            UserClient userContextServiceClient = new UserClient();
2945 vikas 205
            in.shop2020.model.v1.user.UserContextService.Client userClient = userContextServiceClient.getClient();
1862 vikas 206
            long affiliateId = Long.parseLong(affId);
207
            Affiliate affiliate = userClient.getAffiliateById(affiliateId);
208
            if (affiliate != null) {
1999 vikas 209
                affCookie = (Cookie) cookiesMap.get(AFF_COOKIE);
210
                if (affCookie != null) {
211
                    Long.parseLong(affCookie.getValue());
212
                    if (affiliateId == Long.parseLong(affCookie.getValue())) {
1862 vikas 213
                        return;
214
                    }
215
                }
1999 vikas 216
                // create new aff cookie if affCookie ==null or affiliateId() != affCookie.
217
                Cookie newAffCookie = new Cookie(AFF_COOKIE, String.valueOf(affiliateId));
2936 vikas 218
                newAffCookie.setMaxAge(SECONDS_IN_DAY * 5);
1999 vikas 219
                newAffCookie.setPath("/");
1862 vikas 220
                if (!cookieDomain.isEmpty()) {
1999 vikas 221
                    newAffCookie.setDomain(cookieDomain);
1862 vikas 222
                }
1999 vikas 223
                cookiesMap.put(AFF_COOKIE, newAffCookie);
224
                response.addCookie(newAffCookie);
1862 vikas 225
            }
226
        } catch (Exception e) {
3199 vikas 227
            log.error("Failed to update affcookie.", e);
1862 vikas 228
        }
229
	}
1877 vikas 230
}