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
| | |
| | | - 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' } |
| | |
| | | </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> |
| | |
| | | |
| | | import javax.inject.Singleton; |
| | | |
| | | import com.gitblit.git.GitServlet; |
| | | import com.gitblit.manager.AuthenticationManager; |
| | | import com.gitblit.manager.FederationManager; |
| | | import com.gitblit.manager.IAuthenticationManager; |
| | |
| | | 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; |
| | |
| | | // 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 { |
| | |
| | | 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); |
| | | } |
| | | } |
File was renamed from src/main/java/com/gitblit/dagger/DaggerContextListener.java |
| | |
| | | |
| | | 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; |
| | | |
| | |
| | | * @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(); |
| | | |
| | |
| | | } |
| | | } |
| | | 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 |
New file |
| | |
| | | /*
|
| | | * 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() {
|
| | | }
|
| | | }
|
New file |
| | |
| | | /*
|
| | | * 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);
|
| | | }
|
New file |
| | |
| | | /*
|
| | | * 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);
|
| | | }
|
| | |
| | |
|
| | | 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
|
| | |
| | | */
|
| | | 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);
|
| | | }
|
| | |
|
| | | /**
|
| | |
| | | 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;
|
| | |
| | | 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
|
| | |
| | | * @author James Moger
|
| | | *
|
| | | */
|
| | | public abstract class AuthenticationFilter implements Filter {
|
| | | public abstract class AuthenticationFilter extends DaggerFilter {
|
| | |
|
| | | protected static final String CHALLENGE = "Basic realm=\"" + Constants.NAME + "\"";
|
| | |
|
| | |
| | |
|
| | | 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);
|
| | | }
|
| | |
|
| | | /**
|
| | |
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * @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() {
|
| | | }
|
| | |
|
| | | /**
|
| | |
| | |
|
| | | import javax.imageio.ImageIO;
|
| | | 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.IRepositoryManager;
|
| | | import com.gitblit.manager.IRuntimeManager;
|
| | | import com.gitblit.utils.JGitUtils;
|
| | | import com.gitblit.utils.StringUtils;
|
| | |
|
| | | import dagger.ObjectGraph;
|
| | |
|
| | | /**
|
| | | * Handles requests for branch graphs
|
| | |
| | | * @author James Moger
|
| | | *
|
| | | */
|
| | | public class BranchGraphServlet extends HttpServlet {
|
| | | public class BranchGraphServlet extends DaggerServlet {
|
| | |
|
| | | private static final long serialVersionUID = 1L;
|
| | |
|
| | |
| | |
|
| | | 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);
|
| | | }
|
| | |
|
| | | /**
|
| | |
| | | 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;
|
| | |
|
| | |
| | | *
|
| | | */
|
| | | public class DownloadZipFilter extends AccessRestrictionFilter {
|
| | |
|
| | | public DownloadZipFilter(
|
| | | IRuntimeManager runtimeManager,
|
| | | IAuthenticationManager authenticationManager,
|
| | | IRepositoryManager repositoryManager) {
|
| | |
|
| | | super(runtimeManager, authenticationManager, repositoryManager);
|
| | | }
|
| | |
|
| | | /**
|
| | | * Extract the repository name from the url.
|
| | |
| | | import java.util.Date;
|
| | |
|
| | | import javax.servlet.ServletException;
|
| | | import javax.servlet.http.HttpServlet;
|
| | | import javax.servlet.http.HttpServletResponse;
|
| | |
|
| | | import org.eclipse.jgit.lib.Repository;
|
| | |
| | | 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
|
| | |
| | | * @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");
|
| | |
| | | }
|
| | | }
|
| | |
|
| | | 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);
|
| | | }
|
| | |
|
| | | /**
|
| | |
| | | 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; |
| | |
| | | |
| | | 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. |
| | |
| | | * @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); |
| | | } |
| | | |
| | | /* |
| | |
| | | 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;
|
| | |
| | | import com.gitblit.utils.StringUtils;
|
| | | import com.gitblit.utils.TimeUtils;
|
| | |
|
| | | import dagger.ObjectGraph;
|
| | |
|
| | | /**
|
| | | * Handles federation requests.
|
| | | *
|
| | |
| | |
|
| | | 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);
|
| | | }
|
| | |
|
| | | /**
|
| | |
| | | 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
|
| | |
| | | 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);
|
| | | }
|
| | |
|
| | | /**
|
New file |
| | |
| | | /*
|
| | | * 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();
|
| | | }
|
| | | }
|
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * 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 |
| | |
| | | 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); |
| | | } |
| | | |
| | | /** |
| | |
| | | import java.text.MessageFormat;
|
| | |
|
| | | import javax.servlet.ServletException;
|
| | | import javax.servlet.http.HttpServlet;
|
| | | import javax.servlet.http.HttpServletRequest;
|
| | | import javax.servlet.http.HttpServletResponse;
|
| | |
|
| | |
| | | import org.slf4j.LoggerFactory;
|
| | |
|
| | | import com.gitblit.Constants;
|
| | | import com.gitblit.dagger.DaggerServlet;
|
| | | import com.gitblit.utils.JsonUtils;
|
| | | import com.gitblit.utils.StringUtils;
|
| | |
|
| | |
| | | * @author James Moger
|
| | | *
|
| | | */
|
| | | public abstract class JsonServlet extends HttpServlet {
|
| | | public abstract class JsonServlet extends DaggerServlet {
|
| | |
|
| | | private static final long serialVersionUID = 1L;
|
| | |
|
| | |
| | |
|
| | | 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
|
| | |
| | | * @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
|
| | |
| | | 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;
|
| | |
|
| | |
| | | *
|
| | | */
|
| | | public class PagesFilter extends AccessRestrictionFilter {
|
| | |
|
| | | public PagesFilter(IRuntimeManager runtimeManager,
|
| | | IAuthenticationManager authenticationManager,
|
| | | IRepositoryManager repositoryManager) {
|
| | |
|
| | | super(runtimeManager, authenticationManager, repositoryManager);
|
| | | }
|
| | |
|
| | | /**
|
| | | * Extract the repository name from the url.
|
| | |
| | | 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;
|
| | |
|
| | |
| | | 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;
|
| | |
| | | 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);
|
| | | }
|
| | |
|
| | | /**
|
| | |
| | | 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
|
| | |
| | | * @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
|
| | |
| | | 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.
|
| | |
| | | */
|
| | | 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);
|
| | | }
|
| | |
|
| | | /**
|
| | |
| | | import com.gitblit.utils.RpcUtils;
|
| | | import com.gitblit.utils.StringUtils;
|
| | |
|
| | | import dagger.ObjectGraph;
|
| | |
|
| | | /**
|
| | | * Handles remote procedure calls.
|
| | | *
|
| | |
| | |
|
| | | 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);
|
| | | }
|
| | |
|
| | | /**
|
| | |
| | | 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
|
| | |
| | | * @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
|
| | |
| | | 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
|
| | |
| | | */
|
| | | 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);
|
| | | }
|
| | |
|
| | | /**
|
| | |
| | | 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;
|
| | |
| | | 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;
|
| | |
| | | import com.gitblit.utils.StringUtils;
|
| | | import com.gitblit.utils.SyndicationUtils;
|
| | |
|
| | | import dagger.ObjectGraph;
|
| | |
|
| | | /**
|
| | | * SyndicationServlet generates RSS 2.0 feeds and feed links.
|
| | | *
|
| | |
| | | * @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);
|
| | | }
|
| | |
|
| | | /**
|
| | |
| | |
|
| | | 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;
|
| | |
| | | import com.gitblit.models.RepositoryModel;
|
| | | import com.gitblit.utils.JGitUtils;
|
| | | import com.gitblit.utils.StringUtils;
|
| | |
|
| | | import dagger.ObjectGraph;
|
| | |
|
| | | /**
|
| | | *
|
| | |
| | | * @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
|