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,361 +1,35 @@ <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" 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"> <!-- The base folder is used to specify the root location of your Gitblit data. ${baseFolder}/gitblit.properties ${baseFolder}/users.conf ${baseFolder}/projects.conf ${baseFolder}/robots.txt ${baseFolder}/git ${baseFolder}/groovy ${baseFolder}/groovy/grape ${baseFolder}/proposals By default, this location is WEB-INF/data. It is recommended to set this path to a location outside your webapps folder that is writable by your servlet container. Gitblit will copy the WEB-INF/data files to that location for you when it restarts. This approach makes upgrading simpler. All you have to do is set this parameter for the new release and then review the defaults for any new settings. Settings are always versioned with a SINCE x.y.z attribute and also noted in the release changelog. --> <env-entry> <description>The base folder is used to specify the root location of your Gitblit data.</description> <env-entry-name>baseFolder</env-entry-name> <env-entry-type>java.lang.String</env-entry-type> <env-entry-value>${contextFolder}/WEB-INF/data</env-entry-value> </env-entry> <!-- 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> <?xml version="1.0" encoding="UTF-8"?> <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_3_0.xsd"> <!-- The base folder is used to specify the root location of your Gitblit data. ${baseFolder}/gitblit.properties ${baseFolder}/users.conf ${baseFolder}/projects.conf ${baseFolder}/robots.txt ${baseFolder}/git ${baseFolder}/groovy ${baseFolder}/groovy/grape ${baseFolder}/proposals By default, this location is WEB-INF/data. It is recommended to set this path to a location outside your webapps folder that is writable by your servlet container. Gitblit will copy the WEB-INF/data files to that location for you when it restarts. This approach makes upgrading simpler. All you have to do is set this parameter for the new release and then review the defaults for any new settings. Settings are always versioned with a SINCE x.y.z attribute and also noted in the release changelog. --> <env-entry> <description>The base folder is used to specify the root location of your Gitblit data.</description> <env-entry-name>baseFolder</env-entry-name> <env-entry-type>java.lang.String</env-entry-type> <env-entry-value>${contextFolder}/WEB-INF/data</env-entry-value> </env-entry> <!-- Gitblit Displayname --> <display-name>Gitblit - @gb.version@</display-name> </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; } }