From 4362922ba00a22d9177df1731673b5fb4db03fb5 Mon Sep 17 00:00:00 2001
From: Roberto Sánchez <roberto.sanchez@curisit.net>
Date: Thu, 19 Dec 2013 17:58:11 +0000
Subject: [PATCH] #333 feature - Added first page with Bootstrap

---
 securis/src/main/java/net/curisit/securis/MainApp.java |   59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 56 insertions(+), 3 deletions(-)

diff --git a/securis/src/main/java/net/curisit/securis/MainApp.java b/securis/src/main/java/net/curisit/securis/MainApp.java
index 0cfe9b7..b8ae3b1 100644
--- a/securis/src/main/java/net/curisit/securis/MainApp.java
+++ b/securis/src/main/java/net/curisit/securis/MainApp.java
@@ -4,16 +4,22 @@
 
 import javax.inject.Inject;
 import javax.inject.Named;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.ext.ExceptionMapper;
+import javax.ws.rs.ext.Provider;
 
 import net.curisit.securis.ioc.RequestsModule;
 import net.curisit.securis.ioc.SecurisModule;
 
 import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.servlet.ErrorPageErrorHandler;
 import org.eclipse.jetty.servlet.FilterHolder;
 import org.eclipse.jetty.servlet.ServletContextHandler;
 import org.eclipse.jetty.servlet.ServletHolder;
 import org.jboss.resteasy.plugins.guice.GuiceResteasyBootstrapServletContextListener;
 import org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher;
+import org.jboss.resteasy.util.HttpResponseCodes;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -53,13 +59,25 @@
 		context.setContextPath("/");
 		context.addEventListener(injector.getInstance(GuiceResteasyBootstrapServletContextListener.class));
 
-		ServletHolder sh = new ServletHolder(HttpServletDispatcher.class);
 		context.setInitParameter("resteasy.role.based.security", "true");
+		context.setInitParameter("resteasy.providers", DefaultExceptionHandler.class.getName());
 		context.addFilter(new FilterHolder(injector.getInstance(AuthFilter.class)), "/*", null);
-		// context.addServlet(DefaultServlet.class, "/*");
-		context.addServlet(sh, "/*");
 
+		ServletHolder sh = new ServletHolder(HttpServletDispatcher.class);
+		// context.addServlet(DefaultServlet.class, "/*");
+		context.addServlet(sh, "/");
+		ErrorPageErrorHandler errorHandler = new ErrorPageErrorHandler();
+		context.setErrorHandler(errorHandler);
+		errorHandler.addErrorPage(HttpResponseCodes.SC_FORBIDDEN, "/login");
+		errorHandler.addErrorPage(HttpResponseCodes.SC_NOT_FOUND, "/");
+		errorHandler.addErrorPage(javax.ws.rs.NotFoundException.class, "/");
+		errorHandler.addErrorPage(javax.ws.rs.ForbiddenException.class, "/");
+		errorHandler.addErrorPage(javax.ws.rs.ForbiddenException.class.getCanonicalName(), "/");
+		errorHandler.addErrorPage(ErrorPageErrorHandler.GLOBAL_ERROR_PAGE, "/");
+
+		log.info("Error Handlers: " + context.getErrorHandler());
 		server.setHandler(context);
+
 		server.start();
 		server.join();
 		// rc.packages("net.curisit.securis.services", "org.codehaus.jackson.jaxrs");
@@ -68,4 +86,39 @@
 
 	}
 
+	/**
+	 * User: Nuwan.N.Bandara
+	 */
+	@Provider
+	public static class DefaultExceptionHandler implements ExceptionMapper<Exception> {
+
+		public DefaultExceptionHandler() {
+			log.info("Creating DefaultExceptionHandler ");
+		}
+
+		@Override
+		public Response toResponse(Exception e) {
+			// For simplicity I am preparing error xml by hand.
+			// Ideally we should create an ErrorResponse class to hold the error info.
+			StringBuilder response = new StringBuilder("<response>");
+			response.append("<status>ERROR</status>");
+			response.append("<message>" + e.getMessage() + "</message>");
+			response.append("</response>");
+			return Response.serverError().entity(response.toString()).type(MediaType.APPLICATION_XML).build();
+		}
+	}
+
 }
+
+/*
+ * Constraint constraint = new Constraint(); constraint.setName(Constraint.__FORM_AUTH);; constraint.setRoles(new String[]{"user","admin","moderator"}); constraint.setAuthenticate(true);
+ * 
+ * ConstraintMapping constraintMapping = new ConstraintMapping(); constraintMapping.setConstraint(constraint); constraintMapping.setPathSpec("/*");
+ * 
+ * ConstraintSecurityHandler securityHandler = new ConstraintSecurityHandler(); securityHandler.addConstraintMapping(constraintMapping); HashLoginService loginService = new HashLoginService(); loginService.putUser("username", new
+ * Password("password"), new String[] {"user"}); securityHandler.setLoginService(loginService);
+ * 
+ * FormAuthenticator authenticator = new FormAuthenticator("/login", "/login", false); securityHandler.setAuthenticator(authenticator);
+ * 
+ * context.setSecurityHandler(securityHandler);
+ */
\ No newline at end of file

--
Gitblit v1.3.2