Extract Git /p/ module configuration
Move the configuration into its own module, this will make it easier
to control whether or not the Git access over HTTP is even installed
in a running server, or how it permits access.
Change-Id: I54074dbac96d47f32d444565993823f54348d722
Signed-off-by: Shawn O. Pearce <sop@google.com>
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/GitOverHttpModule.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/GitOverHttpModule.java
new file mode 100644
index 0000000..9b9ec86
--- /dev/null
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/GitOverHttpModule.java
@@ -0,0 +1,42 @@
+// Copyright (C) 2009 The Android Open Source Project
+//
+// 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.google.gerrit.httpd;
+
+import com.google.gerrit.server.config.AuthConfig;
+import com.google.inject.Inject;
+import com.google.inject.servlet.ServletModule;
+
+/**
+ * Configures Git access over {@code "/p/PROJECT_NAME"} URLs.
+ */
+public class GitOverHttpModule extends ServletModule {
+ private final AuthConfig authConfig;
+
+ @Inject
+ GitOverHttpModule(AuthConfig authConfig) {
+ this.authConfig = authConfig;
+ }
+
+ @Override
+ protected void configureServlets() {
+ filter("/p/*").through(ProjectAccessPathFilter.class);
+ if (authConfig.isTrustContainerAuth()) {
+ filter("/p/*").through(ContainerAuthFilter.class);
+ } else {
+ filter("/p/*").through(ProjectDigestFilter.class);
+ }
+ serve("/p/*").with(ProjectServlet.class);
+ }
+}
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/ProjectAccessPathFilter.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/ProjectAccessPathFilter.java
index 934c4a5..70ed153 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/ProjectAccessPathFilter.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/ProjectAccessPathFilter.java
@@ -30,7 +30,7 @@
/** Set the WebSession to {@link AccessPath#GIT}. */
@Singleton
-class ProjectAccessPathFilter implements Filter {
+public class ProjectAccessPathFilter implements Filter {
private final Provider<WebSession> session;
@Inject
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/UrlModule.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/UrlModule.java
index 8d6d684..6c145a2 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/UrlModule.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/UrlModule.java
@@ -24,7 +24,6 @@
import com.google.gerrit.httpd.raw.StaticServlet;
import com.google.gerrit.httpd.raw.ToolServlet;
import com.google.gerrit.reviewdb.Change;
-import com.google.gerrit.server.config.AuthConfig;
import com.google.gwtexpui.server.CacheControlFilter;
import com.google.inject.Key;
import com.google.inject.Provider;
@@ -38,12 +37,6 @@
import javax.servlet.http.HttpServletResponse;
class UrlModule extends ServletModule {
- private final AuthConfig authConfig;
-
- public UrlModule(AuthConfig authConfig) {
- this.authConfig = authConfig;
- }
-
@Override
protected void configureServlets() {
filter("/*").through(Key.get(CacheControlFilter.class));
@@ -60,14 +53,6 @@
serve("/static/*").with(StaticServlet.class);
serve("/tools/*").with(ToolServlet.class);
- filter("/p/*").through(ProjectAccessPathFilter.class);
- if (authConfig.isTrustContainerAuth()) {
- filter("/p/*").through(ContainerAuthFilter.class);
- } else {
- filter("/p/*").through(ProjectDigestFilter.class);
- }
- serve("/p/*").with(ProjectServlet.class);
-
serve("/Main.class").with(notFound());
serve("/com/google/gerrit/launcher/*").with(notFound());
serve("/servlet/*").with(notFound());
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/WebModule.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/WebModule.java
index 732cc3e..09e3f29 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/WebModule.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/WebModule.java
@@ -114,7 +114,7 @@
throw new ProvisionException("Unsupported loginType: " + authConfig.getAuthType());
}
- install(new UrlModule(authConfig));
+ install(new UrlModule());
install(new UiRpcModule());
install(new GerritRequestModule());
install(new ProjectServlet.Module());
diff --git a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/Daemon.java b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/Daemon.java
index 9125e29..95a5d54 100644
--- a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/Daemon.java
+++ b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/Daemon.java
@@ -17,6 +17,7 @@
import static com.google.gerrit.server.schema.DataSourceProvider.Context.MULTI_USER;
import com.google.gerrit.httpd.CacheBasedWebSession;
+import com.google.gerrit.httpd.GitOverHttpModule;
import com.google.gerrit.httpd.HttpCanonicalWebUrlProvider;
import com.google.gerrit.httpd.WebModule;
import com.google.gerrit.httpd.WebSshGlueModule;
@@ -245,6 +246,7 @@
private Injector createWebInjector() {
final List<Module> modules = new ArrayList<Module>();
modules.add(sshInjector.getInstance(WebModule.class));
+ modules.add(sysInjector.getInstance(GitOverHttpModule.class));
modules.add(sshInjector.getInstance(WebSshGlueModule.class));
modules.add(CacheBasedWebSession.module());
if (sshd) {
diff --git a/gerrit-war/src/main/java/com/google/gerrit/httpd/WebAppInitializer.java b/gerrit-war/src/main/java/com/google/gerrit/httpd/WebAppInitializer.java
index 979bc6b..dc10141 100644
--- a/gerrit-war/src/main/java/com/google/gerrit/httpd/WebAppInitializer.java
+++ b/gerrit-war/src/main/java/com/google/gerrit/httpd/WebAppInitializer.java
@@ -201,6 +201,7 @@
private Injector createWebInjector() {
final List<Module> modules = new ArrayList<Module>();
modules.add(sshInjector.getInstance(WebModule.class));
+ modules.add(sysInjector.getInstance(GitOverHttpModule.class));
modules.add(sshInjector.getInstance(WebSshGlueModule.class));
modules.add(CacheBasedWebSession.module());
return sysInjector.createChildInjector(modules);