Subversion Repositories SmartDukaan

Rev

Rev 23628 | Rev 24016 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 23628 Rev 23784
Line 8... Line 8...
8
 
8
 
9
import javax.servlet.http.Cookie;
9
import javax.servlet.http.Cookie;
10
import javax.servlet.http.HttpServletRequest;
10
import javax.servlet.http.HttpServletRequest;
11
import javax.servlet.http.HttpServletResponse;
11
import javax.servlet.http.HttpServletResponse;
12
 
12
 
13
import org.apache.logging.log4j.Logger;
-
 
14
import org.apache.logging.log4j.LogManager;
13
import org.apache.logging.log4j.LogManager;
-
 
14
import org.apache.logging.log4j.Logger;
15
import org.springframework.beans.factory.annotation.Autowired;
15
import org.springframework.beans.factory.annotation.Autowired;
16
import org.springframework.beans.factory.annotation.Value;
16
import org.springframework.beans.factory.annotation.Value;
17
import org.springframework.stereotype.Controller;
17
import org.springframework.stereotype.Controller;
18
import org.springframework.transaction.annotation.Transactional;
18
import org.springframework.transaction.annotation.Transactional;
19
import org.springframework.ui.Model;
19
import org.springframework.ui.Model;
Line 24... Line 24...
24
import org.springframework.web.bind.annotation.RequestParam;
24
import org.springframework.web.bind.annotation.RequestParam;
25
 
25
 
26
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
26
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
27
import com.spice.profitmandi.common.model.ProfitMandiConstants;
27
import com.spice.profitmandi.common.model.ProfitMandiConstants;
28
import com.spice.profitmandi.dao.entity.dtr.Retailer;
28
import com.spice.profitmandi.dao.entity.dtr.Retailer;
-
 
29
import com.spice.profitmandi.dao.entity.dtr.Role;
29
import com.spice.profitmandi.dao.entity.dtr.User;
30
import com.spice.profitmandi.dao.entity.dtr.User;
30
import com.spice.profitmandi.dao.entity.dtr.UserAccount;
31
import com.spice.profitmandi.dao.entity.dtr.UserAccount;
31
import com.spice.profitmandi.dao.entity.dtr.UserRole;
32
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.AccountType;
33
import com.spice.profitmandi.dao.enumuration.dtr.RoleType;
34
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.RetailerRepository;
-
 
36
import com.spice.profitmandi.dao.repository.dtr.RoleRepository;
35
import com.spice.profitmandi.dao.repository.dtr.UserAccountRepository;
37
import com.spice.profitmandi.dao.repository.dtr.UserAccountRepository;
36
import com.spice.profitmandi.dao.repository.dtr.UserRepository;
38
import com.spice.profitmandi.dao.repository.dtr.UserRepository;
37
import com.spice.profitmandi.dao.repository.dtr.UserRoleRepository;
39
import com.spice.profitmandi.dao.repository.dtr.UserRoleRepository;
38
import com.spice.profitmandi.web.model.LoginDetails;
40
import com.spice.profitmandi.web.model.LoginDetails;
39
import com.spice.profitmandi.web.util.CookiesProcessor;
41
import com.spice.profitmandi.web.util.CookiesProcessor;
40
import com.spice.profitmandi.web.util.GoogleTokenUtil;
42
import com.spice.profitmandi.web.util.GoogleTokenUtil;
41
import com.spice.profitmandi.web.util.MVCResponseSender;
43
import com.spice.profitmandi.web.util.MVCResponseSender;
42
import com.spice.profitmandi.web.util.Utils;
-
 
43
 
44
 
44
@Controller
45
@Controller
45
@Transactional
46
@Transactional
46
public class LoginController {
47
public class LoginController {
47
 
48
 
Line 61... Line 62...
61
	
62
	
62
	@Autowired
63
	@Autowired
63
	private UserRoleRepository userRoleRepository;
64
	private UserRoleRepository userRoleRepository;
64
	
65
	
65
	@Autowired
66
	@Autowired
-
 
67
	private RoleRepository roleRepository;
-
 
68
	
-
 
69
	@Autowired
66
	private MVCResponseSender mvcResponseSender;
70
	private MVCResponseSender mvcResponseSender;
67
	
71
	
68
	@Autowired
72
	@Autowired
69
	private CookiesProcessor cookiesProcessor;
73
	private CookiesProcessor cookiesProcessor;
70
 
74
 
Line 73... Line 77...
73
	
77
	
74
	@RequestMapping(value = "/login", method = RequestMethod.GET)
78
	@RequestMapping(value = "/login", method = RequestMethod.GET)
75
	public String loginPage(HttpServletRequest request, Model model) throws Exception{
79
	public String loginPage(HttpServletRequest request, Model model) throws Exception{
76
		LOGGER.info("Context Path is {}", request.getContextPath());
80
		LOGGER.info("Context Path is {}", request.getContextPath());
77
		try{
81
		try{
78
			LoginDetails details = cookiesProcessor.getCookiesObject(request);
82
			LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
79
			LOGGER.info("Request session is already exist, should be redirect to as per roles assigned");
83
			LOGGER.info("Request session is already exist, should be redirect to as per roles assigned");
-
 
84
			String redirectUrl = null;
-
 
85
			
-
 
86
			Role roleRetailer = roleRepository.selectByName(RoleType.RETAILER.toString());
-
 
87
			Role roleFofo = roleRepository.selectByName(RoleType.RETAILER.toString());
-
 
88
			Role roleFofoAdmin = roleRepository.selectByName(RoleType.RETAILER.toString());
-
 
89
			
-
 
90
			if ((fofoDetails.getRoleIds().contains(roleRetailer.getId()) && fofoDetails.getRoleIds().contains(roleFofo.getId()) || (fofoDetails.getRoleIds().contains(roleFofoAdmin.getId())))) {
-
 
91
				redirectUrl = "/dashboard";
-
 
92
			} else {
-
 
93
				redirectUrl = "/login";
-
 
94
			}
80
			return "redirect:" + Utils.getRedictUrlFromLogin(details);
95
			return "redirect:" + redirectUrl;
81
		}catch(ProfitMandiBusinessException profitMandiBusinessException){
96
		}catch(ProfitMandiBusinessException profitMandiBusinessException){
82
			model.addAttribute("googleApiKey", googleApiKey);
97
			model.addAttribute("googleApiKey", googleApiKey);
83
			model.addAttribute("appContextPath", request.getContextPath());
98
			model.addAttribute("appContextPath", request.getContextPath());
84
			return "login";
99
			return "login";
85
		}
100
		}
Line 91... Line 106...
91
	}
106
	}
92
	
107
	
93
	@RequestMapping(value = "/login", method = RequestMethod.POST)
108
	@RequestMapping(value = "/login", method = RequestMethod.POST)
94
	public String login(HttpServletRequest request, HttpServletResponse response, @RequestParam(name = ProfitMandiConstants.TOKEN) String token, Model model) throws Exception{
109
	public String login(HttpServletRequest request, HttpServletResponse response, @RequestParam(name = ProfitMandiConstants.TOKEN) String token, Model model) throws Exception{
95
		LoginDetails fofoDetails = new LoginDetails();
110
		LoginDetails fofoDetails = new LoginDetails();
96
		Set<RoleType> roleTypes = new HashSet<>();
111
		Set<Integer> roleIds = new HashSet<>();
97
		fofoDetails.setRoleTypes(roleTypes);
112
		fofoDetails.setRoleIds(roleIds);
98
		//fofoDetails.setFofo(false);
113
		//fofoDetails.setFofo(false);
99
 
114
 
100
		try{
115
		try{
101
			//if role is retailer then FOFO_ID is retailerId else it is userid as normal user's wont have retailer id. 
116
			//if role is retailer then FOFO_ID is retailerId else it is userid as normal user's wont have retailer id. 
102
			String emailId = googleTokenUtil.getEmailId(token);
117
			String emailId = googleTokenUtil.getEmailId(token);
Line 119... Line 134...
119
			if(user != null){
134
			if(user != null){
120
				fofoDetails.setFofoId(user.getId());
135
				fofoDetails.setFofoId(user.getId());
121
				try {
136
				try {
122
					List<UserRole> userRoles = userRoleRepository.selectByUserId(user.getId());
137
					List<UserRole> userRoles = userRoleRepository.selectByUserId(user.getId());
123
					for(int index = 0; index < userRoles.size(); index++){
138
					for(int index = 0; index < userRoles.size(); index++){
124
						roleTypes.add(userRoles.get(index).getRoleType());
139
						roleIds.add(userRoles.get(index).getRoleId());
125
					}
140
					}
-
 
141
					List<Role> roles = roleRepository.selectByIds(roleIds);
-
 
142
					for(Role role : roles) {
126
					if(roleTypes.contains(RoleType.RETAILER)) {
143
						if(role.getName().equals(RoleType.RETAILER.toString())) {
127
						UserAccount userAccounts = userAccountRepository.selectByUserIdType(user.getId(), AccountType.saholic);
144
							UserAccount userAccounts = userAccountRepository.selectByUserIdType(user.getId(), AccountType.saholic);
128
						Retailer retailer = retailerRepository.selectById(userAccounts.getAccountKey());
145
							Retailer retailer = retailerRepository.selectById(userAccounts.getAccountKey());
129
						fofoDetails.setFofoId(retailer.getId());
146
							fofoDetails.setFofoId(retailer.getId());
130
						//fofoDetails.setFofo(retailer.isFofo());
147
							//fofoDetails.setFofo(retailer.isFofo());
-
 
148
						}
131
					}
149
					}
132
				} catch(ProfitMandiBusinessException pmbe) {
150
				} catch(ProfitMandiBusinessException pmbe) {
133
					LOGGER.error("Data Inconsistent", pmbe);
151
					LOGGER.error("Data Inconsistent", pmbe);
134
				}
152
				}
135
			}
153
			}
136
			String redirectUrl = Utils.getRedictUrlFromLogin(fofoDetails);
154
			String redirectUrl = null;
-
 
155
			
-
 
156
			Role roleRetailer = roleRepository.selectByName(RoleType.RETAILER.toString());
-
 
157
			Role roleFofo = roleRepository.selectByName(RoleType.RETAILER.toString());
-
 
158
			Role roleFofoAdmin = roleRepository.selectByName(RoleType.RETAILER.toString());
-
 
159
			
-
 
160
			if ((fofoDetails.getRoleIds().contains(roleRetailer.getId()) && fofoDetails.getRoleIds().contains(roleFofo.getId()) || (fofoDetails.getRoleIds().contains(roleFofoAdmin.getId())))) {
-
 
161
				redirectUrl = "/dashboard";
-
 
162
			} else {
-
 
163
				redirectUrl = "/login";
-
 
164
			}
-
 
165
			
137
			if(!redirectUrl.equals("/login")){
166
			if(!redirectUrl.equals("/login")){
138
				user.setLoginTimestamp(LocalDateTime.now());
167
				user.setLoginTimestamp(LocalDateTime.now());
139
				userRepository.persist(user);
168
				userRepository.persist(user);
140
				this.addCookiesToResponse(fofoDetails, request, response);
169
				this.addCookiesToResponse(fofoDetails, request, response);
141
				LOGGER.info("Requested token email_id is valid, user login to system, shoud be redirect to {}", redirectUrl);
170
				LOGGER.info("Requested token email_id is valid, user login to system, shoud be redirect to {}", redirectUrl);
Line 151... Line 180...
151
			return "response";
180
			return "response";
152
		}
181
		}
153
	}
182
	}
154
	
183
	
155
	private void addCookiesToResponse(LoginDetails fofoDetails, HttpServletRequest request, HttpServletResponse response) {
184
	private void addCookiesToResponse(LoginDetails fofoDetails, HttpServletRequest request, HttpServletResponse response) {
156
		List<String> roleNames = new ArrayList<>();
185
		List<String> roleIds = new ArrayList<>();
157
		
186
		
158
		for(RoleType roleType : fofoDetails.getRoleTypes()) {
187
		for(int roleId : fofoDetails.getRoleIds()) {
159
			roleNames.add(roleType.toString());
188
			roleIds.add(String.valueOf(roleId));
160
		}
189
		}
161
		Cookie cookieRoleNames = new Cookie(ProfitMandiConstants.ROLE_NAMES, String.join(",", roleNames));
190
		Cookie cookieRoleIds = new Cookie(ProfitMandiConstants.ROLE_IDS, String.join(",", roleIds));
162
		cookieRoleNames.setDomain(request.getServerName());
191
		cookieRoleIds.setDomain(request.getServerName());
163
		cookieRoleNames.setPath(request.getContextPath());
192
		cookieRoleIds.setPath(request.getContextPath());
164
		
193
		
165
		Cookie cookieFofoId = new Cookie(ProfitMandiConstants.FOFO_ID, String.valueOf(fofoDetails.getFofoId()));
194
		Cookie cookieFofoId = new Cookie(ProfitMandiConstants.FOFO_ID, String.valueOf(fofoDetails.getFofoId()));
166
		cookieFofoId.setDomain(request.getServerName());
195
		cookieFofoId.setDomain(request.getServerName());
167
		cookieFofoId.setPath(request.getContextPath());
196
		cookieFofoId.setPath(request.getContextPath());
168
		
197
		
Line 170... Line 199...
170
		cookieEmailId.setDomain(request.getServerName());
199
		cookieEmailId.setDomain(request.getServerName());
171
		cookieEmailId.setPath(request.getContextPath());
200
		cookieEmailId.setPath(request.getContextPath());
172
 
201
 
173
		response.addCookie(cookieFofoId);
202
		response.addCookie(cookieFofoId);
174
		response.addCookie(cookieEmailId);
203
		response.addCookie(cookieEmailId);
175
		response.addCookie(cookieRoleNames);
204
		response.addCookie(cookieRoleIds);
176
	}
205
	}
177
	
206
	
178
	@RequestMapping(value = "/logout", method = RequestMethod.GET)
207
	@RequestMapping(value = "/logout", method = RequestMethod.GET)
179
	public String logout(HttpServletRequest request, @ModelAttribute("model") ModelMap model, HttpServletResponse response) throws Exception{
208
	public String logout(HttpServletRequest request, @ModelAttribute("model") ModelMap model, HttpServletResponse response) throws Exception{
180
		try{
209
		try{