Newer
Older
gitbucket_jkp / src / main / scala / ScalatraBootstrap.scala

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()
  }
}