Subversion Repositories SmartDukaan

Rev

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