All Downloads are FREE. Search and download functionalities are using the official Maven repository.

gitbucket.core.controller.PreProcessController.scala Maven / Gradle / Ivy

The newest version!
package gitbucket.core.controller

import gitbucket.core.plugin.PluginRegistry
import org.scalatra.MovedPermanently

class PreProcessController extends PreProcessControllerBase

trait PreProcessControllerBase extends ControllerBase {

  /**
   * Provides GitHub compatible URLs (e.g. http://localhost:8080/owner/repo.git) for Git client.
   */
  get("/*/*/info/refs") {
    val query = Option(request.getQueryString).map("?" + _).getOrElse("")
    halt(MovedPermanently(baseUrl + "/git" + request.getRequestURI + query))
  }

  /**
   * Provides GitHub compatible URLs for GitLFS client.
   */
  post("/*/*/info/lfs/objects/batch") {
    val dispatcher = request.getRequestDispatcher("/git" + request.getRequestURI)
    dispatcher.forward(request, response)
  }

  /**
   * 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.basicBehavior.allowAnonymousAccess, context.loginAccount.isEmpty) {
    if (
      !context.currentPath.startsWith("/assets") && !context.currentPath.startsWith("/signin") &&
      !context.currentPath.startsWith("/register") && !context.currentPath.endsWith("/info/refs") &&
      !context.currentPath.startsWith("/plugin-assets") &&
      !PluginRegistry().getAnonymousAccessiblePaths().exists { path =>
        context.currentPath.startsWith(path)
      }
    ) {
      Unauthorized()
    } else {
      pass()
    }
  }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy