Turn off http features not intended for slave
If daemon is loaded as a slave, modules which have features
intended for master won't be loaded.
Change-Id: I2314bf0eef7f22c5aa439fbd5d9ecaa8ee300e34
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/GerritOptions.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/GerritOptions.java
index 4c93d26..adfe86c 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/GerritOptions.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/GerritOptions.java
@@ -16,12 +16,18 @@
public class GerritOptions {
private final boolean headless;
+ private final boolean slave;
- public GerritOptions(boolean headless) {
+ public GerritOptions(boolean headless, boolean slave) {
this.headless = headless;
+ this.slave = slave;
}
public boolean enableDefaultUi() {
return !headless;
}
+
+ public boolean enableMasterFeatures() {
+ return !slave;
+ }
}
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/GitOverHttpServlet.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/GitOverHttpServlet.java
index 0c4f60c..1f26aa3 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/GitOverHttpServlet.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/GitOverHttpServlet.java
@@ -98,12 +98,20 @@
}
static class Module extends AbstractModule {
+
+ private final boolean enableReceive;
+
+ public Module(boolean enableReceive) {
+ this.enableReceive = enableReceive;
+ }
+
@Override
protected void configure() {
bind(Resolver.class);
bind(UploadFactory.class);
bind(UploadFilter.class);
- bind(ReceiveFactory.class);
+ bind(new TypeLiteral<ReceivePackFactory<HttpServletRequest>>() {}).to(
+ enableReceive ? ReceiveFactory.class : DisabledReceiveFactory.class);
bind(ReceiveFilter.class);
install(new CacheModule() {
@Override
@@ -119,9 +127,10 @@
}
@Inject
- GitOverHttpServlet(Resolver resolver,
- UploadFactory upload, UploadFilter uploadFilter,
- ReceiveFactory receive, ReceiveFilter receiveFilter) {
+ GitOverHttpServlet(Resolver resolver, UploadFactory upload,
+ UploadFilter uploadFilter,
+ ReceivePackFactory<HttpServletRequest> receive,
+ ReceiveFilter receiveFilter) {
setRepositoryResolver(resolver);
setAsIsFileService(AsIsFileService.DISABLED);
@@ -308,6 +317,15 @@
}
}
+ static class DisabledReceiveFactory implements
+ ReceivePackFactory<HttpServletRequest> {
+ @Override
+ public ReceivePack create(HttpServletRequest req, Repository db)
+ throws ServiceNotEnabledException {
+ throw new ServiceNotEnabledException();
+ }
+ }
+
static class ReceiveFilter implements Filter {
private final Cache<AdvertisedObjectsCacheKey, Set<ObjectId>> cache;
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 d14fa9a..e76759d 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
@@ -82,6 +82,36 @@
}
install(new RunAsFilter.Module());
+ if (options.enableMasterFeatures()) {
+ installAuthModule();
+ install(new UrlModule(urlConfig, options));
+ install(new UiRpcModule());
+ }
+ install(new GerritRequestModule());
+ install(new GitOverHttpServlet.Module(options.enableMasterFeatures()));
+
+ bind(GitWebConfig.class).toInstance(gitWebConfig);
+ if (gitWebConfig.getGitwebCGI() != null) {
+ install(new GitWebModule());
+ }
+
+ bind(ContactStore.class).toProvider(ContactStoreProvider.class).in(
+ SINGLETON);
+ bind(GerritConfigProvider.class);
+ bind(GerritConfig.class).toProvider(GerritConfigProvider.class);
+ DynamicSet.setOf(binder(), WebUiPlugin.class);
+
+ install(new AsyncReceiveCommits.Module());
+
+ bind(SocketAddress.class).annotatedWith(RemotePeer.class).toProvider(
+ HttpRemotePeerProvider.class).in(RequestScoped.class);
+
+ bind(ProxyProperties.class).toProvider(ProxyPropertiesProvider.class);
+
+ listener().toInstance(registerInParentInjectors());
+ }
+
+ private void installAuthModule() {
switch (authConfig.getAuthType()) {
case HTTP:
case HTTP_LDAP:
@@ -109,30 +139,5 @@
default:
throw new ProvisionException("Unsupported loginType: " + authConfig.getAuthType());
}
-
- install(new UrlModule(urlConfig, options));
- install(new UiRpcModule());
- install(new GerritRequestModule());
- install(new GitOverHttpServlet.Module());
-
- bind(GitWebConfig.class).toInstance(gitWebConfig);
- if (gitWebConfig.getGitwebCGI() != null) {
- install(new GitWebModule());
- }
-
- bind(ContactStore.class).toProvider(ContactStoreProvider.class).in(
- SINGLETON);
- bind(GerritConfigProvider.class);
- bind(GerritConfig.class).toProvider(GerritConfigProvider.class);
- DynamicSet.setOf(binder(), WebUiPlugin.class);
-
- install(new AsyncReceiveCommits.Module());
-
- bind(SocketAddress.class).annotatedWith(RemotePeer.class).toProvider(
- HttpRemotePeerProvider.class).in(RequestScoped.class);
-
- bind(ProxyProperties.class).toProvider(ProxyPropertiesProvider.class);
-
- listener().toInstance(registerInParentInjectors());
}
}
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 cc00294..5be244b 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
@@ -356,7 +356,7 @@
modules.add(new AbstractModule() {
@Override
protected void configure() {
- bind(GerritOptions.class).toInstance(new GerritOptions(headless));
+ bind(GerritOptions.class).toInstance(new GerritOptions(headless, slave));
if (test) {
bind(SecureStore.class).toProvider(SecureStoreProvider.class);
}
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 fbe2743..aba9013 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
@@ -310,7 +310,7 @@
modules.add(new AbstractModule() {
@Override
protected void configure() {
- bind(GerritOptions.class).toInstance(new GerritOptions(false));
+ bind(GerritOptions.class).toInstance(new GerritOptions(false, false));
}
});
modules.add(GarbageCollectionRunner.module());