Newer
Older
gitbucket_jkp / src / main / scala / ScalatraBootstrap.scala
  1. import java.util.EnumSet
  2. import javax.servlet._
  3.  
  4. import gitbucket.core.controller.{ReleaseController, _}
  5. import gitbucket.core.plugin.PluginRegistry
  6. import gitbucket.core.service.SystemSettingsService
  7. import gitbucket.core.servlet._
  8. import gitbucket.core.util.Directory
  9. import org.scalatra._
  10.  
  11. class ScalatraBootstrap extends LifeCycle with SystemSettingsService {
  12. override def init(context: ServletContext): Unit = {
  13.  
  14. val settings = loadSystemSettings()
  15. if (settings.baseUrl.exists(_.startsWith("https://"))) {
  16. context.getSessionCookieConfig.setSecure(true)
  17. }
  18.  
  19. // Register TransactionFilter at first
  20. context.addFilter("transactionFilter", new TransactionFilter)
  21. context
  22. .getFilterRegistration("transactionFilter")
  23. .addMappingForUrlPatterns(EnumSet.allOf(classOf[DispatcherType]), true, "/*")
  24. context.addFilter("gitAuthenticationFilter", new GitAuthenticationFilter)
  25. context
  26. .getFilterRegistration("gitAuthenticationFilter")
  27. .addMappingForUrlPatterns(EnumSet.allOf(classOf[DispatcherType]), true, "/git/*")
  28. context.addFilter("apiAuthenticationFilter", new ApiAuthenticationFilter)
  29. context
  30. .getFilterRegistration("apiAuthenticationFilter")
  31. .addMappingForUrlPatterns(EnumSet.allOf(classOf[DispatcherType]), true, "/api/*")
  32.  
  33. // Register controllers
  34. context.mount(new PreProcessController, "/*")
  35.  
  36. context.addFilter("pluginControllerFilter", new PluginControllerFilter)
  37. context
  38. .getFilterRegistration("pluginControllerFilter")
  39. .addMappingForUrlPatterns(EnumSet.allOf(classOf[DispatcherType]), true, "/*")
  40.  
  41. context.mount(new FileUploadController, "/upload")
  42.  
  43. val filter = new CompositeScalatraFilter()
  44. filter.mount(new IndexController, "/")
  45. filter.mount(new ApiController, "/api/v3")
  46. filter.mount(new SystemSettingsController, "/admin")
  47. filter.mount(new DashboardController, "/*")
  48. filter.mount(new AccountController, "/*")
  49. filter.mount(new RepositoryViewerController, "/*")
  50. filter.mount(new WikiController, "/*")
  51. filter.mount(new LabelsController, "/*")
  52. filter.mount(new PrioritiesController, "/*")
  53. filter.mount(new MilestonesController, "/*")
  54. filter.mount(new IssuesController, "/*")
  55. filter.mount(new PullRequestsController, "/*")
  56. filter.mount(new ReleaseController, "/*")
  57. filter.mount(new RepositorySettingsController, "/*")
  58.  
  59. context.addFilter("compositeScalatraFilter", filter)
  60. context
  61. .getFilterRegistration("compositeScalatraFilter")
  62. .addMappingForUrlPatterns(EnumSet.allOf(classOf[DispatcherType]), true, "/*")
  63.  
  64. // Create GITBUCKET_HOME directory if it does not exist
  65. val dir = new java.io.File(Directory.GitBucketHome)
  66. if (!dir.exists) {
  67. dir.mkdirs()
  68. }
  69. }
  70.  
  71. override def destroy(context: ServletContext): Unit = {
  72. Database.closeDataSource()
  73. }
  74. }