src/main/java/WEB-INF/beans.xml | ●●●●● patch | view | raw | blame | history | |
src/main/java/WEB-INF/web.xml | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/gitblit/Constants.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/gitblit/DaggerModule.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/gitblit/dagger/DaggerContext.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/gitblit/servlet/GitblitContext.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/gitblit/servlet/InjectionContextListener.java | ●●●●● patch | view | raw | blame | history |
src/main/java/WEB-INF/beans.xml
New file @@ -0,0 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd"> <!-- This file is necessary for CDI to work on JEE6 containers --> </beans> src/main/java/WEB-INF/web.xml
@@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_3_0.xsd"> <!-- The base folder is used to specify the root location of your Gitblit data. @@ -31,331 +31,5 @@ <!-- Gitblit Displayname --> <display-name>Gitblit - @gb.version@</display-name> <!-- Gitblit Context Listener --><!-- STRIP <listener> <listener-class>com.gitblit.servlet.GitblitContext</listener-class> </listener>STRIP --> <!-- Git Servlet <url-pattern> MUST match: * GitFilter * com.gitblit.Constants.GIT_PATH * Wicket Filter ignorePaths parameter --> <servlet> <servlet-name>GitServlet</servlet-name> <servlet-class>com.gitblit.servlet.GitServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>GitServlet</servlet-name> <url-pattern>/git/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>GitServlet</servlet-name> <url-pattern>/r/*</url-pattern> </servlet-mapping> <!-- SparkleShare Invite Servlet <url-pattern> MUST match: * com.gitblit.Constants.SPARKLESHARE_INVITE_PATH * Wicket Filter ignorePaths parameter --> <servlet> <servlet-name>SparkleShareInviteServlet</servlet-name> <servlet-class>com.gitblit.servlet.SparkleShareInviteServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>SparkleShareInviteServlet</servlet-name> <url-pattern>/sparkleshare/*</url-pattern> </servlet-mapping> <!-- Syndication Servlet <url-pattern> MUST match: * SyndicationFilter * com.gitblit.Constants.SYNDICATION_PATH * Wicket Filter ignorePaths parameter --> <servlet> <servlet-name>SyndicationServlet</servlet-name> <servlet-class>com.gitblit.servlet.SyndicationServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>SyndicationServlet</servlet-name> <url-pattern>/feed/*</url-pattern> </servlet-mapping> <!-- Zip Servlet <url-pattern> MUST match: * ZipServlet * com.gitblit.Constants.ZIP_PATH * Wicket Filter ignorePaths parameter --> <servlet> <servlet-name>ZipServlet</servlet-name> <servlet-class>com.gitblit.servlet.DownloadZipServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>ZipServlet</servlet-name> <url-pattern>/zip/*</url-pattern> </servlet-mapping> <!-- Federation Servlet <url-pattern> MUST match: * com.gitblit.Constants.FEDERATION_PATH * Wicket Filter ignorePaths parameter --> <servlet> <servlet-name>FederationServlet</servlet-name> <servlet-class>com.gitblit.servlet.FederationServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>FederationServlet</servlet-name> <url-pattern>/federation/*</url-pattern> </servlet-mapping> <!-- Rpc Servlet <url-pattern> MUST match: * com.gitblit.Constants.RPC_PATH * Wicket Filter ignorePaths parameter --> <servlet> <servlet-name>RpcServlet</servlet-name> <servlet-class>com.gitblit.servlet.RpcServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>RpcServlet</servlet-name> <url-pattern>/rpc/*</url-pattern> </servlet-mapping> <!-- Raw Servlet <url-pattern> MUST match: * RawFilter * com.gitblit.Constants.RAW_PATH * Wicket Filter ignorePaths parameter --> <servlet> <servlet-name>RawServlet</servlet-name> <servlet-class>com.gitblit.servlet.RawServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>RawServlet</servlet-name> <url-pattern>/raw/*</url-pattern> </servlet-mapping> <!-- Pages Servlet <url-pattern> MUST match: * PagesFilter * com.gitblit.Constants.PAGES_PATH * Wicket Filter ignorePaths parameter --> <servlet> <servlet-name>PagesServlet</servlet-name> <servlet-class>com.gitblit.servlet.PagesServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>PagesServlet</servlet-name> <url-pattern>/pages/*</url-pattern> </servlet-mapping> <!-- Logo Servlet <url-pattern> MUST match: * Wicket Filter ignorePaths parameter --> <servlet> <servlet-name>LogoServlet</servlet-name> <servlet-class>com.gitblit.servlet.LogoServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>LogoServlet</servlet-name> <url-pattern>/logo.png</url-pattern> </servlet-mapping> <!-- PT Servlet <url-pattern> MUST match: * Wicket Filter ignorePaths parameter --> <servlet> <servlet-name>PtServlet</servlet-name> <servlet-class>com.gitblit.servlet.PtServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>PtServlet</servlet-name> <url-pattern>/pt</url-pattern> </servlet-mapping> <!-- Branch Graph Servlet <url-pattern> MUST match: * Wicket Filter ignorePaths parameter --> <servlet> <servlet-name>BranchGraphServlet</servlet-name> <servlet-class>com.gitblit.servlet.BranchGraphServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>BranchGraphServlet</servlet-name> <url-pattern>/graph/*</url-pattern> </servlet-mapping> <!-- Robots.txt Servlet <url-pattern> MUST match: * Wicket Filter ignorePaths parameter --> <servlet> <servlet-name>RobotsTxtServlet</servlet-name> <servlet-class>com.gitblit.servlet.RobotsTxtServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>RobotsTxtServlet</servlet-name> <url-pattern>/robots.txt</url-pattern> </servlet-mapping> <filter> <filter-name>ProxyFilter</filter-name> <filter-class>com.gitblit.servlet.ProxyFilter</filter-class> </filter> <filter-mapping> <filter-name>ProxyFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- Git Access Restriction Filter <url-pattern> MUST match: * GitServlet * com.gitblit.Constants.GIT_PATH * Wicket Filter ignorePaths parameter --> <filter> <filter-name>GitFilter</filter-name> <filter-class>com.gitblit.servlet.GitFilter</filter-class> </filter> <filter-mapping> <filter-name>GitFilter</filter-name> <url-pattern>/git/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>GitFilter</filter-name> <url-pattern>/r/*</url-pattern> </filter-mapping> <!-- Syndication Restriction Filter <url-pattern> MUST match: * SyndicationServlet * com.gitblit.Constants.SYNDICATION_PATH * Wicket Filter ignorePaths parameter --> <filter> <filter-name>SyndicationFilter</filter-name> <filter-class>com.gitblit.servlet.SyndicationFilter</filter-class> </filter> <filter-mapping> <filter-name>SyndicationFilter</filter-name> <url-pattern>/feed/*</url-pattern> </filter-mapping> <!-- Download Zip Restriction Filter <url-pattern> MUST match: * DownloadZipServlet * com.gitblit.Constants.ZIP_PATH * Wicket Filter ignorePaths parameter --> <filter> <filter-name>ZipFilter</filter-name> <filter-class>com.gitblit.servlet.DownloadZipFilter</filter-class> </filter> <filter-mapping> <filter-name>ZipFilter</filter-name> <url-pattern>/zip/*</url-pattern> </filter-mapping> <!-- Rpc Restriction Filter <url-pattern> MUST match: * RpcServlet * com.gitblit.Constants.RPC_PATH * Wicket Filter ignorePaths parameter --> <filter> <filter-name>RpcFilter</filter-name> <filter-class>com.gitblit.servlet.RpcFilter</filter-class> </filter> <filter-mapping> <filter-name>RpcFilter</filter-name> <url-pattern>/rpc/*</url-pattern> </filter-mapping> <!-- Branch Restriction Filter <url-pattern> MUST match: * RawServlet * com.gitblit.Constants.BRANCH_PATH * Wicket Filter ignorePaths parameter --> <filter> <filter-name>RawFilter</filter-name> <filter-class>com.gitblit.servlet.RawFilter</filter-class> </filter> <filter-mapping> <filter-name>RawFilter</filter-name> <url-pattern>/raw/*</url-pattern> </filter-mapping> <!-- Pages Restriction Filter <url-pattern> MUST match: * PagesServlet * com.gitblit.Constants.PAGES_PATH * Wicket Filter ignorePaths parameter --> <filter> <filter-name>PagesFilter</filter-name> <filter-class>com.gitblit.servlet.PagesFilter</filter-class> </filter> <filter-mapping> <filter-name>PagesFilter</filter-name> <url-pattern>/pages/*</url-pattern> </filter-mapping> <filter> <filter-name>EnforceAuthenticationFilter</filter-name> <filter-class>com.gitblit.servlet.EnforceAuthenticationFilter</filter-class> </filter> <filter-mapping> <filter-name>EnforceAuthenticationFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- Wicket Filter --> <filter> <filter-name>wicketFilter</filter-name> <filter-class> com.gitblit.wicket.GitblitWicketFilter </filter-class> <init-param> <param-name>ignorePaths</param-name> <!-- Paths should match * SyndicationFilter <url-pattern> * SyndicationServlet <url-pattern> * com.gitblit.Constants.SYNDICATION_PATH * GitFilter <url-pattern> * GitServlet <url-pattern> * com.gitblit.Constants.GIT_PATH * SparkleshareInviteServlet <url-pattern> * com.gitblit.Constants.SPARKLESHARE_INVITE_PATH * Zipfilter <url-pattern> * ZipServlet <url-pattern> * com.gitblit.Constants.ZIP_PATH * FederationServlet <url-pattern> * RpcFilter <url-pattern> * RpcServlet <url-pattern> * RawFilter <url-pattern> * RawServlet <url-pattern> * PagesFilter <url-pattern> * PagesServlet <url-pattern> * com.gitblit.Constants.PAGES_PATH --> <param-value>r/,git/,pt,feed/,zip/,federation/,rpc/,raw/,pages/,robots.txt,logo.png,graph/,sparkleshare/</param-value> </init-param> </filter> <filter-mapping> <filter-name>wicketFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app> src/main/java/com/gitblit/Constants.java
@@ -70,6 +70,8 @@ public static final String RAW_PATH = "/raw/"; public static final String PT_PATH = "/pt"; public static final String BRANCH_GRAPH_PATH = "/graph/"; public static final String BORDER = "*****************************************************************"; src/main/java/com/gitblit/DaggerModule.java
@@ -34,12 +34,33 @@ import com.gitblit.manager.RepositoryManager; import com.gitblit.manager.RuntimeManager; import com.gitblit.manager.UserManager; import com.gitblit.servlet.BranchGraphServlet; import com.gitblit.servlet.DownloadZipFilter; import com.gitblit.servlet.DownloadZipServlet; import com.gitblit.servlet.EnforceAuthenticationFilter; import com.gitblit.servlet.FederationServlet; import com.gitblit.servlet.GitFilter; import com.gitblit.servlet.GitServlet; import com.gitblit.servlet.LogoServlet; import com.gitblit.servlet.PagesFilter; import com.gitblit.servlet.PagesServlet; import com.gitblit.servlet.ProxyFilter; import com.gitblit.servlet.PtServlet; import com.gitblit.servlet.RawFilter; import com.gitblit.servlet.RawServlet; import com.gitblit.servlet.RobotsTxtServlet; import com.gitblit.servlet.RpcFilter; import com.gitblit.servlet.RpcServlet; import com.gitblit.servlet.SparkleShareInviteServlet; import com.gitblit.servlet.SyndicationFilter; import com.gitblit.servlet.SyndicationServlet; import com.gitblit.transport.ssh.FileKeyManager; import com.gitblit.transport.ssh.IPublicKeyManager; import com.gitblit.transport.ssh.MemoryKeyManager; import com.gitblit.transport.ssh.NullKeyManager; import com.gitblit.utils.StringUtils; import com.gitblit.wicket.GitBlitWebApp; import com.gitblit.wicket.GitblitWicketFilter; import dagger.Module; import dagger.Provides; @@ -70,7 +91,30 @@ IGitblit.class, // the Gitblit Wicket app GitBlitWebApp.class GitBlitWebApp.class, // filters & servlets GitServlet.class, GitFilter.class, RawServlet.class, RawFilter.class, PagesServlet.class, PagesFilter.class, RpcServlet.class, RpcFilter.class, DownloadZipServlet.class, DownloadZipFilter.class, SyndicationServlet.class, SyndicationFilter.class, FederationServlet.class, SparkleShareInviteServlet.class, BranchGraphServlet.class, RobotsTxtServlet.class, LogoServlet.class, PtServlet.class, ProxyFilter.class, EnforceAuthenticationFilter.class, GitblitWicketFilter.class } ) public class DaggerModule { @@ -212,4 +256,289 @@ federationManager, gitblit); } // // @Provides @Singleton GitblitWicketFilter provideGitblitWicketFilter(GitBlitWebApp webapp) { // return new GitblitWicketFilter(webapp); // } // // @Provides GitServlet provideGitServlet(IGitblit gitblit) { // return new GitServlet(gitblit); // } // // @Provides GitFilter provideGitFilter( // IRuntimeManager runtimeManager, // IUserManager userManager, // IAuthenticationManager authenticationManager, // IRepositoryManager repositoryManager, // IFederationManager federationManager) { // // return new GitFilter( // runtimeManager, // userManager, // authenticationManager, // repositoryManager, // federationManager); // } // // @Provides @Singleton PagesServlet providePagesServlet( // IRuntimeManager runtimeManager, // IRepositoryManager repositoryManager) { // // return new PagesServlet(runtimeManager, repositoryManager); // } // // @Provides @Singleton PagesFilter providePagesFilter( // IRuntimeManager runtimeManager, // IAuthenticationManager authenticationManager, // IRepositoryManager repositoryManager) { // // return new PagesFilter( // runtimeManager, // authenticationManager, // repositoryManager); // } // // @Provides @Singleton RpcServlet provideRpcServlet(IGitblit gitblit) { // return new RpcServlet(gitblit); // } // // @Provides @Singleton RpcFilter provideRpcFilter( // IRuntimeManager runtimeManager, // IAuthenticationManager authenticationManager) { // // return new RpcFilter(runtimeManager, authenticationManager); // } // // @Provides @Singleton DownloadZipServlet provideDownloadZipServlet( // IRuntimeManager runtimeManager, // IRepositoryManager repositoryManager) { // // return new DownloadZipServlet(runtimeManager, repositoryManager); // } // // @Provides @Singleton DownloadZipFilter provideDownloadZipFilter( // IRuntimeManager runtimeManager, // IAuthenticationManager authenticationManager, // IRepositoryManager repositoryManager) { // // return new DownloadZipFilter( // runtimeManager, // authenticationManager, // repositoryManager); // } // // @Provides @Singleton SyndicationServlet provideSyndicationServlet( // IRuntimeManager runtimeManager, // IRepositoryManager repositoryManager, // IProjectManager projectManager) { // // return new SyndicationServlet( // runtimeManager, // repositoryManager, // projectManager); // } // // @Provides @Singleton SyndicationFilter provideSyndicationFilter( // IRuntimeManager runtimeManager, // IAuthenticationManager authenticationManager, // IRepositoryManager repositoryManager, // IProjectManager projectManager) { // // return new SyndicationFilter( // runtimeManager, // authenticationManager, // repositoryManager, // projectManager); // } // // @Provides @Singleton FederationServlet provideFederationServlet( // IRuntimeManager runtimeManager, // IUserManager userManager, // IRepositoryManager repositoryManager, // IFederationManager federationManager) { // // return new FederationServlet( // runtimeManager, // userManager, // repositoryManager, // federationManager); // } // // @Provides @Singleton SparkleShareInviteServlet provideSparkleshareInviteServlet( // IRuntimeManager runtimeManager, // IUserManager userManager, // IAuthenticationManager authenticationManager, // IRepositoryManager repositoryManager) { // // return new SparkleShareInviteServlet( // runtimeManager, // userManager, // authenticationManager, // repositoryManager); // } // // @Provides @Singleton BranchGraphServlet provideBranchGraphServlet( // IRuntimeManager runtimeManager, // IRepositoryManager repositoryManager) { // // return new BranchGraphServlet(runtimeManager, repositoryManager); // } // // @Provides @Singleton RobotsTxtServlet provideRobotsTxtServlet(IRuntimeManager runtimeManager) { // return new RobotsTxtServlet(runtimeManager); // } // // @Provides @Singleton LogoServlet provideLogoServlet(IRuntimeManager runtimeManager) { // return new LogoServlet(runtimeManager); // } // // @Provides @Singleton EnforceAuthenticationFilter provideEnforceAuthenticationFilter( // IRuntimeManager runtimeManager, // IAuthenticationManager authenticationManager) { // // return new EnforceAuthenticationFilter(runtimeManager, authenticationManager); // } @Provides @Singleton GitblitWicketFilter provideGitblitWicketFilter(GitBlitWebApp webapp) { return new GitblitWicketFilter(); } @Provides GitServlet provideGitServlet(IGitblit gitblit) { return new GitServlet(); } @Provides GitFilter provideGitFilter( IRuntimeManager runtimeManager, IUserManager userManager, IAuthenticationManager authenticationManager, IRepositoryManager repositoryManager, IFederationManager federationManager) { return new GitFilter(); } @Provides @Singleton RawServlet provideRawServlet( IRuntimeManager runtimeManager, IRepositoryManager repositoryManager) { return new RawServlet(); } @Provides @Singleton RawFilter provideRawFilter( IRuntimeManager runtimeManager, IAuthenticationManager authenticationManager, IRepositoryManager repositoryManager) { return new RawFilter(); } @Provides @Singleton PagesServlet providePagesServlet( IRuntimeManager runtimeManager, IRepositoryManager repositoryManager) { return new PagesServlet(); } @Provides @Singleton PagesFilter providePagesFilter( IRuntimeManager runtimeManager, IAuthenticationManager authenticationManager, IRepositoryManager repositoryManager) { return new PagesFilter(); } @Provides @Singleton RpcServlet provideRpcServlet(IGitblit gitblit) { return new RpcServlet(); } @Provides @Singleton RpcFilter provideRpcFilter( IRuntimeManager runtimeManager, IAuthenticationManager authenticationManager) { return new RpcFilter(); } @Provides @Singleton DownloadZipServlet provideDownloadZipServlet( IRuntimeManager runtimeManager, IRepositoryManager repositoryManager) { return new DownloadZipServlet(); } @Provides @Singleton DownloadZipFilter provideDownloadZipFilter( IRuntimeManager runtimeManager, IAuthenticationManager authenticationManager, IRepositoryManager repositoryManager) { return new DownloadZipFilter(); } @Provides @Singleton SyndicationServlet provideSyndicationServlet( IRuntimeManager runtimeManager, IRepositoryManager repositoryManager, IProjectManager projectManager) { return new SyndicationServlet(); } @Provides @Singleton SyndicationFilter provideSyndicationFilter( IRuntimeManager runtimeManager, IAuthenticationManager authenticationManager, IRepositoryManager repositoryManager, IProjectManager projectManager) { return new SyndicationFilter(); } @Provides @Singleton FederationServlet provideFederationServlet( IRuntimeManager runtimeManager, IUserManager userManager, IRepositoryManager repositoryManager, IFederationManager federationManager) { return new FederationServlet(); } @Provides @Singleton SparkleShareInviteServlet provideSparkleshareInviteServlet( IRuntimeManager runtimeManager, IUserManager userManager, IAuthenticationManager authenticationManager, IRepositoryManager repositoryManager) { return new SparkleShareInviteServlet(); } @Provides @Singleton BranchGraphServlet provideBranchGraphServlet( IRuntimeManager runtimeManager, IRepositoryManager repositoryManager) { return new BranchGraphServlet(); } @Provides @Singleton RobotsTxtServlet provideRobotsTxtServlet(IRuntimeManager runtimeManager) { return new RobotsTxtServlet(); } @Provides @Singleton LogoServlet provideLogoServlet(IRuntimeManager runtimeManager) { return new LogoServlet(); } @Provides @Singleton PtServlet providePtServlet(IRuntimeManager runtimeManager) { return new PtServlet(); } @Provides @Singleton ProxyFilter provideProxyFilter( IRuntimeManager runtimeManager, IAuthenticationManager authenticationManager) { return new ProxyFilter(); } @Provides @Singleton EnforceAuthenticationFilter provideEnforceAuthenticationFilter( IRuntimeManager runtimeManager, IAuthenticationManager authenticationManager) { return new EnforceAuthenticationFilter(); } } src/main/java/com/gitblit/dagger/DaggerContext.java
@@ -17,10 +17,11 @@ import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.gitblit.servlet.InjectionContextListener; import dagger.ObjectGraph; @@ -31,7 +32,7 @@ * @author James Moger * */ public abstract class DaggerContext implements ServletContextListener { public abstract class DaggerContext extends InjectionContextListener { public static final String INJECTOR_NAME = ObjectGraph.class.getName(); @@ -58,6 +59,23 @@ return (ObjectGraph) o; } /** * Instantiates an object. * * @param clazz * @return the object */ @Override protected <X> X instantiate(ServletContext context, Class<X> clazz) { try { ObjectGraph injector = getInjector(context); return injector.get(clazz); } catch (Throwable t) { logger.error(null, t); } return null; } @Override public final void contextDestroyed(ServletContextEvent contextEvent) { ServletContext context = contextEvent.getServletContext(); src/main/java/com/gitblit/servlet/GitblitContext.java
@@ -23,13 +23,15 @@ import java.io.OutputStream; import java.text.MessageFormat; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.annotation.WebListener; import com.gitblit.Constants; import com.gitblit.DaggerModule; @@ -52,20 +54,22 @@ import com.gitblit.transport.ssh.IPublicKeyManager; import com.gitblit.utils.ContainerUtils; import com.gitblit.utils.StringUtils; import com.gitblit.wicket.GitblitWicketFilter; import dagger.ObjectGraph; /** * This class is the main entry point for the entire webapp. It is a singleton * created manually by Gitblit GO or dynamically by the WAR/Express servlet * container. This class instantiates and starts all managers. Servlets and * filters are instantiated defined in web.xml and instantiated by the servlet * container, but those servlets and filters use Dagger to manually inject their * dependencies. * container. This class instantiates and starts all managers. * * Servlets and filters are injected which allows Gitblit to be completely * code-driven. * * @author James Moger * */ @WebListener public class GitblitContext extends DaggerContext { private static GitblitContext gitblit; @@ -120,21 +124,10 @@ } /** * Configure Gitblit from the web.xml, if no configuration has already been * specified. * * @see ServletContextListener.contextInitialize(ServletContextEvent) */ @Override public final void contextInitialized(ServletContextEvent contextEvent) { ServletContext context = contextEvent.getServletContext(); configureContext(context); } /** * Prepare runtime settings and start all manager instances. */ protected void configureContext(ServletContext context) { @Override protected void beforeServletInjection(ServletContext context) { ObjectGraph injector = getInjector(context); // create the runtime settings object @@ -237,6 +230,41 @@ } /** * Instantiate and inject all filters and servlets into the container using * the servlet 3 specification. */ @Override protected void injectServlets(ServletContext context) { // access restricted servlets serve(context, Constants.R_PATH, GitServlet.class, GitFilter.class); serve(context, Constants.GIT_PATH, GitServlet.class, GitFilter.class); serve(context, Constants.RAW_PATH, RawServlet.class, RawFilter.class); serve(context, Constants.PAGES, PagesServlet.class, PagesFilter.class); serve(context, Constants.RPC_PATH, RpcServlet.class, RpcFilter.class); serve(context, Constants.ZIP_PATH, DownloadZipServlet.class, DownloadZipFilter.class); serve(context, Constants.SYNDICATION_PATH, SyndicationServlet.class, SyndicationFilter.class); // servlets serve(context, Constants.FEDERATION_PATH, FederationServlet.class); serve(context, Constants.SPARKLESHARE_INVITE_PATH, SparkleShareInviteServlet.class); serve(context, Constants.BRANCH_GRAPH_PATH, BranchGraphServlet.class); serve(context, Constants.PT_PATH, PtServlet.class); file(context, "/robots.txt", RobotsTxtServlet.class); file(context, "/logo.png", LogoServlet.class); // global filters filter(context, "/*", ProxyFilter.class, null); filter(context, "/*", EnforceAuthenticationFilter.class, null); // Wicket String toIgnore = StringUtils.flattenStrings(getRegisteredPaths(), ","); Map<String, String> params = new HashMap<String, String>(); params.put(GitblitWicketFilter.FILTER_MAPPING_PARAM, "/*"); params.put(GitblitWicketFilter.IGNORE_PATHS_PARAM, toIgnore); filter(context, "/*", GitblitWicketFilter.class, params); } /** * Gitblit is being shutdown either because the servlet container is * shutting down or because the servlet container is re-deploying Gitblit. */ src/main/java/com/gitblit/servlet/InjectionContextListener.java
New file @@ -0,0 +1,241 @@ /* * Copyright 2014 gitblit.com. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.gitblit.servlet; import java.util.ArrayList; import java.util.EnumSet; import java.util.List; import java.util.Map; import javax.servlet.DispatcherType; import javax.servlet.Filter; import javax.servlet.FilterRegistration; import javax.servlet.Servlet; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.ServletRegistration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Injection context listener instantiates and injects servlets, filters, and * anything else you might want into a servlet context. This class provides * convenience methods for servlet & filter registration and also tracks * registered paths. * * @author James Moger * */ public abstract class InjectionContextListener implements ServletContextListener { protected final Logger logger = LoggerFactory.getLogger(getClass()); private final List<String> registeredPaths = new ArrayList<String>(); protected final List<String> getRegisteredPaths() { return registeredPaths; } /** * Hook for subclasses to manipulate context initialization before * standard initialization procedure. * * @param context */ protected void beforeServletInjection(ServletContext context) { // NOOP } /** * Hook for subclasses to instantiate and inject servlets and filters * into the servlet context. * * @param context */ protected abstract void injectServlets(ServletContext context); /** * Hook for subclasses to manipulate context initialization after * servlet registration. * * @param context */ protected void afterServletInjection(ServletContext context) { // NOOP } /** * Configure Gitblit from the web.xml, if no configuration has already been * specified. * * @see ServletContextListener.contextInitialize(ServletContextEvent) */ @Override public final void contextInitialized(ServletContextEvent contextEvent) { ServletContext context = contextEvent.getServletContext(); beforeServletInjection(context); injectServlets(context); afterServletInjection(context); } /** * Registers a file path. * * @param context * @param file * @param servletClass */ protected void file(ServletContext context, String file, Class<? extends Servlet> servletClass) { file(context, file, servletClass, null); } /** * Registers a file path with init parameters. * * @param context * @param file * @param servletClass * @param initParams */ protected void file(ServletContext context, String file, Class<? extends Servlet> servletClass, Map<String, String> initParams) { Servlet servlet = instantiate(context, servletClass); ServletRegistration.Dynamic d = context.addServlet(sanitize(servletClass.getSimpleName() + file), servlet); d.addMapping(file); if (initParams != null) { d.setInitParameters(initParams); } registeredPaths.add(file); } /** * Serves a path (trailing wildcard will be appended). * * @param context * @param route * @param servletClass */ protected void serve(ServletContext context, String route, Class<? extends Servlet> servletClass) { serve(context, route, servletClass, (Class<Filter>) null); } /** * Serves a path (trailing wildcard will be appended) with init parameters. * * @param context * @param route * @param servletClass * @param initParams */ protected void serve(ServletContext context, String route, Class<? extends Servlet> servletClass, Map<String, String> initParams) { Servlet servlet = instantiate(context, servletClass); ServletRegistration.Dynamic d = context.addServlet(sanitize(servletClass.getSimpleName() + route), servlet); d.addMapping(route + "*"); if (initParams != null) { d.setInitParameters(initParams); } registeredPaths.add(route); } /** * Serves a path (trailing wildcard will be appended) and also maps a filter * to that path. * * @param context * @param route * @param servletClass * @param filterClass */ protected void serve(ServletContext context, String route, Class<? extends Servlet> servletClass, Class<? extends Filter> filterClass) { Servlet servlet = instantiate(context, servletClass); ServletRegistration.Dynamic d = context.addServlet(sanitize(servletClass.getSimpleName() + route), servlet); d.addMapping(route + "*"); if (filterClass != null) { filter(context, route + "*", filterClass); } registeredPaths.add(route); } /** * Registers a path filter. * * @param context * @param route * @param filterClass */ protected void filter(ServletContext context, String route, Class<? extends Filter> filterClass) { filter(context, route, filterClass, null); } /** * Registers a path filter with init parameters. * * @param context * @param route * @param filterClass * @param initParams */ protected void filter(ServletContext context, String route, Class<? extends Filter> filterClass, Map<String, String> initParams) { Filter filter = instantiate(context, filterClass); FilterRegistration.Dynamic d = context.addFilter(sanitize(filterClass.getSimpleName() + route), filter); d.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), true, route); if (initParams != null) { d.setInitParameters(initParams); } } /** * Limit the generated servlet/filter names to alpha-numeric values with a * handful of acceptable other characters. * * @param name * @return a sanitized name */ protected String sanitize(String name) { StringBuilder sb = new StringBuilder(); for (char c : name.toCharArray()) { if (Character.isLetterOrDigit(c)) { sb.append(c); } else if ('-' == c) { sb.append(c); } else if ('*' == c) { sb.append("all"); } else if ('.' == c) { sb.append('.'); } else { sb.append('_'); } } return sb.toString(); } /** * Instantiates an object. * * @param clazz * @return the object */ protected <X> X instantiate(ServletContext context, Class<X> clazz) { try { return clazz.newInstance(); } catch (Throwable t) { logger.error(null, t); } return null; } }