Subversion Repositories SmartDukaan

Rev

Rev 24478 | Rev 24976 | 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
 
23784 ashik.ali 13
import org.apache.logging.log4j.LogManager;
23568 govind 14
import org.apache.logging.log4j.Logger;
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;
24383 amit.gupta 22
import org.springframework.web.bind.annotation.PostMapping;
24016 amit.gupta 23
import org.springframework.web.bind.annotation.RequestBody;
21555 kshitij.so 24
import org.springframework.web.bind.annotation.RequestMapping;
25
import org.springframework.web.bind.annotation.RequestMethod;
21561 ashik.ali 26
import org.springframework.web.bind.annotation.RequestParam;
21555 kshitij.so 27
 
21561 ashik.ali 28
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
24016 amit.gupta 29
import com.spice.profitmandi.common.model.Location;
21561 ashik.ali 30
import com.spice.profitmandi.common.model.ProfitMandiConstants;
24383 amit.gupta 31
import com.spice.profitmandi.dao.entity.auth.AuthUser;
22111 ashik.ali 32
import com.spice.profitmandi.dao.entity.dtr.Retailer;
23784 ashik.ali 33
import com.spice.profitmandi.dao.entity.dtr.Role;
22111 ashik.ali 34
import com.spice.profitmandi.dao.entity.dtr.User;
23271 ashik.ali 35
import com.spice.profitmandi.dao.entity.dtr.UserAccount;
22111 ashik.ali 36
import com.spice.profitmandi.dao.entity.dtr.UserRole;
24016 amit.gupta 37
import com.spice.profitmandi.dao.entity.fofo.FofoStore;
22111 ashik.ali 38
import com.spice.profitmandi.dao.enumuration.dtr.AccountType;
39
import com.spice.profitmandi.dao.enumuration.dtr.RoleType;
24383 amit.gupta 40
import com.spice.profitmandi.dao.repository.auth.AuthRepository;
24016 amit.gupta 41
import com.spice.profitmandi.dao.repository.dtr.FofoStoreRepository;
22111 ashik.ali 42
import com.spice.profitmandi.dao.repository.dtr.RetailerRepository;
23784 ashik.ali 43
import com.spice.profitmandi.dao.repository.dtr.RoleRepository;
22111 ashik.ali 44
import com.spice.profitmandi.dao.repository.dtr.UserAccountRepository;
45
import com.spice.profitmandi.dao.repository.dtr.UserRepository;
46
import com.spice.profitmandi.dao.repository.dtr.UserRoleRepository;
24383 amit.gupta 47
import com.spice.profitmandi.service.AuthService;
22139 amit.gupta 48
import com.spice.profitmandi.web.model.LoginDetails;
22069 ashik.ali 49
import com.spice.profitmandi.web.util.CookiesProcessor;
22111 ashik.ali 50
import com.spice.profitmandi.web.util.GoogleTokenUtil;
21574 ashik.ali 51
import com.spice.profitmandi.web.util.MVCResponseSender;
21561 ashik.ali 52
 
21555 kshitij.so 53
@Controller
22148 amit.gupta 54
@Transactional
21555 kshitij.so 55
public class LoginController {
56
 
23568 govind 57
	private static final Logger LOGGER = LogManager.getLogger(LoginController.class);
24016 amit.gupta 58
 
21561 ashik.ali 59
	@Autowired
22927 ashik.ali 60
	private GoogleTokenUtil googleTokenUtil;
24016 amit.gupta 61
 
21574 ashik.ali 62
	@Autowired
22927 ashik.ali 63
	private RetailerRepository retailerRepository;
24016 amit.gupta 64
 
22111 ashik.ali 65
	@Autowired
22927 ashik.ali 66
	private UserRepository userRepository;
24016 amit.gupta 67
 
22111 ashik.ali 68
	@Autowired
22927 ashik.ali 69
	private UserAccountRepository userAccountRepository;
24016 amit.gupta 70
 
22111 ashik.ali 71
	@Autowired
22927 ashik.ali 72
	private UserRoleRepository userRoleRepository;
24016 amit.gupta 73
 
22111 ashik.ali 74
	@Autowired
23784 ashik.ali 75
	private RoleRepository roleRepository;
24016 amit.gupta 76
 
23784 ashik.ali 77
	@Autowired
24016 amit.gupta 78
	private FofoStoreRepository fofoStoreRepository;
79
 
80
	@Autowired
22927 ashik.ali 81
	private MVCResponseSender mvcResponseSender;
24016 amit.gupta 82
 
21578 ashik.ali 83
	@Autowired
22927 ashik.ali 84
	private CookiesProcessor cookiesProcessor;
22079 amit.gupta 85
 
86
	@Value("${google.api.key}")
87
	private String googleApiKey;
24016 amit.gupta 88
 
24383 amit.gupta 89
	@Autowired
90
	private AuthService authService;
91
 
92
	@Autowired
93
	private AuthRepository authRepository;
94
 
21555 kshitij.so 95
	@RequestMapping(value = "/login", method = RequestMethod.GET)
24016 amit.gupta 96
	public String loginPage(HttpServletRequest request, Model model) throws Exception {
22088 amit.gupta 97
		LOGGER.info("Context Path is {}", request.getContextPath());
24016 amit.gupta 98
		try {
23784 ashik.ali 99
			LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
22139 amit.gupta 100
			LOGGER.info("Request session is already exist, should be redirect to as per roles assigned");
23784 ashik.ali 101
			String redirectUrl = null;
24016 amit.gupta 102
 
23784 ashik.ali 103
			Role roleRetailer = roleRepository.selectByName(RoleType.RETAILER.toString());
104
			Role roleFofo = roleRepository.selectByName(RoleType.RETAILER.toString());
105
			Role roleFofoAdmin = roleRepository.selectByName(RoleType.RETAILER.toString());
24016 amit.gupta 106
			if ((fofoDetails.getRoleIds().contains(roleRetailer.getId())
107
					&& fofoDetails.getRoleIds().contains(roleFofo.getId())
108
					|| (fofoDetails.getRoleIds().contains(roleFofoAdmin.getId())))) {
23784 ashik.ali 109
				redirectUrl = "/dashboard";
110
			} else {
111
				redirectUrl = "/login";
112
			}
113
			return "redirect:" + redirectUrl;
24016 amit.gupta 114
		} catch (ProfitMandiBusinessException profitMandiBusinessException) {
22079 amit.gupta 115
			model.addAttribute("googleApiKey", googleApiKey);
22086 amit.gupta 116
			model.addAttribute("appContextPath", request.getContextPath());
21577 ashik.ali 117
			return "login";
21574 ashik.ali 118
		}
21555 kshitij.so 119
	}
24016 amit.gupta 120
 
22155 amit.gupta 121
	@RequestMapping(value = "/", method = RequestMethod.GET)
24016 amit.gupta 122
	public String home() {
22860 ashik.ali 123
		return "redirect:/login";
22155 amit.gupta 124
	}
24016 amit.gupta 125
 
21555 kshitij.so 126
	@RequestMapping(value = "/login", method = RequestMethod.POST)
24016 amit.gupta 127
	public String login(HttpServletRequest request, HttpServletResponse response,
24383 amit.gupta 128
			@RequestParam(name = ProfitMandiConstants.TOKEN) String token,
129
			@RequestParam(name = ProfitMandiConstants.EMAIL_ID_OR_MOBILE_NUMBER, defaultValue = "") String emailIdOrMobileNumber,
130
			@RequestParam(name = "password", defaultValue = "") String password, Model model) throws Exception {
131
 
22139 amit.gupta 132
		LoginDetails fofoDetails = new LoginDetails();
23784 ashik.ali 133
		Set<Integer> roleIds = new HashSet<>();
134
		fofoDetails.setRoleIds(roleIds);
24383 amit.gupta 135
		String emailId = null;
136
		String name=null;
24016 amit.gupta 137
		try {
138
			// if role is retailer then FOFO_ID is retailerId else it is userid as normal
139
			// user's wont have retailer id.
24383 amit.gupta 140
			if (token == "") {
141
				if (authService.authenticate(emailIdOrMobileNumber, password)) {
142
					AuthUser authUser = authRepository.selectByEmailOrMobile(emailIdOrMobileNumber);
143
					if(authUser==null) {
144
						throw new ProfitMandiBusinessException("Authentication", "Email or Mobile", "Invalid Email Or Mobile");
145
					}
146
					emailId = authUser.getEmailId();
147
					name=authUser.getFirstName()+" "+authUser.getLastName();
148
					authUser.setLastLoginTimestamp(LocalDateTime.now());
149
					authRepository.persist(authUser);
150
				}
151
 
152
			} else {
153
				emailId = googleTokenUtil.getEmailId(token);
24527 amit.gupta 154
				if(ProfitMandiConstants.BLOCKED_EMAILS.contains(emailId)) {
155
				}
24383 amit.gupta 156
			}
22139 amit.gupta 157
			fofoDetails.setEmailId(emailId);
158
			fofoDetails.setFofoId(-1);
24016 amit.gupta 159
			// fofoDetails.setFofo(false);
22111 ashik.ali 160
			User user = null;
24016 amit.gupta 161
			try {
22111 ashik.ali 162
				user = userRepository.selectByEmailId(emailId);
24016 amit.gupta 163
			} catch (ProfitMandiBusinessException profitMandiBusinessException) {
23628 ashik.ali 164
				LOGGER.error("User not found with given emailId [{}]", emailId);
23203 ashik.ali 165
			}
24016 amit.gupta 166
			if (user == null) {
167
				try {
23203 ashik.ali 168
					user = userRepository.selectBySecondryEmailId(emailId);
24016 amit.gupta 169
				} catch (ProfitMandiBusinessException profitMandiBusinessException) {
23203 ashik.ali 170
					LOGGER.error("User not found with given emailId", profitMandiBusinessException);
24527 amit.gupta 171
					model.addAttribute("response", mvcResponseSender.createResponseString("RTLR_OK_1002", true,
172
							request.getContextPath() + "/login","Email"));
173
					return "response";
23203 ashik.ali 174
				}
175
			}
24016 amit.gupta 176
			if (user != null) {
22139 amit.gupta 177
				fofoDetails.setFofoId(user.getId());
178
				try {
179
					List<UserRole> userRoles = userRoleRepository.selectByUserId(user.getId());
24016 amit.gupta 180
					for (int index = 0; index < userRoles.size(); index++) {
23784 ashik.ali 181
						roleIds.add(userRoles.get(index).getRoleId());
22139 amit.gupta 182
					}
23784 ashik.ali 183
					List<Role> roles = roleRepository.selectByIds(roleIds);
24016 amit.gupta 184
					for (Role role : roles) {
185
						if (role.getName().equals(RoleType.RETAILER.toString())) {
186
							UserAccount userAccounts = userAccountRepository.selectByUserIdType(user.getId(),
187
									AccountType.saholic);
23784 ashik.ali 188
							Retailer retailer = retailerRepository.selectById(userAccounts.getAccountKey());
189
							fofoDetails.setFofoId(retailer.getId());
24016 amit.gupta 190
							// fofoDetails.setFofo(retailer.isFofo());
23784 ashik.ali 191
						}
22166 amit.gupta 192
					}
24016 amit.gupta 193
				} catch (ProfitMandiBusinessException pmbe) {
22139 amit.gupta 194
					LOGGER.error("Data Inconsistent", pmbe);
195
				}
22111 ashik.ali 196
			}
23784 ashik.ali 197
			String redirectUrl = null;
24016 amit.gupta 198
 
23784 ashik.ali 199
			Role roleRetailer = roleRepository.selectByName(RoleType.RETAILER.toString());
200
			Role roleFofo = roleRepository.selectByName(RoleType.RETAILER.toString());
201
			Role roleFofoAdmin = roleRepository.selectByName(RoleType.RETAILER.toString());
24016 amit.gupta 202
 
203
			if ((fofoDetails.getRoleIds().contains(roleRetailer.getId())
204
					&& fofoDetails.getRoleIds().contains(roleFofo.getId())
205
					|| (fofoDetails.getRoleIds().contains(roleFofoAdmin.getId())))) {
23784 ashik.ali 206
				redirectUrl = "/dashboard";
207
			} else {
208
				redirectUrl = "/login";
209
			}
24016 amit.gupta 210
 
211
			if (!redirectUrl.equals("/login")) {
23419 ashik.ali 212
				user.setLoginTimestamp(LocalDateTime.now());
213
				userRepository.persist(user);
23173 ashik.ali 214
				this.addCookiesToResponse(fofoDetails, request, response);
24016 amit.gupta 215
				LOGGER.info("Requested token email_id is valid, user login to system, shoud be redirect to {}",
216
						redirectUrl);
217
				model.addAttribute("response", mvcResponseSender.createResponseString("RTLR_OK_1002", true,
24383 amit.gupta 218
						request.getContextPath() + redirectUrl,name));
24016 amit.gupta 219
			} else {
23173 ashik.ali 220
				LOGGER.error("Requested token email_id is not valid, please try to login");
24016 amit.gupta 221
				throw new ProfitMandiBusinessException(ProfitMandiConstants.EMAIL_ID, fofoDetails.getEmailId(),
222
						"RTLR_1000");
23173 ashik.ali 223
			}
21578 ashik.ali 224
			return "response";
24016 amit.gupta 225
		} catch (ProfitMandiBusinessException profitMandiBusinessException) {
21568 ashik.ali 226
			LOGGER.error("Error : ", profitMandiBusinessException);
24016 amit.gupta 227
			model.addAttribute("response",
228
					mvcResponseSender.createResponseString(profitMandiBusinessException.getCode(), false, "/error"));
21578 ashik.ali 229
			return "response";
21561 ashik.ali 230
		}
21555 kshitij.so 231
	}
24383 amit.gupta 232
 
233
	@PostMapping(value = "/forgetPassword")
234
	public String forgetPasswordPage(@RequestParam(name=ProfitMandiConstants.EMAIL_ID,defaultValue="")String emailId,Model model) throws Exception {
235
		LOGGER.info(emailId);
236
		authService.resetPassword(emailId);
237
		model.addAttribute("response", mvcResponseSender.createResponseString(true));
238
		LOGGER.info("completed");
239
		return "response";
240
	}
24016 amit.gupta 241
 
242
	private void addCookiesToResponse(LoginDetails fofoDetails, HttpServletRequest request,
243
			HttpServletResponse response) {
23784 ashik.ali 244
		List<String> roleIds = new ArrayList<>();
24016 amit.gupta 245
 
246
		for (int roleId : fofoDetails.getRoleIds()) {
23784 ashik.ali 247
			roleIds.add(String.valueOf(roleId));
22139 amit.gupta 248
		}
23784 ashik.ali 249
		Cookie cookieRoleIds = new Cookie(ProfitMandiConstants.ROLE_IDS, String.join(",", roleIds));
250
		cookieRoleIds.setDomain(request.getServerName());
251
		cookieRoleIds.setPath(request.getContextPath());
24016 amit.gupta 252
 
22139 amit.gupta 253
		Cookie cookieFofoId = new Cookie(ProfitMandiConstants.FOFO_ID, String.valueOf(fofoDetails.getFofoId()));
254
		cookieFofoId.setDomain(request.getServerName());
22160 amit.gupta 255
		cookieFofoId.setPath(request.getContextPath());
24016 amit.gupta 256
 
22139 amit.gupta 257
		Cookie cookieEmailId = new Cookie(ProfitMandiConstants.EMAIL_ID, fofoDetails.getEmailId());
258
		cookieEmailId.setDomain(request.getServerName());
22160 amit.gupta 259
		cookieEmailId.setPath(request.getContextPath());
22139 amit.gupta 260
 
261
		response.addCookie(cookieFofoId);
262
		response.addCookie(cookieEmailId);
23784 ashik.ali 263
		response.addCookie(cookieRoleIds);
22139 amit.gupta 264
	}
24016 amit.gupta 265
 
22069 ashik.ali 266
	@RequestMapping(value = "/logout", method = RequestMethod.GET)
24016 amit.gupta 267
	public String logout(HttpServletRequest request, @ModelAttribute("model") ModelMap model,
268
			HttpServletResponse response) throws Exception {
269
		try {
23419 ashik.ali 270
			LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
271
			User user = null;
24016 amit.gupta 272
			try {
23419 ashik.ali 273
				user = userRepository.selectByEmailId(loginDetails.getEmailId());
24016 amit.gupta 274
			} catch (ProfitMandiBusinessException profitMandiBusinessException) {
23419 ashik.ali 275
				LOGGER.error("User not found with given emailId", profitMandiBusinessException);
276
			}
24016 amit.gupta 277
			if (user == null) {
23419 ashik.ali 278
				user = userRepository.selectBySecondryEmailId(loginDetails.getEmailId());
279
			}
280
			user.setLogoutTimestamp(LocalDateTime.now());
281
			userRepository.persist(user);
22069 ashik.ali 282
			cookiesProcessor.removeCookies(request, response);
283
			LOGGER.info("Logout is successfull, should be redirect to /login");
22085 amit.gupta 284
			return "redirect:/login";
24016 amit.gupta 285
		} catch (ProfitMandiBusinessException profitMandiBusinessException) {
22069 ashik.ali 286
			LOGGER.info("Error occured while removing requested cookies, should be redirect to /login");
22085 amit.gupta 287
			return "redirect:/login";
22069 ashik.ali 288
		}
289
	}
24016 amit.gupta 290
 
291
	@RequestMapping(value = "/partner/location", method = RequestMethod.PUT)
292
	public String setLocation(HttpServletRequest request, Model model, @RequestBody Location location)
293
			throws Exception {
294
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
295
		boolean response = true;
24383 amit.gupta 296
		try
297
		{
24016 amit.gupta 298
		FofoStore fs = fofoStoreRepository.selectByRetailerId(loginDetails.getFofoId());
299
		if (fs.getLatitude() == null) {
300
			fs.setLatitude(location.getLatitude());
301
			fs.setLongitude(location.getLongitude());
302
			fofoStoreRepository.persist(fs);
303
		}
304
		model.addAttribute("response", response);
24383 amit.gupta 305
		}
306
		catch(Exception e)
307
		{
308
			LOGGER.error("FofoStore Code not found of fofoId {}", loginDetails.getFofoId());
309
		}
24016 amit.gupta 310
		return "response";
311
	}
21555 kshitij.so 312
}