Refactoring

This commit is contained in:
Naoki Takezoe
2017-11-17 21:18:53 +09:00
parent 3745243078
commit 5d2ccfb0df
2 changed files with 37 additions and 20 deletions

View File

@@ -1,6 +1,7 @@
package gitbucket.core.servlet
import javax.servlet._
import javax.servlet.http.HttpServletRequest
import org.scalatra.ScalatraFilter
@@ -27,20 +28,27 @@ class CompositeScalatraFilter extends Filter {
}
override def doFilter(request: ServletRequest, response: ServletResponse, chain: FilterChain): Unit = {
filters.foreach { case (filter, path) =>
val mockChain = new MockFilterChain()
filter.doFilter(request, response, mockChain)
if(mockChain.continue == false){
return ()
val requestUri = request.asInstanceOf[HttpServletRequest].getRequestURI
filters
.filter { case (_, path) =>
val start = path.replaceFirst("/\\*$", "/")
(requestUri + "/").startsWith(start)
}
}
.foreach { case (filter, _) =>
val mockChain = new MockFilterChain()
filter.doFilter(request, response, mockChain)
if(mockChain.continue == false){
return ()
}
}
chain.doFilter(request, response)
}
}
class MockFilterChain extends FilterChain {
var continue: Boolean = false
override def doFilter(request: ServletRequest, response: ServletResponse): Unit = {
@@ -48,3 +56,8 @@ class MockFilterChain extends FilterChain {
}
}
class FilterChainFilter(chain: FilterChain) extends Filter {
override def init(filterConfig: FilterConfig): Unit = ()
override def destroy(): Unit = ()
override def doFilter(request: ServletRequest, response: ServletResponse, mockChain: FilterChain) = chain.doFilter(request, response)
}

View File

@@ -3,6 +3,7 @@ package gitbucket.core.servlet
import javax.servlet._
import javax.servlet.http.HttpServletRequest
import gitbucket.core.controller.ControllerBase
import gitbucket.core.plugin.PluginRegistry
class PluginControllerFilter extends Filter {
@@ -20,22 +21,25 @@ class PluginControllerFilter extends Filter {
}
override def doFilter(request: ServletRequest, response: ServletResponse, chain: FilterChain): Unit = {
val controllers = PluginRegistry().getControllers().filter { case (_, path) =>
val requestUri = request.asInstanceOf[HttpServletRequest].getRequestURI
val start = path.replaceFirst("/\\*$", "/")
(requestUri + "/").startsWith(start)
}
val requestUri = request.asInstanceOf[HttpServletRequest].getRequestURI
controllers.foreach { case (controller, _) =>
if(controller.config == null){
controller.init(filterConfig)
PluginRegistry().getControllers()
.filter { case (_, path) =>
val start = path.replaceFirst("/\\*$", "/")
(requestUri + "/").startsWith(start)
}
val mockChain = new MockFilterChain()
controller.doFilter(request, response, mockChain)
if(mockChain.continue == false){
return ()
.foreach { case (controller, _) =>
controller match {
case x: ControllerBase if(x.config == null) => x.init(filterConfig)
case _ => ()
}
val mockChain = new MockFilterChain()
controller.doFilter(request, response, mockChain)
if(mockChain.continue == false){
return ()
}
}
}
chain.doFilter(request, response)
}