Introduce extension point for scm http requests

This commit is contained in:
René Pfeuffer
2018-09-14 08:49:09 +02:00
parent c5daacfd58
commit a075962a66
6 changed files with 48 additions and 2 deletions

View File

@@ -0,0 +1,14 @@
package sonia.scm.web;
import com.google.inject.BindingAnnotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@BindingAnnotation
@Target({ ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER })
@Retention(RetentionPolicy.RUNTIME)
@interface Git {
}

View File

@@ -4,6 +4,7 @@ import sonia.scm.api.v2.resources.ScmPathInfoStore;
import sonia.scm.config.ScmConfiguration;
import sonia.scm.plugin.Extension;
import sonia.scm.repository.spi.InitializingHttpScmProtocolWrapper;
import sonia.scm.repository.spi.ScmProviderHttpServlet;
import javax.inject.Inject;
import javax.inject.Provider;
@@ -13,7 +14,7 @@ import javax.inject.Singleton;
@Extension
public class GitScmProtocolProviderWrapper extends InitializingHttpScmProtocolWrapper {
@Inject
public GitScmProtocolProviderWrapper(Provider<ScmGitServlet> servletProvider, Provider<GitPermissionFilter> permissionFilter, Provider<ScmPathInfoStore> uriInfoStore, ScmConfiguration scmConfiguration) {
public GitScmProtocolProviderWrapper(@Git Provider<ScmProviderHttpServlet> servletProvider, Provider<GitPermissionFilter> permissionFilter, Provider<ScmPathInfoStore> uriInfoStore, ScmConfiguration scmConfiguration) {
super(servletProvider, permissionFilter, uriInfoStore, scmConfiguration);
}

View File

@@ -41,6 +41,7 @@ import org.mapstruct.factory.Mappers;
import sonia.scm.api.v2.resources.GitConfigDtoToGitConfigMapper;
import sonia.scm.api.v2.resources.GitConfigToGitConfigDtoMapper;
import sonia.scm.plugin.Extension;
import sonia.scm.repository.spi.ScmProviderHttpServlet;
import sonia.scm.web.lfs.LfsBlobStoreFactory;
/**
@@ -63,5 +64,7 @@ public class GitServletModule extends ServletModule
bind(GitConfigDtoToGitConfigMapper.class).to(Mappers.getMapper(GitConfigDtoToGitConfigMapper.class).getClass());
bind(GitConfigToGitConfigDtoMapper.class).to(Mappers.getMapper(GitConfigToGitConfigDtoMapper.class).getClass());
bind(ScmProviderHttpServlet.class).annotatedWith(Git.class).toProvider(ScmGitServletProvider.class);
}
}

View File

@@ -0,0 +1,22 @@
package sonia.scm.web;
import com.google.inject.Inject;
import sonia.scm.repository.spi.ScmProviderHttpServlet;
import sonia.scm.repository.spi.ScmProviderHttpServletFactory;
import sonia.scm.util.Decorators;
import javax.inject.Provider;
import java.util.Set;
public class ScmGitServletProvider implements Provider<ScmProviderHttpServlet> {
@Inject
private Provider<ScmGitServlet> scmGitServlet;
@Inject(optional = true)
private Set<ScmProviderHttpServletFactory> decoratorFactories;
@Override
public ScmProviderHttpServlet get() {
return Decorators.decorate(scmGitServlet.get(), decoratorFactories);
}
}