From 30a1968793af041528ff76ee8fecb68560b31b90 Mon Sep 17 00:00:00 2001 From: Naoki Takezoe Date: Fri, 17 Nov 2017 18:20:12 +0900 Subject: [PATCH] Handle plugin controllers by loop as same as CompositeScalatraFilter --- .../controller/CompositeScalatraFilter.scala | 19 +++++++++-------- .../core/servlet/PluginControllerFilter.scala | 21 +++++++++---------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/main/scala/gitbucket/core/controller/CompositeScalatraFilter.scala b/src/main/scala/gitbucket/core/controller/CompositeScalatraFilter.scala index 8f2777606..d422955a4 100644 --- a/src/main/scala/gitbucket/core/controller/CompositeScalatraFilter.scala +++ b/src/main/scala/gitbucket/core/controller/CompositeScalatraFilter.scala @@ -33,13 +33,14 @@ class CompositeScalatraFilter extends Filter { chain.doFilter(request, response) } - class MockFilterChain extends FilterChain { - - var continue: Boolean = false - - override def doFilter(request: ServletRequest, response: ServletResponse): Unit = { - continue = true - } - } - } + +class MockFilterChain extends FilterChain { + + var continue: Boolean = false + + override def doFilter(request: ServletRequest, response: ServletResponse): Unit = { + continue = true + } +} + diff --git a/src/main/scala/gitbucket/core/servlet/PluginControllerFilter.scala b/src/main/scala/gitbucket/core/servlet/PluginControllerFilter.scala index f8be024d0..21a8c7855 100644 --- a/src/main/scala/gitbucket/core/servlet/PluginControllerFilter.scala +++ b/src/main/scala/gitbucket/core/servlet/PluginControllerFilter.scala @@ -3,7 +3,7 @@ package gitbucket.core.servlet import javax.servlet._ import javax.servlet.http.HttpServletRequest -import gitbucket.core.controller.ControllerBase +import gitbucket.core.controller.MockFilterChain import gitbucket.core.plugin.PluginRegistry class PluginControllerFilter extends Filter { @@ -21,25 +21,24 @@ class PluginControllerFilter extends Filter { } override def doFilter(request: ServletRequest, response: ServletResponse, chain: FilterChain): Unit = { - val controller = PluginRegistry().getControllers().filter { case (_, path) => + val controllers = PluginRegistry().getControllers().filter { case (_, path) => val requestUri = request.asInstanceOf[HttpServletRequest].getRequestURI val start = path.replaceFirst("/\\*$", "/") (requestUri + "/").startsWith(start) } - val filterChainWrapper = controller.foldLeft(chain){ case (chain, (controller, _)) => - new FilterChainWrapper(controller, chain) - } - filterChainWrapper.doFilter(request, response) - } - - class FilterChainWrapper(controller: ControllerBase, chain: FilterChain) extends FilterChain { - override def doFilter(request: ServletRequest, response: ServletResponse): Unit = { + controllers.foreach { case (controller, _) => if(controller.config == null){ controller.init(filterConfig) } - controller.doFilter(request, response, chain) + val mockChain = new MockFilterChain() + controller.doFilter(request, response, mockChain) + if(mockChain.continue == false){ + return () + } } + + chain.doFilter(request, response) } }