diff --git a/src/main/scala/ScalatraBootstrap.scala b/src/main/scala/ScalatraBootstrap.scala index 7bc40ca..80e3a58 100644 --- a/src/main/scala/ScalatraBootstrap.scala +++ b/src/main/scala/ScalatraBootstrap.scala @@ -25,11 +25,9 @@ context.getFilterRegistration("gitAuthenticationFilter").addMappingForUrlPatterns(EnumSet.allOf(classOf[DispatcherType]), true, "/git/*") context.addFilter("apiAuthenticationFilter", new ApiAuthenticationFilter) context.getFilterRegistration("apiAuthenticationFilter").addMappingForUrlPatterns(EnumSet.allOf(classOf[DispatcherType]), true, "/api/v3/*") - context.addFilter("ghCompatRepositoryAccessFilter", new GHCompatRepositoryAccessFilter) - context.getFilterRegistration("ghCompatRepositoryAccessFilter").addMappingForUrlPatterns(EnumSet.allOf(classOf[DispatcherType]), true, "/*") // Register controllers - context.mount(new AnonymousAccessController, "/*") + context.mount(new PreProcessController, "/*") context.addFilter("pluginControllerFilter", new PluginControllerFilter) context.getFilterRegistration("pluginControllerFilter").addMappingForUrlPatterns(EnumSet.allOf(classOf[DispatcherType]), true, "/*") diff --git a/src/main/scala/gitbucket/core/controller/AnonymousAccessController.scala b/src/main/scala/gitbucket/core/controller/AnonymousAccessController.scala deleted file mode 100644 index 180b164..0000000 --- a/src/main/scala/gitbucket/core/controller/AnonymousAccessController.scala +++ /dev/null @@ -1,14 +0,0 @@ -package gitbucket.core.controller - -class AnonymousAccessController extends AnonymousAccessControllerBase - -trait AnonymousAccessControllerBase extends ControllerBase { - get(!context.settings.allowAnonymousAccess, context.loginAccount.isEmpty) { - if(!context.currentPath.startsWith("/assets") && !context.currentPath.startsWith("/signin") && - !context.currentPath.startsWith("/register")) { - Unauthorized() - } else { - pass() - } - } -} diff --git a/src/main/scala/gitbucket/core/controller/PreProcessController.scala b/src/main/scala/gitbucket/core/controller/PreProcessController.scala new file mode 100644 index 0000000..1c5d263 --- /dev/null +++ b/src/main/scala/gitbucket/core/controller/PreProcessController.scala @@ -0,0 +1,40 @@ +package gitbucket.core.controller + +import org.scalatra.MovedPermanently + +class PreProcessController extends PreProcessControllerBase + +trait PreProcessControllerBase extends ControllerBase { + + /** + * Provides GitHub compatible URLs for Git client. + * + *
/:user/:repo.git/
- */
- private val githubRepositoryPattern = """^/[^/]+/[^/]+\.git/.*""".r
-
- override def init(filterConfig: FilterConfig) = {}
-
- override def doFilter(req: ServletRequest, res: ServletResponse, chain: FilterChain) = {
- implicit val request = req.asInstanceOf[HttpServletRequest]
- val agent = request.getHeader("USER-AGENT")
- val response = res.asInstanceOf[HttpServletResponse]
- val requestPath = request.getRequestURI.substring(request.getContextPath.length)
- val queryString = if (request.getQueryString != null) "?" + request.getQueryString else ""
-
- requestPath match {
- case githubRepositoryPattern() if agent != null && agent.toLowerCase.indexOf("git") >= 0 =>
- response.sendRedirect(baseUrl + "/git" + requestPath + queryString)
- case _ =>
- chain.doFilter(req, res)
- }
- }
-
- override def destroy() = {}
-
-}