mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-02 11:35:57 +01:00
Implement gzip filter for svn as extension
This commit is contained in:
@@ -34,38 +34,34 @@ package sonia.scm.web;
|
|||||||
|
|
||||||
//~--- non-JDK imports --------------------------------------------------------
|
//~--- non-JDK imports --------------------------------------------------------
|
||||||
|
|
||||||
import com.google.inject.Inject;
|
|
||||||
import com.google.inject.Singleton;
|
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import sonia.scm.filter.GZipFilter;
|
import sonia.scm.filter.GZipFilter;
|
||||||
|
import sonia.scm.repository.Repository;
|
||||||
import sonia.scm.repository.SvnRepositoryHandler;
|
import sonia.scm.repository.SvnRepositoryHandler;
|
||||||
|
import sonia.scm.repository.spi.ScmProviderHttpServlet;
|
||||||
//~--- JDK imports ------------------------------------------------------------
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
import javax.servlet.FilterChain;
|
import javax.servlet.FilterChain;
|
||||||
import javax.servlet.FilterConfig;
|
import javax.servlet.FilterConfig;
|
||||||
|
import javax.servlet.ServletConfig;
|
||||||
import javax.servlet.ServletException;
|
import javax.servlet.ServletException;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
//~--- JDK imports ------------------------------------------------------------
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author Sebastian Sdorra
|
* @author Sebastian Sdorra
|
||||||
*/
|
*/
|
||||||
@Singleton
|
public class SvnGZipFilter extends GZipFilter implements ScmProviderHttpServlet
|
||||||
public class SvnGZipFilter extends GZipFilter
|
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
private static final Logger logger = LoggerFactory.getLogger(SvnGZipFilter.class);
|
||||||
* the logger for SvnGZipFilter
|
|
||||||
*/
|
private final SvnRepositoryHandler handler;
|
||||||
private static final Logger logger =
|
private final ScmProviderHttpServlet delegate;
|
||||||
LoggerFactory.getLogger(SvnGZipFilter.class);
|
|
||||||
|
|
||||||
//~--- constructors ---------------------------------------------------------
|
//~--- constructors ---------------------------------------------------------
|
||||||
|
|
||||||
@@ -75,10 +71,10 @@ public class SvnGZipFilter extends GZipFilter
|
|||||||
*
|
*
|
||||||
* @param handler
|
* @param handler
|
||||||
*/
|
*/
|
||||||
@Inject
|
public SvnGZipFilter(SvnRepositoryHandler handler, ScmProviderHttpServlet delegate)
|
||||||
public SvnGZipFilter(SvnRepositoryHandler handler)
|
|
||||||
{
|
{
|
||||||
this.handler = handler;
|
this.handler = handler;
|
||||||
|
this.delegate = delegate;
|
||||||
}
|
}
|
||||||
|
|
||||||
//~--- methods --------------------------------------------------------------
|
//~--- methods --------------------------------------------------------------
|
||||||
@@ -134,8 +130,30 @@ public class SvnGZipFilter extends GZipFilter
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//~--- fields ---------------------------------------------------------------
|
@Override
|
||||||
|
public void service(HttpServletRequest request, HttpServletResponse response, Repository repository) throws ServletException, IOException {
|
||||||
|
if (handler.getConfig().isEnabledGZip())
|
||||||
|
{
|
||||||
|
if (logger.isTraceEnabled())
|
||||||
|
{
|
||||||
|
logger.trace("encode svn request with gzip");
|
||||||
|
}
|
||||||
|
|
||||||
/** Field description */
|
super.doFilter(request, response, (servletRequest, servletResponse) -> delegate.service((HttpServletRequest) servletRequest, (HttpServletResponse) servletResponse, repository));
|
||||||
private SvnRepositoryHandler handler;
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (logger.isTraceEnabled())
|
||||||
|
{
|
||||||
|
logger.trace("skip gzip encoding");
|
||||||
|
}
|
||||||
|
|
||||||
|
delegate.service(request, response, repository);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void init(ServletConfig config) throws ServletException {
|
||||||
|
delegate.init(config);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,28 @@
|
|||||||
|
package sonia.scm.web;
|
||||||
|
|
||||||
|
import com.google.inject.Inject;
|
||||||
|
import sonia.scm.plugin.Extension;
|
||||||
|
import sonia.scm.repository.SvnRepositoryHandler;
|
||||||
|
import sonia.scm.repository.spi.ScmProviderHttpServlet;
|
||||||
|
import sonia.scm.repository.spi.ScmProviderHttpServletDecoratorFactory;
|
||||||
|
|
||||||
|
@Extension
|
||||||
|
public class SvnGZipFilterFactory implements ScmProviderHttpServletDecoratorFactory {
|
||||||
|
|
||||||
|
private final SvnRepositoryHandler handler;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
public SvnGZipFilterFactory(SvnRepositoryHandler handler) {
|
||||||
|
this.handler = handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean handlesScmType(String type) {
|
||||||
|
return SvnRepositoryHandler.TYPE_NAME.equals(type);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ScmProviderHttpServlet createDecorator(ScmProviderHttpServlet delegate) {
|
||||||
|
return new SvnGZipFilter(handler, delegate);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user