James Moger
2013-12-11 65d5bb3f1cbfb42be5a3c4aa077b7ab2504082af
Rollback to Servlet 2.5

Combining Dagger and Servlet 3 works really well on stock Tomcat and
Jetty but it is a troublesome combination on JEE containers with their
own ideas on how to instantiate classes. JBoss AS 7 has been
particularly nasty and it is just simpler to scaleback and stay with
Servlet 2.5 than it is to fight all permuations of containers.

Instead of using constructor DI, the servlets and filters each have an
inject(ObjectGaph) method which is automatically called during
initialization. Each servlet or filter is responsible for retrieving
the required dependency from the graph. The Dagger object graph is
created in the context listener and stuffed into the context as an
attribute.

Change-Id: Ib5714584fe73e2a6b9c6fda12af080a43356cbda
1 files renamed
2 files deleted
4 files added
23 files modified
1493 ■■■■ changed files
releases.moxie 1 ●●●● patch | view | raw | blame | history
src/main/java/WEB-INF/web.xml 273 ●●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/DaggerModule.java 179 ●●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/dagger/DaggerContext.java 27 ●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/dagger/DaggerFilter.java 47 ●●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/dagger/DaggerServlet.java 44 ●●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/dagger/DaggerWicketFilter.java 45 ●●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/git/GitServlet.java 49 ●●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/servlet/AccessRestrictionFilter.java 19 ●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/servlet/AuthenticationFilter.java 28 ●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/servlet/BranchGraphServlet.java 28 ●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/servlet/DownloadZipFilter.java 11 ●●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/servlet/DownloadZipServlet.java 22 ●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/servlet/EnforceAuthenticationFilter.java 28 ●●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/servlet/FederationServlet.java 28 ●●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/servlet/GitFilter.java 28 ●●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/servlet/GitServlet.java 112 ●●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/servlet/GitblitContext.java 68 ●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/servlet/InjectionContextListener.java 241 ●●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/servlet/JsonServlet.java 4 ●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/servlet/LogoServlet.java 14 ●●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/servlet/PagesFilter.java 10 ●●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/servlet/PagesServlet.java 23 ●●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/servlet/RobotsTxtServlet.java 14 ●●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/servlet/RpcFilter.java 19 ●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/servlet/RpcServlet.java 16 ●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/servlet/SparkleShareInviteServlet.java 32 ●●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/servlet/SyndicationFilter.java 25 ●●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/servlet/SyndicationServlet.java 28 ●●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/wicket/GitblitWicketFilter.java 30 ●●●● patch | view | raw | blame | history
releases.moxie
@@ -62,6 +62,7 @@
    - updated to Lucene 4.6.0
    - updated to BouncyCastle 1.49
    - replaced MarkdownPapers with pegdown 1.4.2
    - added Dagger 1.1.0
    - added Eclipse WikiText libraries for processing confluence, mediawiki, textile, tracwiki, and twiki
    settings:
    - { name: 'git.createRepositoriesShared', defaultValue: 'false' }
src/main/java/WEB-INF/web.xml
@@ -35,4 +35,277 @@
    </display-name>
    <!-- PARAMS --> 
<!-- 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>
        <servlet-name>GitServlet2</servlet-name>
        <servlet-class>com.gitblit.servlet.GitServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>GitServlet2</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>
    <!-- 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>
    <!-- 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>
    <!-- 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>
    <!-- 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>
    <!-- Pges 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>
                 * PagesFilter <url-pattern>
                 * PagesServlet <url-pattern>
                 * com.gitblit.Constants.PAGES_PATH -->
            <param-value>r/,git/,feed/,zip/,federation/,rpc/,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/DaggerModule.java
@@ -17,7 +17,6 @@
import javax.inject.Singleton;
import com.gitblit.git.GitServlet;
import com.gitblit.manager.AuthenticationManager;
import com.gitblit.manager.FederationManager;
import com.gitblit.manager.IAuthenticationManager;
@@ -33,23 +32,7 @@
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.LogoServlet;
import com.gitblit.servlet.PagesFilter;
import com.gitblit.servlet.PagesServlet;
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.wicket.GitBlitWebApp;
import com.gitblit.wicket.GitblitWicketFilter;
import dagger.Module;
import dagger.Provides;
@@ -77,24 +60,8 @@
            // the monolithic manager
            IGitblit.class,
            // filters & servlets
            GitServlet.class,
            GitFilter.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,
            EnforceAuthenticationFilter.class,
            GitblitWicketFilter.class
            // the Gitblit Wicket app
            GitBlitWebApp.class
    }
)
public class DaggerModule {
@@ -193,147 +160,5 @@
                projectManager,
                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);
    }
}
src/main/java/com/gitblit/dagger/DaggerContext.java
File was renamed from src/main/java/com/gitblit/dagger/DaggerContextListener.java
@@ -17,8 +17,10 @@
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import com.gitblit.servlet.InjectionContextListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import dagger.ObjectGraph;
@@ -29,9 +31,11 @@
 * @author James Moger
 *
 */
public abstract class DaggerContextListener extends InjectionContextListener {
public abstract class DaggerContext implements ServletContextListener {
    protected static final String INJECTOR_NAME = ObjectGraph.class.getName();
    public static final String INJECTOR_NAME = ObjectGraph.class.getName();
    protected final Logger logger = LoggerFactory.getLogger(getClass());
    protected abstract Object [] getModules();
@@ -52,23 +56,6 @@
            }
        }
        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
src/main/java/com/gitblit/dagger/DaggerFilter.java
New file
@@ -0,0 +1,47 @@
/*
 * Copyright 2013 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.dagger;
import javax.servlet.Filter;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import dagger.ObjectGraph;
/**
 * Uses Dagger to manually inject dependencies into a servlet filter.
 * This class is useful for servlet containers that offer CDI and are
 * confused by Dagger.
 *
 * @author James Moger
 *
 */
public abstract class DaggerFilter implements Filter {
    @Override
    public final void init(FilterConfig filterConfig) throws ServletException {
        ServletContext context = filterConfig.getServletContext();
        ObjectGraph objectGraph = (ObjectGraph) context.getAttribute(DaggerContext.INJECTOR_NAME);
        inject(objectGraph);
    }
    protected abstract void inject(ObjectGraph dagger);
    @Override
    public void destroy() {
    }
}
src/main/java/com/gitblit/dagger/DaggerServlet.java
New file
@@ -0,0 +1,44 @@
/*
 * Copyright 2013 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.dagger;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import dagger.ObjectGraph;
/**
 * Uses Dagger to manually inject dependencies into a servlet.
 * This class is useful for servlet containers that offer CDI and are
 * confused by Dagger.
 *
 * @author James Moger
 *
 */
public abstract class DaggerServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    @Override
    public final void init() throws ServletException {
        ServletContext context = getServletContext();
        ObjectGraph objectGraph = (ObjectGraph) context.getAttribute(DaggerContext.INJECTOR_NAME);
        inject(objectGraph);
    }
    protected abstract void inject(ObjectGraph dagger);
}
src/main/java/com/gitblit/dagger/DaggerWicketFilter.java
New file
@@ -0,0 +1,45 @@
/*
 * Copyright 2013 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.dagger;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import org.apache.wicket.protocol.http.WicketFilter;
import dagger.ObjectGraph;
/**
 * Uses Dagger to manually inject dependencies into a Wicket filter.
 * This class is useful for servlet containers that offer CDI and are
 * confused by Dagger.
 *
 * @author James Moger
 *
 */
public abstract class DaggerWicketFilter extends WicketFilter {
    @Override
    public final void init(FilterConfig filterConfig) throws ServletException {
        ServletContext context = filterConfig.getServletContext();
        ObjectGraph objectGraph = (ObjectGraph) context.getAttribute(DaggerContext.INJECTOR_NAME);
        inject(objectGraph);
        super.init(filterConfig);
    }
    protected abstract void inject(ObjectGraph dagger);
}
src/main/java/com/gitblit/git/GitServlet.java
File was deleted
src/main/java/com/gitblit/servlet/AccessRestrictionFilter.java
@@ -27,10 +27,11 @@
import com.gitblit.manager.IRepositoryManager;
import com.gitblit.manager.IRuntimeManager;
import com.gitblit.manager.IAuthenticationManager;
import com.gitblit.models.RepositoryModel;
import com.gitblit.models.UserModel;
import com.gitblit.utils.StringUtils;
import dagger.ObjectGraph;
/**
 * The AccessRestrictionFilter is an AuthenticationFilter that confirms that the
@@ -48,17 +49,15 @@
 */
public abstract class AccessRestrictionFilter extends AuthenticationFilter {
    protected final IRuntimeManager runtimeManager;
    protected IRuntimeManager runtimeManager;
    protected final IRepositoryManager repositoryManager;
    protected IRepositoryManager repositoryManager;
    protected AccessRestrictionFilter(
            IRuntimeManager runtimeManager,
            IAuthenticationManager authenticationManager,
            IRepositoryManager repositoryManager) {
        super(authenticationManager);
        this.runtimeManager = runtimeManager;
        this.repositoryManager = repositoryManager;
    @Override
    protected void inject(ObjectGraph dagger) {
        super.inject(dagger);
        this.runtimeManager = dagger.get(IRuntimeManager.class);
        this.repositoryManager = dagger.get(IRepositoryManager.class);
    }
    /**
src/main/java/com/gitblit/servlet/AuthenticationFilter.java
@@ -21,9 +21,7 @@
import java.util.HashMap;
import java.util.Map;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
@@ -36,10 +34,13 @@
import org.slf4j.LoggerFactory;
import com.gitblit.Constants;
import com.gitblit.dagger.DaggerFilter;
import com.gitblit.manager.IAuthenticationManager;
import com.gitblit.models.UserModel;
import com.gitblit.utils.DeepCopier;
import com.gitblit.utils.StringUtils;
import dagger.ObjectGraph;
/**
 * The AuthenticationFilter is a servlet filter that preprocesses requests that
@@ -50,7 +51,7 @@
 * @author James Moger
 *
 */
public abstract class AuthenticationFilter implements Filter {
public abstract class AuthenticationFilter extends DaggerFilter {
    protected static final String CHALLENGE = "Basic realm=\"" + Constants.NAME + "\"";
@@ -58,10 +59,11 @@
    protected transient Logger logger = LoggerFactory.getLogger(getClass());
    protected final IAuthenticationManager authenticationManager;
    protected IAuthenticationManager authenticationManager;
    protected AuthenticationFilter(IAuthenticationManager authenticationManager) {
        this.authenticationManager = authenticationManager;
    @Override
    protected void inject(ObjectGraph dagger) {
        this.authenticationManager = dagger.get(IAuthenticationManager.class);
    }
    /**
@@ -135,20 +137,6 @@
                }
            }
        }
    }
    /**
     * @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
     */
    @Override
    public void init(final FilterConfig config) throws ServletException {
    }
    /**
     * @see javax.servlet.Filter#destroy()
     */
    @Override
    public void destroy() {
    }
    /**
src/main/java/com/gitblit/servlet/BranchGraphServlet.java
@@ -37,7 +37,6 @@
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -53,10 +52,12 @@
import com.gitblit.Constants;
import com.gitblit.IStoredSettings;
import com.gitblit.Keys;
import com.gitblit.dagger.DaggerServlet;
import com.gitblit.manager.IRepositoryManager;
import com.gitblit.manager.IRuntimeManager;
import com.gitblit.utils.JGitUtils;
import com.gitblit.utils.StringUtils;
import dagger.ObjectGraph;
/**
 * Handles requests for branch graphs
@@ -64,7 +65,7 @@
 * @author James Moger
 *
 */
public class BranchGraphServlet extends HttpServlet {
public class BranchGraphServlet extends DaggerServlet {
    private static final long serialVersionUID = 1L;
@@ -77,21 +78,22 @@
    private final Stroke[] strokeCache;
    private final IStoredSettings settings;
    private IStoredSettings settings;
    private final IRepositoryManager repositoryManager;
    private IRepositoryManager repositoryManager;
    public BranchGraphServlet(
            IRuntimeManager runtimeManager,
            IRepositoryManager repositoryManager) {
    public BranchGraphServlet() {
        super();
        this.settings = runtimeManager.getSettings();
        this.repositoryManager = repositoryManager;
        strokeCache = new Stroke[4];
        for (int i = 1; i < strokeCache.length; i++)
        for (int i = 1; i < strokeCache.length; i++) {
            strokeCache[i] = new BasicStroke(i);
        }
    }
    @Override
    protected void inject(ObjectGraph dagger) {
        this.settings = dagger.get(IStoredSettings.class);
        this.repositoryManager = dagger.get(IRepositoryManager.class);
    }
    /**
src/main/java/com/gitblit/servlet/DownloadZipFilter.java
@@ -16,9 +16,6 @@
package com.gitblit.servlet;
import com.gitblit.Constants.AccessRestrictionType;
import com.gitblit.manager.IAuthenticationManager;
import com.gitblit.manager.IRepositoryManager;
import com.gitblit.manager.IRuntimeManager;
import com.gitblit.models.RepositoryModel;
import com.gitblit.models.UserModel;
@@ -31,14 +28,6 @@
 *
 */
public class DownloadZipFilter extends AccessRestrictionFilter {
    public DownloadZipFilter(
            IRuntimeManager runtimeManager,
            IAuthenticationManager authenticationManager,
            IRepositoryManager repositoryManager) {
        super(runtimeManager, authenticationManager, repositoryManager);
    }
    /**
     * Extract the repository name from the url.
src/main/java/com/gitblit/servlet/DownloadZipServlet.java
@@ -21,7 +21,6 @@
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletResponse;
import org.eclipse.jgit.lib.Repository;
@@ -32,12 +31,14 @@
import com.gitblit.Constants;
import com.gitblit.IStoredSettings;
import com.gitblit.Keys;
import com.gitblit.dagger.DaggerServlet;
import com.gitblit.manager.IRepositoryManager;
import com.gitblit.manager.IRuntimeManager;
import com.gitblit.utils.CompressionUtils;
import com.gitblit.utils.JGitUtils;
import com.gitblit.utils.MarkdownUtils;
import com.gitblit.utils.StringUtils;
import dagger.ObjectGraph;
/**
 * Streams out a zip file from the specified repository for any tree path at any
@@ -46,15 +47,15 @@
 * @author James Moger
 *
 */
public class DownloadZipServlet extends HttpServlet {
public class DownloadZipServlet extends DaggerServlet {
    private static final long serialVersionUID = 1L;
    private transient Logger logger = LoggerFactory.getLogger(DownloadZipServlet.class);
    private final IStoredSettings settings;
    private IStoredSettings settings;
    private final IRepositoryManager repositoryManager;
    private IRepositoryManager repositoryManager;
    public static enum Format {
        zip(".zip"), tar(".tar"), gz(".tar.gz"), xz(".tar.xz"), bzip2(".tar.bzip2");
@@ -75,13 +76,10 @@
        }
    }
    public DownloadZipServlet(
            IRuntimeManager runtimeManager,
            IRepositoryManager repositoryManager) {
        super();
        this.settings = runtimeManager.getSettings();
        this.repositoryManager = repositoryManager;
    @Override
    protected void inject(ObjectGraph dagger) {
        this.settings = dagger.get(IStoredSettings.class);
        this.repositoryManager = dagger.get(IRepositoryManager.class);
    }
    /**
src/main/java/com/gitblit/servlet/EnforceAuthenticationFilter.java
@@ -18,9 +18,7 @@
import java.io.IOException;
import java.text.MessageFormat;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
@@ -32,9 +30,11 @@
import com.gitblit.IStoredSettings;
import com.gitblit.Keys;
import com.gitblit.dagger.DaggerFilter;
import com.gitblit.manager.IAuthenticationManager;
import com.gitblit.manager.IRuntimeManager;
import com.gitblit.models.UserModel;
import dagger.ObjectGraph;
/**
 * This filter enforces authentication via HTTP Basic Authentication, if the settings indicate so.
@@ -44,28 +44,18 @@
 * @author Laurens Vrijnsen
 *
 */
public class EnforceAuthenticationFilter implements Filter {
public class EnforceAuthenticationFilter extends DaggerFilter {
    protected transient Logger logger = LoggerFactory.getLogger(getClass());
    private final IStoredSettings settings;
    private IStoredSettings settings;
    private final IAuthenticationManager authenticationManager;
    private IAuthenticationManager authenticationManager;
    public EnforceAuthenticationFilter(
            IRuntimeManager runtimeManager,
            IAuthenticationManager authenticationManager) {
        super();
        this.settings = runtimeManager.getSettings();
        this.authenticationManager = authenticationManager;
    }
    /*
     * @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
     */
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    protected void inject(ObjectGraph dagger) {
        this.settings = dagger.get(IStoredSettings.class);
        this.authenticationManager = dagger.get(IAuthenticationManager.class);
    }
    /*
src/main/java/com/gitblit/servlet/FederationServlet.java
@@ -32,7 +32,6 @@
import com.gitblit.Keys;
import com.gitblit.manager.IFederationManager;
import com.gitblit.manager.IRepositoryManager;
import com.gitblit.manager.IRuntimeManager;
import com.gitblit.manager.IUserManager;
import com.gitblit.models.FederationModel;
import com.gitblit.models.FederationProposal;
@@ -44,6 +43,8 @@
import com.gitblit.utils.StringUtils;
import com.gitblit.utils.TimeUtils;
import dagger.ObjectGraph;
/**
 * Handles federation requests.
 *
@@ -54,25 +55,20 @@
    private static final long serialVersionUID = 1L;
    private final IStoredSettings settings;
    private IStoredSettings settings;
    private final IUserManager userManager;
    private IUserManager userManager;
    private final IRepositoryManager repositoryManager;
    private IRepositoryManager repositoryManager;
    private final IFederationManager federationManager;
    private IFederationManager federationManager;
    public FederationServlet(
            IRuntimeManager runtimeManager,
            IUserManager userManager,
            IRepositoryManager repositoryManager,
            IFederationManager federationManager) {
        super();
        this.settings = runtimeManager.getSettings();
        this.userManager = userManager;
        this.repositoryManager = repositoryManager;
        this.federationManager = federationManager;
    @Override
    protected void inject(ObjectGraph dagger) {
        this.settings = dagger.get(IStoredSettings.class);
        this.userManager = dagger.get(IUserManager.class);
        this.repositoryManager = dagger.get(IRepositoryManager.class);
        this.federationManager = dagger.get(IFederationManager.class);
    }
    /**
src/main/java/com/gitblit/servlet/GitFilter.java
@@ -24,14 +24,12 @@
import com.gitblit.GitBlitException;
import com.gitblit.IStoredSettings;
import com.gitblit.Keys;
import com.gitblit.manager.IAuthenticationManager;
import com.gitblit.manager.IFederationManager;
import com.gitblit.manager.IRepositoryManager;
import com.gitblit.manager.IRuntimeManager;
import com.gitblit.manager.IUserManager;
import com.gitblit.models.RepositoryModel;
import com.gitblit.models.UserModel;
import com.gitblit.utils.StringUtils;
import dagger.ObjectGraph;
/**
 * The GitFilter is an AccessRestrictionFilter which ensures that Git client
@@ -50,23 +48,15 @@
    protected static final String[] suffixes = { gitReceivePack, gitUploadPack, "/info/refs", "/HEAD",
            "/objects" };
    private final IStoredSettings settings;
    private IStoredSettings settings;
    private final IUserManager userManager;
    private IFederationManager federationManager;
    private final IFederationManager federationManager;
    public GitFilter(
            IRuntimeManager runtimeManager,
            IUserManager userManager,
            IAuthenticationManager authenticationManager,
            IRepositoryManager repositoryManager,
            IFederationManager federationManager) {
        super(runtimeManager, authenticationManager, repositoryManager);
        this.settings = runtimeManager.getSettings();
        this.userManager = userManager;
        this.federationManager = federationManager;
    @Override
    protected void inject(ObjectGraph dagger) {
        super.inject(dagger);
        this.settings = dagger.get(IStoredSettings.class);
        this.federationManager = dagger.get(IFederationManager.class);
    }
    /**
src/main/java/com/gitblit/servlet/GitServlet.java
New file
@@ -0,0 +1,112 @@
/*
 * Copyright 2011 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 static javax.servlet.http.HttpServletResponse.SC_NOT_FOUND;
import java.io.IOException;
import java.util.Enumeration;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.eclipse.jgit.http.server.GitFilter;
import com.gitblit.dagger.DaggerContext;
import com.gitblit.git.GitblitReceivePackFactory;
import com.gitblit.git.GitblitUploadPackFactory;
import com.gitblit.git.RepositoryResolver;
import com.gitblit.manager.IGitblit;
import dagger.ObjectGraph;
/**
 * The GitServlet provides http/https access to Git repositories.
 * Access to this servlet is protected by the GitFilter.
 *
 * @author James Moger
 *
 */
public class GitServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    private final GitFilter gitFilter;
    public GitServlet() {
        gitFilter = new GitFilter();
    }
    @Override
    public void init(final ServletConfig config) throws ServletException {
        ServletContext context = config.getServletContext();
        ObjectGraph dagger = (ObjectGraph) context.getAttribute(DaggerContext.INJECTOR_NAME);
        IGitblit gitblit = dagger.get(IGitblit.class);
        gitFilter.setRepositoryResolver(new RepositoryResolver<HttpServletRequest>(gitblit));
        gitFilter.setUploadPackFactory(new GitblitUploadPackFactory<HttpServletRequest>(gitblit));
        gitFilter.setReceivePackFactory(new GitblitReceivePackFactory<HttpServletRequest>(gitblit));
        gitFilter.init(new FilterConfig() {
            @Override
            public String getFilterName() {
                return gitFilter.getClass().getName();
            }
            @Override
            public String getInitParameter(String name) {
                return config.getInitParameter(name);
            }
            @Override
            public Enumeration<String> getInitParameterNames() {
                return config.getInitParameterNames();
            }
            @Override
            public ServletContext getServletContext() {
                return config.getServletContext();
            }
        });
        init();
    }
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse res)
            throws ServletException, IOException {
        gitFilter.doFilter(req, res, new FilterChain() {
            @Override
            public void doFilter(ServletRequest request,
                    ServletResponse response) throws IOException,
                    ServletException {
                ((HttpServletResponse) response).sendError(SC_NOT_FOUND);
            }
        });
    }
    @Override
    public void destroy() {
        gitFilter.destroy();
    }
}
src/main/java/com/gitblit/servlet/GitblitContext.java
@@ -23,15 +23,13 @@
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.annotation.WebListener;
import javax.servlet.ServletContextEvent;
import com.gitblit.Constants;
import com.gitblit.DaggerModule;
@@ -39,8 +37,7 @@
import com.gitblit.IStoredSettings;
import com.gitblit.Keys;
import com.gitblit.WebXmlSettings;
import com.gitblit.dagger.DaggerContextListener;
import com.gitblit.git.GitServlet;
import com.gitblit.dagger.DaggerContext;
import com.gitblit.manager.IAuthenticationManager;
import com.gitblit.manager.IFederationManager;
import com.gitblit.manager.IGitblit;
@@ -52,25 +49,21 @@
import com.gitblit.manager.IUserManager;
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 followed by
 * instantiating and registering all servlets and filters.
 *
 * Leveraging Servlet 3 and Dagger static dependency injection allows Gitblit to
 * be modular and completely code-driven rather then relying on the fragility of
 * a web.xml descriptor and the static & monolithic design previously used.
 * 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.
 *
 * @author James Moger
 *
 */
@WebListener
public class GitblitContext extends DaggerContextListener {
public class GitblitContext extends DaggerContext {
    private static GitblitContext gitblit;
@@ -126,10 +119,21 @@
    }
    /**
     * Prepare runtime settings and start all manager instances.
     * Configure Gitblit from the web.xml, if no configuration has already been
     * specified.
     *
     * @see ServletContextListener.contextInitialize(ServletContextEvent)
     */
    @Override
    protected void beforeServletInjection(ServletContext context) {
    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) {
        ObjectGraph injector = getInjector(context);
        // create the runtime settings object
@@ -191,38 +195,6 @@
    protected void logManager(Class<? extends IManager> clazz) {
        logger.info("");
        logger.info("----[{}]----", clazz.getName());
    }
    /**
     * 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.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);
        file(context, "/robots.txt", RobotsTxtServlet.class);
        file(context, "/logo.png", LogoServlet.class);
        // optional force basic authentication
        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);
    }
    /**
src/main/java/com/gitblit/servlet/InjectionContextListener.java
File was deleted
src/main/java/com/gitblit/servlet/JsonServlet.java
@@ -21,7 +21,6 @@
import java.text.MessageFormat;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -29,6 +28,7 @@
import org.slf4j.LoggerFactory;
import com.gitblit.Constants;
import com.gitblit.dagger.DaggerServlet;
import com.gitblit.utils.JsonUtils;
import com.gitblit.utils.StringUtils;
@@ -38,7 +38,7 @@
 * @author James Moger
 *
 */
public abstract class JsonServlet extends HttpServlet {
public abstract class JsonServlet extends DaggerServlet {
    private static final long serialVersionUID = 1L;
src/main/java/com/gitblit/servlet/LogoServlet.java
@@ -23,12 +23,14 @@
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.gitblit.Keys;
import com.gitblit.dagger.DaggerServlet;
import com.gitblit.manager.IRuntimeManager;
import dagger.ObjectGraph;
/**
 * Handles requests for logo.png
@@ -36,17 +38,17 @@
 * @author James Moger
 *
 */
public class LogoServlet extends HttpServlet {
public class LogoServlet extends DaggerServlet {
    private static final long serialVersionUID = 1L;
    private static final long lastModified = System.currentTimeMillis();
    private final IRuntimeManager runtimeManager;
    private IRuntimeManager runtimeManager;
    public LogoServlet(IRuntimeManager runtimeManager) {
        super();
        this.runtimeManager = runtimeManager;
    @Override
    protected void inject(ObjectGraph dagger) {
        this.runtimeManager = dagger.get(IRuntimeManager.class);
    }
    @Override
src/main/java/com/gitblit/servlet/PagesFilter.java
@@ -18,9 +18,6 @@
import org.eclipse.jgit.lib.Repository;
import com.gitblit.Constants.AccessRestrictionType;
import com.gitblit.manager.IAuthenticationManager;
import com.gitblit.manager.IRepositoryManager;
import com.gitblit.manager.IRuntimeManager;
import com.gitblit.models.RepositoryModel;
import com.gitblit.models.UserModel;
@@ -32,13 +29,6 @@
 *
 */
public class PagesFilter extends AccessRestrictionFilter {
    public PagesFilter(IRuntimeManager runtimeManager,
            IAuthenticationManager authenticationManager,
            IRepositoryManager repositoryManager) {
        super(runtimeManager, authenticationManager, repositoryManager);
    }
    /**
     * Extract the repository name from the url.
src/main/java/com/gitblit/servlet/PagesServlet.java
@@ -23,10 +23,8 @@
import java.util.Set;
import java.util.TreeSet;
import javax.inject.Inject;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -39,8 +37,8 @@
import com.gitblit.Constants;
import com.gitblit.IStoredSettings;
import com.gitblit.Keys;
import com.gitblit.dagger.DaggerServlet;
import com.gitblit.manager.IRepositoryManager;
import com.gitblit.manager.IRuntimeManager;
import com.gitblit.models.PathModel;
import com.gitblit.models.RefModel;
import com.gitblit.utils.ArrayUtils;
@@ -51,29 +49,28 @@
import com.gitblit.wicket.MarkupProcessor;
import com.gitblit.wicket.MarkupProcessor.MarkupDocument;
import dagger.ObjectGraph;
/**
 * Serves the content of a gh-pages branch.
 *
 * @author James Moger
 *
 */
public class PagesServlet extends HttpServlet {
public class PagesServlet extends DaggerServlet {
    private static final long serialVersionUID = 1L;
    private transient Logger logger = LoggerFactory.getLogger(PagesServlet.class);
    private final IStoredSettings settings;
    private IStoredSettings settings;
    private final IRepositoryManager repositoryManager;
    private IRepositoryManager repositoryManager;
    public PagesServlet(
            IRuntimeManager runtimeManager,
            IRepositoryManager repositoryManager) {
        super();
        this.settings = runtimeManager.getSettings();
        this.repositoryManager = repositoryManager;
    @Override
    protected void inject(ObjectGraph dagger) {
        this.settings = dagger.get(IStoredSettings.class);
        this.repositoryManager = dagger.get(IRepositoryManager.class);
    }
    /**
src/main/java/com/gitblit/servlet/RobotsTxtServlet.java
@@ -19,13 +19,15 @@
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.gitblit.Keys;
import com.gitblit.dagger.DaggerServlet;
import com.gitblit.manager.IRuntimeManager;
import com.gitblit.utils.FileUtils;
import dagger.ObjectGraph;
/**
 * Handles requests for robots.txt
@@ -33,15 +35,15 @@
 * @author James Moger
 *
 */
public class RobotsTxtServlet extends HttpServlet {
public class RobotsTxtServlet extends DaggerServlet {
    private static final long serialVersionUID = 1L;
    private final IRuntimeManager runtimeManager;
    private IRuntimeManager runtimeManager;
    public RobotsTxtServlet(IRuntimeManager runtimeManager) {
        super();
        this.runtimeManager = runtimeManager;
    @Override
    protected void inject(ObjectGraph dagger) {
        this.runtimeManager = dagger.get(IRuntimeManager.class);
    }
    @Override
src/main/java/com/gitblit/servlet/RpcFilter.java
@@ -28,9 +28,10 @@
import com.gitblit.Constants.RpcRequest;
import com.gitblit.IStoredSettings;
import com.gitblit.Keys;
import com.gitblit.manager.IAuthenticationManager;
import com.gitblit.manager.IRuntimeManager;
import com.gitblit.models.UserModel;
import dagger.ObjectGraph;
/**
 * The RpcFilter is a servlet filter that secures the RpcServlet.
@@ -47,17 +48,15 @@
 */
public class RpcFilter extends AuthenticationFilter {
    private final IStoredSettings settings;
    private IStoredSettings settings;
    private final IRuntimeManager runtimeManager;
    private IRuntimeManager runtimeManager;
    public RpcFilter(
            IRuntimeManager runtimeManager,
            IAuthenticationManager authenticationManager) {
        super(authenticationManager);
        this.settings = runtimeManager.getSettings();
        this.runtimeManager = runtimeManager;
    @Override
    protected void inject(ObjectGraph dagger) {
        super.inject(dagger);
        this.settings = dagger.get(IStoredSettings.class);
        this.runtimeManager = dagger.get(IRuntimeManager.class);
    }
    /**
src/main/java/com/gitblit/servlet/RpcServlet.java
@@ -47,6 +47,8 @@
import com.gitblit.utils.RpcUtils;
import com.gitblit.utils.StringUtils;
import dagger.ObjectGraph;
/**
 * Handles remote procedure calls.
 *
@@ -59,16 +61,14 @@
    public static final int PROTOCOL_VERSION = 6;
    private final IStoredSettings settings;
    private IStoredSettings settings;
    private final IGitblit gitblit;
    private IGitblit gitblit;
    public RpcServlet(IGitblit gitblit) {
        super();
        this.settings = gitblit.getSettings();
        this.gitblit = gitblit;
    @Override
    protected void inject(ObjectGraph dagger) {
        this.settings = dagger.get(IStoredSettings.class);
        this.gitblit = dagger.get(IGitblit.class);
    }
    /**
src/main/java/com/gitblit/servlet/SparkleShareInviteServlet.java
@@ -19,20 +19,21 @@
import java.text.MessageFormat;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.gitblit.Constants;
import com.gitblit.IStoredSettings;
import com.gitblit.Keys;
import com.gitblit.dagger.DaggerServlet;
import com.gitblit.manager.IAuthenticationManager;
import com.gitblit.manager.IRepositoryManager;
import com.gitblit.manager.IRuntimeManager;
import com.gitblit.manager.IUserManager;
import com.gitblit.models.RepositoryModel;
import com.gitblit.models.UserModel;
import com.gitblit.utils.StringUtils;
import dagger.ObjectGraph;
/**
 * Handles requests for Sparkleshare Invites
@@ -40,29 +41,24 @@
 * @author James Moger
 *
 */
public class SparkleShareInviteServlet extends HttpServlet {
public class SparkleShareInviteServlet extends DaggerServlet {
    private static final long serialVersionUID = 1L;
    private final IStoredSettings settings;
    private IStoredSettings settings;
    private final IUserManager userManager;
    private IUserManager userManager;
    private final IAuthenticationManager authenticationManager;
    private IAuthenticationManager authenticationManager;
    private final IRepositoryManager repositoryManager;
    private IRepositoryManager repositoryManager;
    public SparkleShareInviteServlet(
            IRuntimeManager runtimeManager,
            IUserManager userManager,
            IAuthenticationManager authenticationManager,
            IRepositoryManager repositoryManager) {
        super();
        this.settings = runtimeManager.getSettings();
        this.userManager = userManager;
        this.authenticationManager = authenticationManager;
        this.repositoryManager = repositoryManager;
    @Override
    protected void inject(ObjectGraph dagger) {
        this.settings = dagger.get(IStoredSettings.class);
        this.userManager = dagger.get(IUserManager.class);
        this.authenticationManager = dagger.get(IAuthenticationManager.class);
        this.repositoryManager = dagger.get(IRepositoryManager.class);
    }
    @Override
src/main/java/com/gitblit/servlet/SyndicationFilter.java
@@ -26,13 +26,14 @@
import javax.servlet.http.HttpServletResponse;
import com.gitblit.Constants.AccessRestrictionType;
import com.gitblit.manager.IAuthenticationManager;
import com.gitblit.manager.IProjectManager;
import com.gitblit.manager.IRepositoryManager;
import com.gitblit.manager.IRuntimeManager;
import com.gitblit.models.ProjectModel;
import com.gitblit.models.RepositoryModel;
import com.gitblit.models.UserModel;
import dagger.ObjectGraph;
/**
 * The SyndicationFilter is an AuthenticationFilter which ensures that feed
@@ -44,20 +45,16 @@
 */
public class SyndicationFilter extends AuthenticationFilter {
    private final IRuntimeManager runtimeManager;
    private final IRepositoryManager repositoryManager;
    private final IProjectManager projectManager;
    private IRuntimeManager runtimeManager;
    private IRepositoryManager repositoryManager;
    private IProjectManager projectManager;
    public SyndicationFilter(
            IRuntimeManager runtimeManager,
            IAuthenticationManager authenticationManager,
            IRepositoryManager repositoryManager,
            IProjectManager projectManager) {
        super(authenticationManager);
        this.runtimeManager = runtimeManager;
        this.repositoryManager = repositoryManager;
        this.projectManager = projectManager;
    @Override
    protected void inject(ObjectGraph dagger) {
        super.inject(dagger);
        this.runtimeManager = dagger.get(IRuntimeManager.class);
        this.repositoryManager = dagger.get(IRepositoryManager.class);
        this.projectManager = dagger.get(IProjectManager.class);
    }
    /**
src/main/java/com/gitblit/servlet/SyndicationServlet.java
@@ -22,8 +22,6 @@
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServlet;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.revwalk.RevCommit;
@@ -33,9 +31,9 @@
import com.gitblit.Constants;
import com.gitblit.IStoredSettings;
import com.gitblit.Keys;
import com.gitblit.dagger.DaggerServlet;
import com.gitblit.manager.IProjectManager;
import com.gitblit.manager.IRepositoryManager;
import com.gitblit.manager.IRuntimeManager;
import com.gitblit.models.FeedEntryModel;
import com.gitblit.models.ProjectModel;
import com.gitblit.models.RefModel;
@@ -48,6 +46,8 @@
import com.gitblit.utils.StringUtils;
import com.gitblit.utils.SyndicationUtils;
import dagger.ObjectGraph;
/**
 * SyndicationServlet generates RSS 2.0 feeds and feed links.
 *
@@ -56,27 +56,23 @@
 * @author James Moger
 *
 */
public class SyndicationServlet extends HttpServlet {
public class SyndicationServlet extends DaggerServlet {
    private static final long serialVersionUID = 1L;
    private transient Logger logger = LoggerFactory.getLogger(SyndicationServlet.class);
    private final IStoredSettings settings;
    private IStoredSettings settings;
    private final IRepositoryManager repositoryManager;
    private IRepositoryManager repositoryManager;
    private final IProjectManager projectManager;
    private IProjectManager projectManager;
    public SyndicationServlet(
            IRuntimeManager runtimeManager,
            IRepositoryManager repositoryManager,
            IProjectManager projectManager) {
        super();
        this.settings = runtimeManager.getSettings();
        this.repositoryManager = repositoryManager;
        this.projectManager = projectManager;
    @Override
    protected void inject(ObjectGraph dagger) {
        this.settings = dagger.get(IStoredSettings.class);
        this.repositoryManager = dagger.get(IRepositoryManager.class);
        this.projectManager = dagger.get(IProjectManager.class);
    }
    /**
src/main/java/com/gitblit/wicket/GitblitWicketFilter.java
@@ -28,6 +28,7 @@
import com.gitblit.IStoredSettings;
import com.gitblit.Keys;
import com.gitblit.dagger.DaggerWicketFilter;
import com.gitblit.manager.IProjectManager;
import com.gitblit.manager.IRepositoryManager;
import com.gitblit.manager.IRuntimeManager;
@@ -35,6 +36,8 @@
import com.gitblit.models.RepositoryModel;
import com.gitblit.utils.JGitUtils;
import com.gitblit.utils.StringUtils;
import dagger.ObjectGraph;
/**
 *
@@ -44,26 +47,25 @@
 * @author James Moger
 *
 */
public class GitblitWicketFilter extends WicketFilter {
public class GitblitWicketFilter extends DaggerWicketFilter {
    private final IStoredSettings settings;
    private IStoredSettings settings;
    private final IRuntimeManager runtimeManager;
    private IRuntimeManager runtimeManager;
    private final IRepositoryManager repositoryManager;
    private IRepositoryManager repositoryManager;
    private final IProjectManager projectManager;
    private IProjectManager projectManager;
    private final GitBlitWebApp webapp;
    private GitBlitWebApp webapp;
    public GitblitWicketFilter(GitBlitWebApp webapp) {
        super();
        this.settings = webapp.settings();
        this.runtimeManager = webapp.runtime();
        this.repositoryManager = webapp.repositories();
        this.projectManager = webapp.projects();
        this.webapp = webapp;
    @Override
    protected void inject(ObjectGraph dagger) {
        this.settings = dagger.get(IStoredSettings.class);
        this.runtimeManager = dagger.get(IRuntimeManager.class);
        this.repositoryManager = dagger.get(IRepositoryManager.class);
        this.projectManager = dagger.get(IProjectManager.class);
        this.webapp = dagger.get(GitBlitWebApp.class);
    }
    @Override