diff --git a/src/main/scala/ScalatraBootstrap.scala b/src/main/scala/ScalatraBootstrap.scala index e2749a2..80e3a58 100644 --- a/src/main/scala/ScalatraBootstrap.scala +++ b/src/main/scala/ScalatraBootstrap.scala @@ -27,8 +27,7 @@ context.getFilterRegistration("apiAuthenticationFilter").addMappingForUrlPatterns(EnumSet.allOf(classOf[DispatcherType]), true, "/api/v3/*") // Register controllers - context.mount(new GitHubCompatibleAccessController, "/*") - 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/GitHubCompatibleAccessController.scala b/src/main/scala/gitbucket/core/controller/GitHubCompatibleAccessController.scala deleted file mode 100644 index 2bd9abb..0000000 --- a/src/main/scala/gitbucket/core/controller/GitHubCompatibleAccessController.scala +++ /dev/null @@ -1,29 +0,0 @@ -package gitbucket.core.controller - -import org.scalatra.MovedPermanently - -class GitHubCompatibleAccessController extends GitHubCompatibleAccessControllerBase - -/** - * Provides GitHub compatible URLs for Git client. - * - * - */ -trait GitHubCompatibleAccessControllerBase extends ControllerBase { - /** - * Git client initiates a connection with /info/refs - * - * @see https://git-scm.com/book/en/v2/Git-Internals-Transfer-Protocols - */ - get("/*/*/info/refs") { - redirectToGitServlet() - } - - private def redirectToGitServlet(): Unit = { - val query = Option(request.getQueryString).map("?" + _).getOrElse("") - halt(MovedPermanently(baseUrl + "/git" + request.getRequestURI + query)) - } -} 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. + * + * + * + * @see https://git-scm.com/book/en/v2/Git-Internals-Transfer-Protocols + */ + get("/*/*/info/refs") { + val query = Option(request.getQueryString).map("?" + _).getOrElse("") + halt(MovedPermanently(baseUrl + "/git" + request.getRequestURI + query)) + } + + /** + * Filter requests from anonymous users. + * + * If anonymous access is allowed, pass all requests. + * But if it's not allowed, demands authentication except some paths. + */ + get(!context.settings.allowAnonymousAccess, context.loginAccount.isEmpty) { + if(!context.currentPath.startsWith("/assets") && !context.currentPath.startsWith("/signin") && + !context.currentPath.startsWith("/register")) { + Unauthorized() + } else { + pass() + } + } + + +}