Subversion Repositories SmartDukaan

Rev

Rev 31238 | Rev 32570 | 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
 
25008 amit.gupta 3
import com.google.gson.Gson;
4
import com.google.gson.reflect.TypeToken;
21561 ashik.ali 5
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
24016 amit.gupta 6
import com.spice.profitmandi.common.model.Location;
21561 ashik.ali 7
import com.spice.profitmandi.common.model.ProfitMandiConstants;
25011 amit.gupta 8
import com.spice.profitmandi.common.model.ProfitMandiResponse;
25008 amit.gupta 9
import com.spice.profitmandi.common.web.client.RestClient;
24383 amit.gupta 10
import com.spice.profitmandi.dao.entity.auth.AuthUser;
30299 amit.gupta 11
import com.spice.profitmandi.dao.entity.dtr.*;
24016 amit.gupta 12
import com.spice.profitmandi.dao.entity.fofo.FofoStore;
25303 amit.gupta 13
import com.spice.profitmandi.dao.entity.user.Device;
22111 ashik.ali 14
import com.spice.profitmandi.dao.enumuration.dtr.AccountType;
15
import com.spice.profitmandi.dao.enumuration.dtr.RoleType;
24383 amit.gupta 16
import com.spice.profitmandi.dao.repository.auth.AuthRepository;
25303 amit.gupta 17
import com.spice.profitmandi.dao.repository.catalog.DeviceRepository;
30299 amit.gupta 18
import com.spice.profitmandi.dao.repository.dtr.*;
24383 amit.gupta 19
import com.spice.profitmandi.service.AuthService;
24976 amit.gupta 20
import com.spice.profitmandi.service.authentication.RoleManager;
21
import com.spice.profitmandi.service.user.RetailerService;
22139 amit.gupta 22
import com.spice.profitmandi.web.model.LoginDetails;
22069 ashik.ali 23
import com.spice.profitmandi.web.util.CookiesProcessor;
22111 ashik.ali 24
import com.spice.profitmandi.web.util.GoogleTokenUtil;
21574 ashik.ali 25
import com.spice.profitmandi.web.util.MVCResponseSender;
30299 amit.gupta 26
import org.apache.http.NameValuePair;
27
import org.apache.http.client.utils.URLEncodedUtils;
28
import org.apache.http.message.BasicNameValuePair;
29
import org.apache.logging.log4j.LogManager;
30
import org.apache.logging.log4j.Logger;
31
import org.springframework.beans.factory.annotation.Autowired;
32
import org.springframework.beans.factory.annotation.Value;
33
import org.springframework.stereotype.Controller;
34
import org.springframework.ui.Model;
35
import org.springframework.ui.ModelMap;
36
import org.springframework.web.bind.annotation.*;
21561 ashik.ali 37
 
30299 amit.gupta 38
import javax.servlet.http.Cookie;
39
import javax.servlet.http.HttpServletRequest;
40
import javax.servlet.http.HttpServletResponse;
41
import javax.transaction.Transactional;
42
import java.lang.reflect.Type;
43
import java.time.LocalDateTime;
44
import java.util.*;
45
import java.util.stream.Collectors;
46
 
21555 kshitij.so 47
@Controller
22148 amit.gupta 48
@Transactional
21555 kshitij.so 49
public class LoginController {
50
 
23568 govind 51
	private static final Logger LOGGER = LogManager.getLogger(LoginController.class);
24016 amit.gupta 52
 
21561 ashik.ali 53
	@Autowired
22927 ashik.ali 54
	private GoogleTokenUtil googleTokenUtil;
24016 amit.gupta 55
 
21574 ashik.ali 56
	@Autowired
24976 amit.gupta 57
	private RoleManager roleManager;
26449 amit.gupta 58
 
25303 amit.gupta 59
	@Autowired
60
	private DeviceRepository deviceRepository;
24984 amit.gupta 61
 
24976 amit.gupta 62
	@Autowired
22927 ashik.ali 63
	private RetailerRepository retailerRepository;
24016 amit.gupta 64
 
22111 ashik.ali 65
	@Autowired
24976 amit.gupta 66
	private RetailerService retailerService;
24984 amit.gupta 67
 
24976 amit.gupta 68
	@Autowired
22927 ashik.ali 69
	private UserRepository userRepository;
24016 amit.gupta 70
 
22111 ashik.ali 71
	@Autowired
22927 ashik.ali 72
	private UserAccountRepository userAccountRepository;
24016 amit.gupta 73
 
22111 ashik.ali 74
	@Autowired
22927 ashik.ali 75
	private UserRoleRepository userRoleRepository;
24016 amit.gupta 76
 
22111 ashik.ali 77
	@Autowired
23784 ashik.ali 78
	private RoleRepository roleRepository;
24016 amit.gupta 79
 
23784 ashik.ali 80
	@Autowired
24016 amit.gupta 81
	private FofoStoreRepository fofoStoreRepository;
82
 
83
	@Autowired
22927 ashik.ali 84
	private MVCResponseSender mvcResponseSender;
25243 amit.gupta 85
 
25008 amit.gupta 86
	@Autowired
87
	private RestClient restClient;
24016 amit.gupta 88
 
21578 ashik.ali 89
	@Autowired
22927 ashik.ali 90
	private CookiesProcessor cookiesProcessor;
22079 amit.gupta 91
 
92
	@Value("${google.api.key}")
93
	private String googleApiKey;
28246 amit.gupta 94
 
95
	@Value("${app.token.url}")
96
	private String appTokenUrl;
97
 
28256 amit.gupta 98
	@Value("${angular.app.url}")
99
	private String appUrl;
100
 
28246 amit.gupta 101
	@Value("${admin.token}")
102
	private String adminToken;
24016 amit.gupta 103
 
24383 amit.gupta 104
	@Autowired
105
	private AuthService authService;
106
 
107
	@Autowired
108
	private AuthRepository authRepository;
109
 
21555 kshitij.so 110
	@RequestMapping(value = "/login", method = RequestMethod.GET)
25544 amit.gupta 111
	public String loginPage(HttpServletRequest request, HttpServletResponse response, Model model) throws Exception {
22088 amit.gupta 112
		LOGGER.info("Context Path is {}", request.getContextPath());
24016 amit.gupta 113
		try {
23784 ashik.ali 114
			LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
22139 amit.gupta 115
			LOGGER.info("Request session is already exist, should be redirect to as per roles assigned");
23784 ashik.ali 116
			String redirectUrl = null;
24016 amit.gupta 117
 
23784 ashik.ali 118
			Role roleRetailer = roleRepository.selectByName(RoleType.RETAILER.toString());
26449 amit.gupta 119
			Role roleFofo = roleRepository.selectByName(RoleType.FOFO.toString());
120
			Role roleFofoAdmin = roleRepository.selectByName(RoleType.FOFO_ADMIN.toString());
121
			if (fofoDetails.getRoleIds().contains(roleFofoAdmin.getId())) {
23784 ashik.ali 122
				redirectUrl = "/dashboard";
26449 amit.gupta 123
			} else if (fofoDetails.getRoleIds().contains(roleRetailer.getId())
124
					&& fofoDetails.getRoleIds().contains(roleFofo.getId())) {
125
				FofoStore fofoStore = fofoStoreRepository.selectByRetailerId(fofoDetails.getFofoId());
126
				if (!fofoStore.isActive()) {
127
					cookiesProcessor.removeCookies(request, response);
128
					throw new ProfitMandiBusinessException("", "", "");
129
				}
26450 amit.gupta 130
				redirectUrl = "/dashboard";
26449 amit.gupta 131
 
23784 ashik.ali 132
			} else {
133
				redirectUrl = "/login";
134
			}
135
			return "redirect:" + redirectUrl;
24016 amit.gupta 136
		} catch (ProfitMandiBusinessException profitMandiBusinessException) {
22079 amit.gupta 137
			model.addAttribute("googleApiKey", googleApiKey);
22086 amit.gupta 138
			model.addAttribute("appContextPath", request.getContextPath());
21577 ashik.ali 139
			return "login";
21574 ashik.ali 140
		}
21555 kshitij.so 141
	}
24016 amit.gupta 142
 
22155 amit.gupta 143
	@RequestMapping(value = "/", method = RequestMethod.GET)
24016 amit.gupta 144
	public String home() {
22860 ashik.ali 145
		return "redirect:/login";
22155 amit.gupta 146
	}
25243 amit.gupta 147
 
25008 amit.gupta 148
	@RequestMapping(value = "/mobileapp", method = RequestMethod.GET)
25275 amit.gupta 149
	public String mobileApp(HttpServletRequest request, Model model, @RequestParam(defaultValue = "") String emailId)
150
			throws Exception {
25008 amit.gupta 151
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
25243 amit.gupta 152
		if (roleManager.isAdmin(fofoDetails.getRoleIds())) {
25275 amit.gupta 153
			if (emailId.equals("")) {
30302 amit.gupta 154
				AuthUser authUser = authRepository.selectByEmailOrMobile(fofoDetails.getEmailId());
30301 amit.gupta 155
				model.addAttribute("authToken", getToken(authUser.getGmailId()));
25275 amit.gupta 156
			} else {
157
				model.addAttribute("authToken", getToken(emailId));
25303 amit.gupta 158
				model.addAttribute("androidId", getAndroidId(emailId));
25275 amit.gupta 159
			}
26394 amit.gupta 160
		} else {
26395 amit.gupta 161
			emailId = fofoDetails.getEmailId();
162
			model.addAttribute("authToken", getToken(emailId));
163
			model.addAttribute("androidId", getAndroidId(emailId));
25008 amit.gupta 164
		}
28256 amit.gupta 165
		model.addAttribute("appUrl", appUrl);
25008 amit.gupta 166
		return "mobileapp";
167
	}
24016 amit.gupta 168
 
25303 amit.gupta 169
	private String getAndroidId(String emailId) throws Exception {
170
		User user = userRepository.selectByEmailId(emailId);
26449 amit.gupta 171
		List<Device> devices = deviceRepository.selectByUserIdAndModifiedTimestamp(Arrays.asList(user.getId()),
172
				LocalDateTime.now().minusYears(2), LocalDateTime.now());
173
		if (devices.size() > 0) {
26147 amit.gupta 174
			Device device = devices.get(0);
175
			return device.getAndroidId();
176
		} else {
177
			return "";
178
		}
25303 amit.gupta 179
	}
180
 
25008 amit.gupta 181
	private String getToken(String emailId) throws Exception {
25009 amit.gupta 182
		List<NameValuePair> nameValuePairs = new ArrayList<>();
28246 amit.gupta 183
		nameValuePairs.add(new BasicNameValuePair("adminToken", this.adminToken));
25011 amit.gupta 184
		nameValuePairs.add(new BasicNameValuePair("emailId", emailId));
25243 amit.gupta 185
		String queryString = URLEncodedUtils.format(nameValuePairs, "UTF-8");
28248 amit.gupta 186
		String response = restClient.post(this.appTokenUrl + queryString,
25243 amit.gupta 187
				new HashMap<>(), new HashMap<>());
188
		Type t = new TypeToken<ProfitMandiResponse<Map<String, Object>>>() {
189
		}.getType();
190
		ProfitMandiResponse<Map<String, Object>> apiResponse = new Gson().fromJson(response, t);
191
		if (apiResponse.getStatusCode().equals("200")) {
192
			return (new StringBuilder((String) apiResponse.getResponse().get("token")).reverse().toString());
25008 amit.gupta 193
		} else {
25009 amit.gupta 194
			throw new Exception("Unauthorised access");
25008 amit.gupta 195
		}
25243 amit.gupta 196
 
25008 amit.gupta 197
	}
25243 amit.gupta 198
 
24976 amit.gupta 199
	@RequestMapping(value = "/login-as-partner", method = RequestMethod.GET)
200
	public String adminLogin(HttpServletRequest request, Model model, HttpServletResponse response,
201
			@RequestParam int fofoId) throws Exception {
202
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
24984 amit.gupta 203
		if (roleManager.isAdmin(fofoDetails.getRoleIds())) {
204
			int userId = userAccountRepository.selectUserIdByRetailerId(fofoId);
205
			User user = userRepository.selectById(userId);
25243 amit.gupta 206
			Set<Integer> roleIds = userRoleRepository.selectByUserId(userId).stream().map(x -> x.getRoleId())
207
					.collect(Collectors.toSet());
24976 amit.gupta 208
			LoginDetails newFofoDetails = new LoginDetails();
209
			newFofoDetails.setFofoId(fofoId);
210
			newFofoDetails.setRoleIds(roleIds);
24984 amit.gupta 211
			newFofoDetails.setEmailId(user.getEmailId());
31238 amit.gupta 212
			model.addAttribute("response1", true);
24983 amit.gupta 213
			this.addCookiesToResponse(newFofoDetails, request, response);
24976 amit.gupta 214
		} else {
215
			throw new ProfitMandiBusinessException("", "", "");
216
		}
24981 amit.gupta 217
		return "response";
24976 amit.gupta 218
	}
27229 amit.gupta 219
 
220
	@RequestMapping(value = "/login-as-partner-readonly", method = RequestMethod.GET)
221
	public String readonlyLogin(HttpServletRequest request, Model model, HttpServletResponse response,
222
			@RequestParam int fofoId) throws Exception {
223
		LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
224
		if (roleManager.isAdmin(fofoDetails.getRoleIds())) {
225
			int userId = userAccountRepository.selectUserIdByRetailerId(fofoId);
226
			User user = userRepository.selectById(userId);
227
			Set<Integer> roleIds = userRoleRepository.selectByUserId(userId).stream().map(x -> x.getRoleId())
228
					.collect(Collectors.toSet());
229
			LoginDetails newFofoDetails = new LoginDetails();
230
			newFofoDetails.setFofoId(fofoId);
231
			newFofoDetails.setRoleIds(roleIds);
232
			newFofoDetails.setEmailId(user.getEmailId());
233
			newFofoDetails.setReadOnly(true);
31238 amit.gupta 234
			model.addAttribute("response1", true);
27229 amit.gupta 235
			this.addCookiesToResponse(newFofoDetails, request, response);
236
		} else {
237
			throw new ProfitMandiBusinessException("", "", "");
238
		}
239
		return "response";
240
	}
24976 amit.gupta 241
 
21555 kshitij.so 242
	@RequestMapping(value = "/login", method = RequestMethod.POST)
24016 amit.gupta 243
	public String login(HttpServletRequest request, HttpServletResponse response,
24383 amit.gupta 244
			@RequestParam(name = ProfitMandiConstants.TOKEN) String token,
245
			@RequestParam(name = ProfitMandiConstants.EMAIL_ID_OR_MOBILE_NUMBER, defaultValue = "") String emailIdOrMobileNumber,
246
			@RequestParam(name = "password", defaultValue = "") String password, Model model) throws Exception {
247
 
22139 amit.gupta 248
		LoginDetails fofoDetails = new LoginDetails();
23784 ashik.ali 249
		Set<Integer> roleIds = new HashSet<>();
250
		fofoDetails.setRoleIds(roleIds);
24383 amit.gupta 251
		String emailId = null;
24976 amit.gupta 252
		String name = null;
24016 amit.gupta 253
		try {
254
			// if role is retailer then FOFO_ID is retailerId else it is userid as normal
255
			// user's wont have retailer id.
24383 amit.gupta 256
			if (token == "") {
257
				if (authService.authenticate(emailIdOrMobileNumber, password)) {
258
					AuthUser authUser = authRepository.selectByEmailOrMobile(emailIdOrMobileNumber);
24976 amit.gupta 259
					if (authUser == null) {
260
						throw new ProfitMandiBusinessException("Authentication", "Email or Mobile",
261
								"Invalid Email Or Mobile");
24383 amit.gupta 262
					}
26026 amit.gupta 263
					emailId = authUser.getEmailId();
24976 amit.gupta 264
					name = authUser.getFirstName() + " " + authUser.getLastName();
24383 amit.gupta 265
					authUser.setLastLoginTimestamp(LocalDateTime.now());
266
					authRepository.persist(authUser);
267
				}
268
 
269
			} else {
25243 amit.gupta 270
				try {
271
					emailId = googleTokenUtil.getEmailId(token);
25275 amit.gupta 272
				} catch (Exception e) {
273
					// in case we cannot connect to google server.
25243 amit.gupta 274
					emailId = emailIdOrMobileNumber;
275
				}
24383 amit.gupta 276
			}
22139 amit.gupta 277
			fofoDetails.setEmailId(emailId);
278
			fofoDetails.setFofoId(-1);
24016 amit.gupta 279
			// fofoDetails.setFofo(false);
22111 ashik.ali 280
			User user = null;
24016 amit.gupta 281
			try {
22111 ashik.ali 282
				user = userRepository.selectByEmailId(emailId);
24016 amit.gupta 283
			} catch (ProfitMandiBusinessException profitMandiBusinessException) {
23628 ashik.ali 284
				LOGGER.error("User not found with given emailId [{}]", emailId);
23203 ashik.ali 285
			}
24016 amit.gupta 286
			if (user == null) {
287
				try {
23203 ashik.ali 288
					user = userRepository.selectBySecondryEmailId(emailId);
24016 amit.gupta 289
				} catch (ProfitMandiBusinessException profitMandiBusinessException) {
23203 ashik.ali 290
					LOGGER.error("User not found with given emailId", profitMandiBusinessException);
31238 amit.gupta 291
					model.addAttribute("response1", mvcResponseSender.createResponseString("RTLR_OK_1002", true,
24976 amit.gupta 292
							request.getContextPath() + "/login", "Email"));
24527 amit.gupta 293
					return "response";
23203 ashik.ali 294
				}
295
			}
24016 amit.gupta 296
			if (user != null) {
22139 amit.gupta 297
				fofoDetails.setFofoId(user.getId());
298
				try {
299
					List<UserRole> userRoles = userRoleRepository.selectByUserId(user.getId());
24016 amit.gupta 300
					for (int index = 0; index < userRoles.size(); index++) {
23784 ashik.ali 301
						roleIds.add(userRoles.get(index).getRoleId());
22139 amit.gupta 302
					}
23784 ashik.ali 303
					List<Role> roles = roleRepository.selectByIds(roleIds);
24016 amit.gupta 304
					for (Role role : roles) {
305
						if (role.getName().equals(RoleType.RETAILER.toString())) {
306
							UserAccount userAccounts = userAccountRepository.selectByUserIdType(user.getId(),
307
									AccountType.saholic);
23784 ashik.ali 308
							Retailer retailer = retailerRepository.selectById(userAccounts.getAccountKey());
309
							fofoDetails.setFofoId(retailer.getId());
24016 amit.gupta 310
							// fofoDetails.setFofo(retailer.isFofo());
23784 ashik.ali 311
						}
22166 amit.gupta 312
					}
24016 amit.gupta 313
				} catch (ProfitMandiBusinessException pmbe) {
22139 amit.gupta 314
					LOGGER.error("Data Inconsistent", pmbe);
315
				}
22111 ashik.ali 316
			}
23784 ashik.ali 317
			String redirectUrl = null;
24016 amit.gupta 318
 
25243 amit.gupta 319
			Role roleFofo = roleRepository.selectByName(RoleType.FOFO.toString());
320
			Role roleFofoAdmin = roleRepository.selectByName(RoleType.FOFO_ADMIN.toString());
24016 amit.gupta 321
 
25243 amit.gupta 322
			if (fofoDetails.getRoleIds().contains(roleFofo.getId())) {
23784 ashik.ali 323
				redirectUrl = "/dashboard";
25275 amit.gupta 324
				if (fofoDetails.getRoleIds().contains(roleFofo.getId())) {
325
 
25243 amit.gupta 326
				}
23784 ashik.ali 327
			} else {
328
				redirectUrl = "/login";
329
			}
24016 amit.gupta 330
 
25243 amit.gupta 331
			if (redirectUrl.equals("/dashboard")) {
23419 ashik.ali 332
				user.setLoginTimestamp(LocalDateTime.now());
23173 ashik.ali 333
				this.addCookiesToResponse(fofoDetails, request, response);
24016 amit.gupta 334
				LOGGER.info("Requested token email_id is valid, user login to system, shoud be redirect to {}",
335
						redirectUrl);
31238 amit.gupta 336
				model.addAttribute("response1", mvcResponseSender.createResponseString("RTLR_OK_1002", true,
24976 amit.gupta 337
						request.getContextPath() + redirectUrl, name));
24016 amit.gupta 338
			} else {
23173 ashik.ali 339
				LOGGER.error("Requested token email_id is not valid, please try to login");
25243 amit.gupta 340
				/**
25275 amit.gupta 341
				 * TODO:Amit This redirect should be handle.
25243 amit.gupta 342
				 */
24016 amit.gupta 343
				throw new ProfitMandiBusinessException(ProfitMandiConstants.EMAIL_ID, fofoDetails.getEmailId(),
344
						"RTLR_1000");
23173 ashik.ali 345
			}
21578 ashik.ali 346
			return "response";
24016 amit.gupta 347
		} catch (ProfitMandiBusinessException profitMandiBusinessException) {
21568 ashik.ali 348
			LOGGER.error("Error : ", profitMandiBusinessException);
31238 amit.gupta 349
			model.addAttribute("response1",
24016 amit.gupta 350
					mvcResponseSender.createResponseString(profitMandiBusinessException.getCode(), false, "/error"));
21578 ashik.ali 351
			return "response";
26021 amit.gupta 352
		} catch (Exception e) {
26025 amit.gupta 353
			e.printStackTrace();
31238 amit.gupta 354
			model.addAttribute("response1",
26449 amit.gupta 355
					mvcResponseSender.createResponseString(
356
							"You are not authorised! " + "Please contact the team if you feel this is incorrect", false,
357
							"/error"));
26021 amit.gupta 358
			return "response";
21561 ashik.ali 359
		}
21555 kshitij.so 360
	}
24976 amit.gupta 361
 
24383 amit.gupta 362
	@PostMapping(value = "/forgetPassword")
24976 amit.gupta 363
	public String forgetPasswordPage(
364
			@RequestParam(name = ProfitMandiConstants.EMAIL_ID, defaultValue = "") String emailId, Model model)
365
			throws Exception {
24383 amit.gupta 366
		LOGGER.info(emailId);
367
		authService.resetPassword(emailId);
31238 amit.gupta 368
		model.addAttribute("response1", mvcResponseSender.createResponseString(true));
24383 amit.gupta 369
		LOGGER.info("completed");
370
		return "response";
371
	}
24016 amit.gupta 372
 
373
	private void addCookiesToResponse(LoginDetails fofoDetails, HttpServletRequest request,
374
			HttpServletResponse response) {
23784 ashik.ali 375
		List<String> roleIds = new ArrayList<>();
24016 amit.gupta 376
 
377
		for (int roleId : fofoDetails.getRoleIds()) {
23784 ashik.ali 378
			roleIds.add(String.valueOf(roleId));
22139 amit.gupta 379
		}
26743 amit.gupta 380
		Cookie cookieRoleIds = new Cookie(ProfitMandiConstants.ROLE_IDS, String.join("-", roleIds));
23784 ashik.ali 381
		cookieRoleIds.setDomain(request.getServerName());
382
		cookieRoleIds.setPath(request.getContextPath());
24016 amit.gupta 383
 
22139 amit.gupta 384
		Cookie cookieFofoId = new Cookie(ProfitMandiConstants.FOFO_ID, String.valueOf(fofoDetails.getFofoId()));
385
		cookieFofoId.setDomain(request.getServerName());
22160 amit.gupta 386
		cookieFofoId.setPath(request.getContextPath());
24016 amit.gupta 387
 
22139 amit.gupta 388
		Cookie cookieEmailId = new Cookie(ProfitMandiConstants.EMAIL_ID, fofoDetails.getEmailId());
389
		cookieEmailId.setDomain(request.getServerName());
22160 amit.gupta 390
		cookieEmailId.setPath(request.getContextPath());
27234 amit.gupta 391
 
392
		Cookie cookieReadOnly = new Cookie(ProfitMandiConstants.READONLY_KEY, fofoDetails.isReadOnly() + "");
393
		cookieReadOnly.setDomain(request.getServerName());
394
		cookieReadOnly.setPath(request.getContextPath());
24984 amit.gupta 395
 
22139 amit.gupta 396
		response.addCookie(cookieFofoId);
397
		response.addCookie(cookieEmailId);
23784 ashik.ali 398
		response.addCookie(cookieRoleIds);
27234 amit.gupta 399
		response.addCookie(cookieReadOnly);
22139 amit.gupta 400
	}
24016 amit.gupta 401
 
22069 ashik.ali 402
	@RequestMapping(value = "/logout", method = RequestMethod.GET)
24016 amit.gupta 403
	public String logout(HttpServletRequest request, @ModelAttribute("model") ModelMap model,
404
			HttpServletResponse response) throws Exception {
405
		try {
23419 ashik.ali 406
			LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
407
			User user = null;
24016 amit.gupta 408
			try {
23419 ashik.ali 409
				user = userRepository.selectByEmailId(loginDetails.getEmailId());
24016 amit.gupta 410
			} catch (ProfitMandiBusinessException profitMandiBusinessException) {
23419 ashik.ali 411
				LOGGER.error("User not found with given emailId", profitMandiBusinessException);
412
			}
24016 amit.gupta 413
			if (user == null) {
23419 ashik.ali 414
				user = userRepository.selectBySecondryEmailId(loginDetails.getEmailId());
415
			}
416
			user.setLogoutTimestamp(LocalDateTime.now());
417
			userRepository.persist(user);
22069 ashik.ali 418
			cookiesProcessor.removeCookies(request, response);
419
			LOGGER.info("Logout is successfull, should be redirect to /login");
22085 amit.gupta 420
			return "redirect:/login";
24016 amit.gupta 421
		} catch (ProfitMandiBusinessException profitMandiBusinessException) {
22069 ashik.ali 422
			LOGGER.info("Error occured while removing requested cookies, should be redirect to /login");
22085 amit.gupta 423
			return "redirect:/login";
22069 ashik.ali 424
		}
425
	}
24016 amit.gupta 426
 
427
	@RequestMapping(value = "/partner/location", method = RequestMethod.PUT)
428
	public String setLocation(HttpServletRequest request, Model model, @RequestBody Location location)
429
			throws Exception {
430
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
431
		boolean response = true;
24976 amit.gupta 432
		try {
433
			FofoStore fs = fofoStoreRepository.selectByRetailerId(loginDetails.getFofoId());
434
			if (fs.getLatitude() == null) {
435
				fs.setLatitude(location.getLatitude());
436
				fs.setLongitude(location.getLongitude());
437
			}
31238 amit.gupta 438
			model.addAttribute("response1", response);
24976 amit.gupta 439
		} catch (Exception e) {
24383 amit.gupta 440
			LOGGER.error("FofoStore Code not found of fofoId {}", loginDetails.getFofoId());
441
		}
24016 amit.gupta 442
		return "response";
443
	}
21555 kshitij.so 444
}