Subversion Repositories SmartDukaan

Rev

Rev 23419 | Rev 23628 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
21561 ashik.ali 1
package com.spice.profitmandi.web.controller;
21555 kshitij.so 2
 
23419 ashik.ali 3
import java.time.LocalDateTime;
22139 amit.gupta 4
import java.util.ArrayList;
22111 ashik.ali 5
import java.util.HashSet;
6
import java.util.List;
7
import java.util.Set;
22069 ashik.ali 8
 
21577 ashik.ali 9
import javax.servlet.http.Cookie;
21561 ashik.ali 10
import javax.servlet.http.HttpServletRequest;
21577 ashik.ali 11
import javax.servlet.http.HttpServletResponse;
21561 ashik.ali 12
 
23568 govind 13
import org.apache.logging.log4j.Logger;
14
import org.apache.logging.log4j.LogManager;
21561 ashik.ali 15
import org.springframework.beans.factory.annotation.Autowired;
22079 amit.gupta 16
import org.springframework.beans.factory.annotation.Value;
21555 kshitij.so 17
import org.springframework.stereotype.Controller;
21987 kshitij.so 18
import org.springframework.transaction.annotation.Transactional;
21615 kshitij.so 19
import org.springframework.ui.Model;
21555 kshitij.so 20
import org.springframework.ui.ModelMap;
21
import org.springframework.web.bind.annotation.ModelAttribute;
22
import org.springframework.web.bind.annotation.RequestMapping;
23
import org.springframework.web.bind.annotation.RequestMethod;
21561 ashik.ali 24
import org.springframework.web.bind.annotation.RequestParam;
21555 kshitij.so 25
 
21561 ashik.ali 26
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
27
import com.spice.profitmandi.common.model.ProfitMandiConstants;
22111 ashik.ali 28
import com.spice.profitmandi.dao.entity.dtr.Retailer;
29
import com.spice.profitmandi.dao.entity.dtr.User;
23271 ashik.ali 30
import com.spice.profitmandi.dao.entity.dtr.UserAccount;
22111 ashik.ali 31
import com.spice.profitmandi.dao.entity.dtr.UserRole;
32
import com.spice.profitmandi.dao.enumuration.dtr.AccountType;
33
import com.spice.profitmandi.dao.enumuration.dtr.RoleType;
34
import com.spice.profitmandi.dao.repository.dtr.RetailerRepository;
35
import com.spice.profitmandi.dao.repository.dtr.UserAccountRepository;
36
import com.spice.profitmandi.dao.repository.dtr.UserRepository;
37
import com.spice.profitmandi.dao.repository.dtr.UserRoleRepository;
22139 amit.gupta 38
import com.spice.profitmandi.web.model.LoginDetails;
22069 ashik.ali 39
import com.spice.profitmandi.web.util.CookiesProcessor;
22111 ashik.ali 40
import com.spice.profitmandi.web.util.GoogleTokenUtil;
21574 ashik.ali 41
import com.spice.profitmandi.web.util.MVCResponseSender;
22139 amit.gupta 42
import com.spice.profitmandi.web.util.Utils;
21561 ashik.ali 43
 
21555 kshitij.so 44
@Controller
22148 amit.gupta 45
@Transactional
21555 kshitij.so 46
public class LoginController {
47
 
23568 govind 48
	private static final Logger LOGGER = LogManager.getLogger(LoginController.class);
21568 ashik.ali 49
 
21561 ashik.ali 50
	@Autowired
22927 ashik.ali 51
	private GoogleTokenUtil googleTokenUtil;
21561 ashik.ali 52
 
21574 ashik.ali 53
	@Autowired
22927 ashik.ali 54
	private RetailerRepository retailerRepository;
22111 ashik.ali 55
 
56
	@Autowired
22927 ashik.ali 57
	private UserRepository userRepository;
22111 ashik.ali 58
 
59
	@Autowired
22927 ashik.ali 60
	private UserAccountRepository userAccountRepository;
22111 ashik.ali 61
 
62
	@Autowired
22927 ashik.ali 63
	private UserRoleRepository userRoleRepository;
22111 ashik.ali 64
 
65
	@Autowired
22927 ashik.ali 66
	private MVCResponseSender mvcResponseSender;
21574 ashik.ali 67
 
21578 ashik.ali 68
	@Autowired
22927 ashik.ali 69
	private CookiesProcessor cookiesProcessor;
22079 amit.gupta 70
 
71
	@Value("${google.api.key}")
72
	private String googleApiKey;
73
 
21555 kshitij.so 74
	@RequestMapping(value = "/login", method = RequestMethod.GET)
22072 ashik.ali 75
	public String loginPage(HttpServletRequest request, Model model) throws Exception{
22088 amit.gupta 76
		LOGGER.info("Context Path is {}", request.getContextPath());
21578 ashik.ali 77
		try{
22139 amit.gupta 78
			LoginDetails details = cookiesProcessor.getCookiesObject(request);
79
			LOGGER.info("Request session is already exist, should be redirect to as per roles assigned");
80
			return "redirect:" + Utils.getRedictUrlFromLogin(details);
22927 ashik.ali 81
		}catch(ProfitMandiBusinessException profitMandiBusinessException){
22079 amit.gupta 82
			model.addAttribute("googleApiKey", googleApiKey);
22086 amit.gupta 83
			model.addAttribute("appContextPath", request.getContextPath());
21577 ashik.ali 84
			return "login";
21574 ashik.ali 85
		}
21555 kshitij.so 86
	}
22155 amit.gupta 87
	@RequestMapping(value = "/", method = RequestMethod.GET)
88
	public String home(){
22860 ashik.ali 89
		return "redirect:/login";
22155 amit.gupta 90
	}
21555 kshitij.so 91
 
92
	@RequestMapping(value = "/login", method = RequestMethod.POST)
21615 kshitij.so 93
	public String login(HttpServletRequest request, HttpServletResponse response, @RequestParam(name = ProfitMandiConstants.TOKEN) String token, Model model) throws Exception{
22139 amit.gupta 94
		LoginDetails fofoDetails = new LoginDetails();
95
		Set<RoleType> roleTypes = new HashSet<>();
96
		fofoDetails.setRoleTypes(roleTypes);
22533 ashik.ali 97
		//fofoDetails.setFofo(false);
22139 amit.gupta 98
 
21561 ashik.ali 99
		try{
22139 amit.gupta 100
			//if role is retailer then FOFO_ID is retailerId else it is userid as normal user's wont have retailer id. 
22111 ashik.ali 101
			String emailId = googleTokenUtil.getEmailId(token);
22139 amit.gupta 102
			fofoDetails.setEmailId(emailId);
103
			fofoDetails.setFofoId(-1);
22533 ashik.ali 104
			//fofoDetails.setFofo(false);
22111 ashik.ali 105
			User user = null;
106
			try{
107
				user = userRepository.selectByEmailId(emailId);
23203 ashik.ali 108
			}catch(ProfitMandiBusinessException profitMandiBusinessException){
109
				LOGGER.error("User not found with given emailId", profitMandiBusinessException);
110
			}
111
			if(user == null){
112
				try{
113
					user = userRepository.selectBySecondryEmailId(emailId);
114
				}catch(ProfitMandiBusinessException profitMandiBusinessException){
115
					LOGGER.error("User not found with given emailId", profitMandiBusinessException);
116
				}
117
			}
118
			if(user != null){
22139 amit.gupta 119
				fofoDetails.setFofoId(user.getId());
120
				try {
121
					List<UserRole> userRoles = userRoleRepository.selectByUserId(user.getId());
122
					for(int index = 0; index < userRoles.size(); index++){
123
						roleTypes.add(userRoles.get(index).getRoleType());
124
					}
22166 amit.gupta 125
					if(roleTypes.contains(RoleType.RETAILER)) {
23271 ashik.ali 126
						UserAccount userAccounts = userAccountRepository.selectByUserIdType(user.getId(), AccountType.saholic);
127
						Retailer retailer = retailerRepository.selectById(userAccounts.getAccountKey());
22166 amit.gupta 128
						fofoDetails.setFofoId(retailer.getId());
22533 ashik.ali 129
						//fofoDetails.setFofo(retailer.isFofo());
22166 amit.gupta 130
					}
22139 amit.gupta 131
				} catch(ProfitMandiBusinessException pmbe) {
132
					LOGGER.error("Data Inconsistent", pmbe);
133
				}
22111 ashik.ali 134
			}
22139 amit.gupta 135
			String redirectUrl = Utils.getRedictUrlFromLogin(fofoDetails);
23173 ashik.ali 136
			if(!redirectUrl.equals("/login")){
23419 ashik.ali 137
				user.setLoginTimestamp(LocalDateTime.now());
138
				userRepository.persist(user);
23173 ashik.ali 139
				this.addCookiesToResponse(fofoDetails, request, response);
140
				LOGGER.info("Requested token email_id is valid, user login to system, shoud be redirect to {}", redirectUrl);
23405 amit.gupta 141
				model.addAttribute("response", mvcResponseSender.createResponseString("RTLR_OK_1002", true, request.getContextPath() + redirectUrl));
23173 ashik.ali 142
			}else{
143
				LOGGER.error("Requested token email_id is not valid, please try to login");
144
				throw new ProfitMandiBusinessException(ProfitMandiConstants.EMAIL_ID, fofoDetails.getEmailId(), "RTLR_1000");
145
			}
21578 ashik.ali 146
			return "response";
22139 amit.gupta 147
		} catch(ProfitMandiBusinessException profitMandiBusinessException){
21568 ashik.ali 148
			LOGGER.error("Error : ", profitMandiBusinessException);
23405 amit.gupta 149
			model.addAttribute("response", mvcResponseSender.createResponseString(profitMandiBusinessException.getCode(), false, "/error"));
21578 ashik.ali 150
			return "response";
21561 ashik.ali 151
		}
21555 kshitij.so 152
	}
21574 ashik.ali 153
 
22139 amit.gupta 154
	private void addCookiesToResponse(LoginDetails fofoDetails, HttpServletRequest request, HttpServletResponse response) {
155
		List<String> roleNames = new ArrayList<>();
156
 
157
		for(RoleType roleType : fofoDetails.getRoleTypes()) {
158
			roleNames.add(roleType.toString());
159
		}
160
		Cookie cookieRoleNames = new Cookie(ProfitMandiConstants.ROLE_NAMES, String.join(",", roleNames));
161
		cookieRoleNames.setDomain(request.getServerName());
22160 amit.gupta 162
		cookieRoleNames.setPath(request.getContextPath());
22139 amit.gupta 163
 
164
		Cookie cookieFofoId = new Cookie(ProfitMandiConstants.FOFO_ID, String.valueOf(fofoDetails.getFofoId()));
165
		cookieFofoId.setDomain(request.getServerName());
22160 amit.gupta 166
		cookieFofoId.setPath(request.getContextPath());
22139 amit.gupta 167
 
168
		Cookie cookieEmailId = new Cookie(ProfitMandiConstants.EMAIL_ID, fofoDetails.getEmailId());
169
		cookieEmailId.setDomain(request.getServerName());
22160 amit.gupta 170
		cookieEmailId.setPath(request.getContextPath());
22139 amit.gupta 171
 
172
		response.addCookie(cookieFofoId);
173
		response.addCookie(cookieEmailId);
174
		response.addCookie(cookieRoleNames);
175
	}
176
 
22069 ashik.ali 177
	@RequestMapping(value = "/logout", method = RequestMethod.GET)
178
	public String logout(HttpServletRequest request, @ModelAttribute("model") ModelMap model, HttpServletResponse response) throws Exception{
179
		try{
23419 ashik.ali 180
			LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
181
			User user = null;
182
			try{
183
				user = userRepository.selectByEmailId(loginDetails.getEmailId());
184
			}catch(ProfitMandiBusinessException profitMandiBusinessException){
185
				LOGGER.error("User not found with given emailId", profitMandiBusinessException);
186
			}
187
			if(user == null){
188
				user = userRepository.selectBySecondryEmailId(loginDetails.getEmailId());
189
			}
190
			user.setLogoutTimestamp(LocalDateTime.now());
191
			userRepository.persist(user);
22069 ashik.ali 192
			cookiesProcessor.removeCookies(request, response);
193
			LOGGER.info("Logout is successfull, should be redirect to /login");
22085 amit.gupta 194
			return "redirect:/login";
22927 ashik.ali 195
		}catch(ProfitMandiBusinessException profitMandiBusinessException){
22069 ashik.ali 196
			LOGGER.info("Error occured while removing requested cookies, should be redirect to /login");
22085 amit.gupta 197
			return "redirect:/login";
22069 ashik.ali 198
		}
199
	}
200
 
21555 kshitij.so 201
}