Subversion Repositories SmartDukaan

Rev

Rev 419 | Blame | Last modification | View Log | RSS feed

/**
 * 
 */


package in.shop2020.serving.controllers;

import in.shop2020.model.v1.user.UserContext;
import in.shop2020.model.v1.user.UserContextException;
import in.shop2020.model.v1.user.UserInternalInfo;
import in.shop2020.serving.services.UserSessionInfo;
import in.shop2020.serving.utils.Utils;
import in.shop2020.thrift.clients.ShoppingCartClient;
import in.shop2020.thrift.clients.UserContextServiceClient;

import java.util.Map;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
import org.apache.struts2.interceptor.CookiesAware;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.interceptor.SessionAware;
import org.apache.thrift.TException;

/**
 * Base class for all user action handlers i.e. controllers
 * 
 * @author naveen
 *
 */
public abstract class BaseController implements  CookiesAware, ServletResponseAware, ServletRequestAware {
        private Map cookiesMap;
    protected HttpServletResponse response;
    protected HttpServletRequest request;
    protected HttpSession session;
    
    UserSessionInfo userinfo = null;
    
    Cookie tempCookie = null;
    
        private static Log log = LogFactory.getLog(BaseController.class);
        
        public BaseController() {
        }
        public Map getCookiesMap() {
                return cookiesMap;
        }
        
        @Override
        public void setCookiesMap(Map cookiesMap) {
                this.cookiesMap = cookiesMap;
        }
        
        @Override
        public void setServletResponse(HttpServletResponse response)
        {
                this.response = response;
                if(tempCookie != null){
                        this.response.addCookie(tempCookie);
                }
        }
        
        @Override
        public void setServletRequest(HttpServletRequest request){
                this.request = request;
                this.session = request.getSession();
                setUserSessionInfo();
        }
        
        public void removeUserSessionInfo(){
                if(this.session.getAttribute("userinfo") != null ){
                        this.session.removeAttribute("userinfo");
                }
        }

        
        public void setUserSessionInfo(){
                if(this.session.getAttribute("userinfo") != null ){
                        userinfo = (UserSessionInfo) this.session.getAttribute("userinfo");
                }else{
                        processCookiesInfo();
                        //userinfo = new UserSessionInfo();
                }
                this.session.setAttribute("userinfo",userinfo);
        }
        
        public void processCookiesInfo(){
                Cookie[] cookies = this.request.getCookies();
                boolean foundUserIdCookie = false;
                boolean foundSessionIdCookie = false;
                long userId = 0 ;
                long sessionId = 0;
                
                if(cookies != null){
                    for(int loopIndex = 0; loopIndex < cookies.length; loopIndex++) { 
                        Cookie cookie1 = cookies[loopIndex];
                        if (cookie1.getName().equals("userid")) {
                            System.out.println("User Id is = " + cookie1.getValue());
                            userId = Long.parseLong(cookie1.getValue());
                            foundUserIdCookie = true;
                        }
                        if (cookie1.getName().equals("sessionid")) {
                            System.out.println("Session Id is = " + cookie1.getValue());
                            sessionId = Long.parseLong(cookie1.getValue());
                            foundSessionIdCookie = true;
                        }
                }
                }
        
                if(foundUserIdCookie){
                        if(Utils.isUserLoggedIn(userId)){
                                userinfo = new UserSessionInfo(userId, false);
                        }
                        else{
                                if(foundSessionIdCookie){
                                        userinfo = new UserSessionInfo(sessionId, true);        
                                }else{
                                        userinfo = new UserSessionInfo();
                                    for(int loopIndex = 0; loopIndex < cookies.length; loopIndex++) { 
                                        Cookie cookie1 = cookies[loopIndex];
                                        if (cookie1.getName().equals("userid")) {
                                                cookie1.setMaxAge(0);
                                                //cookie1.setPath(cookie1.getPath());
                                                        //cookie1.setDomain(cookie1.getDomain());
                                                tempCookie = cookie1;
                                        }
                                        }
                                }
                        }
                }                       
                else{  
                        if(foundSessionIdCookie){
                                userinfo = new UserSessionInfo(sessionId, true);                        
                        }
                        else{
                                userinfo = new UserSessionInfo();
                                Cookie cookie1 = new Cookie("sessionid", userinfo.getSessionId()+"");
                        tempCookie = cookie1;
                        }
                }
        }

        public String getEmail(){
                return userinfo.getEmail();
        }

        public String getNameOfUser(){
                return userinfo.getNameOfUser();
        }

}
        /*
        
//      public String getEmail(){
//              if(this.session.getAttribute("email") != null){
//                      return this.session.getAttribute("email").toString();
//              }else{
//                      return "";
//              }
//      }

        
        public String getEmail(){
                return userinfo.getEmail();
        }

        
//      public long getNumberOfCartItems(){
//              if(this.session.getAttribute("totalitems") != null ){
//                      return Long.parseLong(this.session.getAttribute("totalitems").toString());
//              }else{
//                      return 0;
//              }
//      }

        
        public int getNumberOfCartItems(){
                return this.userinfo.getTotalItems();
        }
        
        
        public void removeSessionOnLogout(){
                if(this.session.getAttribute("loggedin") != null ){
                        this.session.removeAttribute("loggedin");
                }
                if(this.session.getAttribute("userid") != null){ 
                        this.session.removeAttribute("userid");
                }
                if( this.session.getAttribute("issessionid") != null){
                        this.session.removeAttribute("issessionid");
                }

        }
        
        
        public void setSessionAndCookies(){
                 *Following steps will be executed on each of the requests
                 *              Check Session: 
                 *                      IF user is loggedin 
                 *                              - OK. Nothing to do. Allow access to the resources
                 *                      ELSE check cookies 
                 *                      IF UserID is set
                 *                              IF User is logged into backend. 
                 *                                      Set user as loogedin in Session.
                 *                                      Set SessionID in session
                 *                              ELSE
                 *                                      Remove UserID from cookies.
                 *                      ELSE 
                 *                              IF SessionID is set     
                 *                                      OK....set session id in session also
                 *                              ELSE Create SessionID and Set SessionID in cookies and Session
                 *                      ELSE IF SessionID is set in session
                 *                              - OK.
                 *      
                 *
                
                String loggedIn = null;
                String userId = null;
                String isSessionId = null;
                
                
                if(this.session.getAttribute("loggedin") != null ){
                        loggedIn = this.session.getAttribute("loggedin").toString();
                }
                if(this.session.getAttribute("userid") != null){ 
                        userId = this.session.getAttribute("userid").toString();
                }
                if( this.session.getAttribute("issessionid") != null){
                                isSessionId = this.session.getAttribute("issessionid").toString();
                }
        
                                
                        
                
                if(loggedIn != null && isSessionId != null && userId != null ){
                        if(loggedIn.equals("true")){
                                if(isSessionId.equals("false")){
                                        System.out.println("Logged on user id is   :" + userId );       
                                }else{
                                        // if we reached here something is wrong.
                                        System.out.println("Something went wrong... Dude !!!");
                                }
                        }else{ 
                                if(isSessionId.equals("true")){
                                        System.out.println("Session is already set with sessionid   :" + userId );
                                }else{
                                        // if we reached here something is wrong.
                                        System.out.println("Something went wrong... Dude !!!");
                                }
                        }
                }
                else if(!getLoginSessionInfoFromCookies()){
                        System.out.println("Cookies are not set. Lookes like new user. Setting all the things.");
                }
//              else if(isSessionId != null && userId != null){
//                      System.out.println("Session is already set with sessionid   :" + userId );
//              }
                
        }

        
        String getEmailId(long userId){
                UserContextServiceClient userContextServiceClient = null;
                in.shop2020.model.v1.user.UserContextService.Client userClient = null;
                String email = "";
                
                try {
                        userContextServiceClient = new UserContextServiceClient();
                        userClient = userContextServiceClient.getClient();
                        email = userClient.getPrimaryInfo(userId, false).getEmail();
                } catch (UserContextException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (TException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
                
                return email; 
        }
        
        
        public boolean isUserLoggedIn(long userId){
                UserContextServiceClient userContextServiceClient = null;
                in.shop2020.model.v1.user.UserContextService.Client userClient = null;
                boolean isLoggedIn = false;
                
                try {
                        userContextServiceClient = new UserContextServiceClient();
                        userClient = userContextServiceClient.getClient();
                        isLoggedIn = userClient.getState(userId, false).isIsLoggedIn();
                } catch (UserContextException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (TException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
                
                return isLoggedIn; 
        }
        
        
        public long getNewUserSessionId(){
                // I feel we dont need to create the context right now. need to discuss
//              UserContextServiceClient userContextServiceClient = null;
//              in.shop2020.model.v1.user.UserContextService.Client userClient = null;
//      
//              userContextServiceClient = new UserContextServiceClient();
//              userClient = userContextServiceClient.getClient();
//              
//              UserContext context = new UserContext();
//              context.setSessionid(1000);
//              context = userClient.createContext(context, false);
//              
                long sessionId = 12;
//              sessionId = context.getSessionid();
                return sessionId; 
        }
        
        public boolean getLoginSessionInfoFromCookies(){
                Cookie[] cookies = this.request.getCookies();
                boolean foundUserIdCookie = false;
                boolean foundSessionIdCookie = false;
                
                long sessionId = 0;
                long userId = 0;
                
                if(cookies != null){
                    for(int loopIndex = 0; loopIndex < cookies.length; loopIndex++) { 
                        Cookie cookie1 = cookies[loopIndex];
                        if (cookie1.getName().equals("userid")) {
                            System.out.println("User Id is = " + cookie1.getValue());
                            userId = Long.parseLong(cookie1.getValue());
                            foundUserIdCookie = true;
                        }
                        if (cookie1.getName().equals("sessionid")) {
                            System.out.println("Session Id is = " + cookie1.getValue());
                            sessionId = Long.parseLong(cookie1.getValue());
                            foundSessionIdCookie = true;
                        }
                }
                }
        
                if(foundUserIdCookie){
                        if(isUserLoggedIn(userId)){
                                this.session.setAttribute("userid", userId+"");
                                this.session.setAttribute("loggedin", "true");
                                this.session.setAttribute("issessionid", "false");
                                
                                this.session.setAttribute("email", getEmailId(userId));
                                
                                this.session.setAttribute("totalitems", getNumberOfCartItems());
                        }
                        else{
                                /*      may be something different can be done as commented
                                 *      this.session.setAttribute("userid", userId+"");
                                 *      this.session.setAttribute("loggedin", "false");
                                 *      this.session.setAttribute("issessionid", "false");              
                                 *
                                if(!foundSessionIdCookie){
                                        sessionId = getNewUserSessionId();
                                }
                                
                                this.session.setAttribute("userid", sessionId+"");
                                this.session.setAttribute("loggedin", "false");
                                this.session.setAttribute("issessionid", "true");

                            for(int loopIndex = 0; loopIndex < cookies.length; loopIndex++) { 
                                Cookie cookie1 = cookies[loopIndex];
                                if (cookie1.getName().equals("userid")) {
                                        cookie1.setMaxAge(0);
                                        //cookie1.setPath(cookie1.getPath());
                                                //cookie1.setDomain(cookie1.getDomain());
                                        tempCookie = cookie1;
                                }
                                }
                        }
                }
                else{  
                        if(foundSessionIdCookie){
                                this.session.setAttribute("userid", sessionId+"");
                                this.session.setAttribute("loggedin", "false");
                                this.session.setAttribute("issessionid", "true");
                                this.session.setAttribute("totalitems", "0");
                        }
                        else{
                                sessionId = getNewUserSessionId();
                                this.session.setAttribute("userid", sessionId+"");
                                this.session.setAttribute("loggedin", "false");
                                this.session.setAttribute("issessionid", "true");                       
                                this.session.setAttribute("totalitems", "0");
                                
                                Cookie cookie1 = new Cookie("sessionid", sessionId+"");
                        tempCookie = cookie1;
                                
                        }
                }
        return false;           
        }
        

}



                        }       
                }
        
        else if(getCookiesMap() != null){
                        Cookie loginCookie = (Cookie)getCookiesMap().get("USER_ID");
                        log.info("login cookie name is " + loginCookie.getName() );
                        log.info("login cookie value is " + loginCookie.getValue());
                }
        
                

                if(loginInfo != null && loginInfo.equals("true")){
                        System.out.println("user id is   :" + this.session.getAttribute("userid").toString());
                }
                
                
                        
                        this.session.setAttribute("loggedin", "true");
                        this.session.setAttribute("userid", "rajveer");
                        System.out.println("setting user as logged in ");
                }
        */