import java.util.EnumSet import javax.servlet._ import gitbucket.core.controller.{ReleaseController, _} import gitbucket.core.plugin.PluginRegistry import gitbucket.core.service.SystemSettingsService import gitbucket.core.servlet._ import gitbucket.core.util.Directory import org.scalatra._ class ScalatraBootstrap extends LifeCycle with SystemSettingsService { override def init(context: ServletContext): Unit = { val settings = loadSystemSettings() if (settings.baseUrl.exists(_.startsWith("https://"))) { context.getSessionCookieConfig.setSecure(true) } // Register TransactionFilter and BasicAuthenticationFilter at first context.addFilter("transactionFilter", new TransactionFilter) context .getFilterRegistration("transactionFilter") .addMappingForUrlPatterns(EnumSet.allOf(classOf[DispatcherType]), true, "/*") context.addFilter("gitAuthenticationFilter", new GitAuthenticationFilter) 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/*") // Register controllers context.mount(new PreProcessController, "/*") context.addFilter("pluginControllerFilter", new PluginControllerFilter) context .getFilterRegistration("pluginControllerFilter") .addMappingForUrlPatterns(EnumSet.allOf(classOf[DispatcherType]), true, "/*") context.mount(new FileUploadController, "/upload") val filter = new CompositeScalatraFilter() filter.mount(new IndexController, "/") filter.mount(new ApiController, "/api/v3") filter.mount(new SystemSettingsController, "/admin") filter.mount(new DashboardController, "/*") filter.mount(new AccountController, "/*") filter.mount(new RepositoryViewerController, "/*") filter.mount(new WikiController, "/*") filter.mount(new LabelsController, "/*") filter.mount(new PrioritiesController, "/*") filter.mount(new MilestonesController, "/*") filter.mount(new IssuesController, "/*") filter.mount(new PullRequestsController, "/*") filter.mount(new ReleaseController, "/*") filter.mount(new RepositorySettingsController, "/*") context.addFilter("compositeScalatraFilter", filter) context .getFilterRegistration("compositeScalatraFilter") .addMappingForUrlPatterns(EnumSet.allOf(classOf[DispatcherType]), true, "/*") // Create GITBUCKET_HOME directory if it does not exist val dir = new java.io.File(Directory.GitBucketHome) if (!dir.exists) { dir.mkdirs() } } override def destroy(context: ServletContext): Unit = { Database.closeDataSource() } }