import java.util.EnumSet import javax.servlet._ import gitbucket.core.controller._ 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) { 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) filter.mount(new SystemSettingsController) 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 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() } }