package com.thbs.repopro.accesscontrol;

import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLEncoder;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.web.AuthenticationEntryPoint;
//import org.springframework.security.web.DefaultRedirectStrategy;
import org.springframework.security.web.RedirectStrategy;
import org.springframework.security.web.access.ExceptionTranslationFilter;
public class CustomAuthenticationEntryPoint implements AuthenticationEntryPoint {
	static Logger log = Logger.getLogger(CustomAuthenticationEntryPoint.class
			.getName());

	public void commence(HttpServletRequest request,
			HttpServletResponse response, AuthenticationException authException)
			throws IOException, ServletException {
		System.out.println("inside 1");
		if (log.isDebugEnabled()) {
			System.out.println("Exception in log1"  +authException );
			log.debug("commence : begin ");
			System.out.println("inside log1");
		}
		Map<String, String[]> parameterMap = request.getParameterMap();
		RedirectStrategy redirectStrategy =  new RedirectStrategy() {
			
			
			@Override
			public void sendRedirect(HttpServletRequest arg0, HttpServletResponse arg1, String arg2) throws IOException {
				// TODO Auto-generated method stub
				
			}
		};
		String[] userName = parameterMap.get("userName");
        
		String token = "";
		if (((HttpServletRequest) request).getParameter("tokenName") != null) {
			token = ((HttpServletRequest) request).getParameter("tokenName");
			System.out.println("Exception in 2"  +authException );
			System.out.println("inside 2");
			
		} else if (((HttpServletRequest) request).getHeader("token") != null) {
 
			token = ((HttpServletRequest) request).getHeader("token");
			System.out.println("Exception in 3"  +authException );
			System.out.println("inside 3");

		}

		if (userName == null) {
			response.sendError(HttpServletResponse.SC_UNAUTHORIZED,
					"Unauthorized: Authentication token was either missing or invalid.");
			System.out.println("Exception in 4"  +authException );
			System.out.println("inside 4");
		} else if (userName[0].toString().equalsIgnoreCase("guest")
				&& !token.equalsIgnoreCase("")) {
			System.out.println("Exception in 5"  +authException );
			response.sendError(HttpServletResponse.SC_BAD_REQUEST,
					"Bad Request!");
			System.out.println("inside 5");
		} else {
			
			response.sendRedirect(request.getContextPath() + "/login?url="+URLEncoder.encode("dasdad", "UTF8"));
       /*	response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
		//	response.getWriter().println("Yo");
			PrintWriter writer = response.getWriter();
	        writer.println("HTTP Status 401 - " + authException.getMessage());
	        System.out.println("Exception in 6"  +authException );
			response.sendError(HttpServletResponse.SC_UNAUTHORIZED,
					"Unauthorized: Authentication token was either missing or invalid.");
			QueryStringPropagateRedirectStrategy dsd = new QueryStringPropagateRedirectStrategy();
			dsd.sendRedirect(request, response,"/login.html"  );*/
			//redirectStrategy.sendRedirect(request, response,"/login.html"  );
			/*response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
			return;*/
			//System.out.println("inside 6");
		}

		if (log.isDebugEnabled()) {
			log.debug("commence : end ");
			System.out.println("Exception in log2"  +authException );
			System.out.println("inside log2");
		}
	}
}