Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
22107 ashik.ali 1
package com.spice.profitmandi.web.interceptor;
2
 
3
import java.util.HashSet;
4
import java.util.Set;
5
import java.util.function.Predicate;
6
 
7
import javax.servlet.http.HttpServletRequest;
8
import javax.servlet.http.HttpServletResponse;
9
 
23568 govind 10
import org.apache.logging.log4j.Logger;
11
import org.apache.logging.log4j.LogManager;
22107 ashik.ali 12
import org.springframework.beans.factory.annotation.Autowired;
13
import org.springframework.http.HttpStatus;
14
import org.springframework.http.MediaType;
15
import org.springframework.stereotype.Component;
16
import org.springframework.web.servlet.HandlerInterceptor;
17
import org.springframework.web.servlet.ModelAndView;
18
 
19
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
20
import com.spice.profitmandi.dao.enumuration.dtr.RoleType;
22139 amit.gupta 21
import com.spice.profitmandi.web.model.LoginDetails;
22107 ashik.ali 22
import com.spice.profitmandi.web.util.CookiesProcessor;
23
import com.spice.profitmandi.web.util.MVCResponseSender;
24
 
25
@Component
26
public class RoleInterceptor implements HandlerInterceptor {
27
 
23568 govind 28
	private static final Logger LOGGER = LogManager.getLogger(RoleInterceptor.class);
22107 ashik.ali 29
 
30
	private static final Set<String> REQUESTED_URI_PATTERNS = new HashSet<>();
31
	static{
32
		REQUESTED_URI_PATTERNS.add("/fofo");
22111 ashik.ali 33
		REQUESTED_URI_PATTERNS.add("/fofo/");
34
		REQUESTED_URI_PATTERNS.add("/fofo/-?[0-9]{1,10}/edit");
35
		REQUESTED_URI_PATTERNS.add("/fofo/-?[0-9]{1,10}/edit/");
22533 ashik.ali 36
		REQUESTED_URI_PATTERNS.add("/fofo/-?[0-9]{1,10}/file-display");
37
		REQUESTED_URI_PATTERNS.add("/fofo/-?[0-9]{1,10}/file-display/");
22107 ashik.ali 38
	}
39
 
40
	@Autowired
22927 ashik.ali 41
	private MVCResponseSender mvcResponseSender;
22107 ashik.ali 42
 
43
	@Autowired
22927 ashik.ali 44
	private CookiesProcessor cookiesProcessor;
22107 ashik.ali 45
 
46
	@Override
47
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object arg2, Exception arg3)
48
			throws Exception {
49
	}
50
 
51
	@Override
52
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object arg2, ModelAndView arg3)
53
			throws Exception {
54
		LOGGER.info("request is received after : "+request.getRequestURL().toString());
55
	}
56
 
57
	@Override
58
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception {
22109 ashik.ali 59
		LOGGER.info("request is received before uri : "+request.getRequestURI());
22107 ashik.ali 60
		LOGGER.info("Request method {}",request.getMethod());
61
		try {
22139 amit.gupta 62
			LoginDetails fofoDetails = cookiesProcessor.getCookiesObject(request);
22111 ashik.ali 63
			LOGGER.info(fofoDetails.toString());
22107 ashik.ali 64
			if(
65
				// condition start
66
				// first condition start
22139 amit.gupta 67
				(REQUESTED_URI_PATTERNS.stream().anyMatch(new Predicate<String>() {
22107 ashik.ali 68
					@Override
69
					public boolean test(String regexUriPattern) {
22533 ashik.ali 70
						LOGGER.info("requestedUri {} == predefinedPattern {} => {}", request.getRequestURI(), request.getContextPath() + regexUriPattern, request.getRequestURI().matches(request.getContextPath() + regexUriPattern));
22109 ashik.ali 71
						return request.getRequestURI().matches(request.getContextPath() + regexUriPattern);
22139 amit.gupta 72
					};
73
				})
22107 ashik.ali 74
				// first condition end
75
				&&
76
				// second condition start
22860 ashik.ali 77
				fofoDetails.getRoleTypes().contains(RoleType.FOFO_ADMIN)
22139 amit.gupta 78
				) 
79
				|| 
80
				(REQUESTED_URI_PATTERNS.stream().noneMatch((new Predicate<String>() {
81
					@Override
82
					public boolean test(String regexUriPattern) {
83
						return request.getRequestURI().matches(request.getContextPath() + regexUriPattern);
84
					};
85
				}))
86
				&&
22533 ashik.ali 87
				fofoDetails.getRoleTypes().contains(RoleType.FOFO)
22139 amit.gupta 88
				)
89
			) {
90
				return true;
91
			} else {
22111 ashik.ali 92
				LOGGER.error("Accessed Uri {} is forbidden", request.getRequestURI());
22107 ashik.ali 93
				response.setStatus(HttpStatus.FORBIDDEN.value());
94
				response.setContentType(MediaType.APPLICATION_JSON_VALUE);
95
				response.setCharacterEncoding("UTF-8");
96
				response.getWriter().write(mvcResponseSender.createResponseString("GE_1004", false, "/error"));
97
				response.getWriter().flush();
22111 ashik.ali 98
				return false;
22107 ashik.ali 99
			}
100
		} catch (ProfitMandiBusinessException e) {
101
			LOGGER.error("Requested session is expired", e);
102
			return false;
103
		}
104
	}
105
}