mirror of
https://github.com/gitbucket/gitbucket.git
synced 2025-11-09 23:15:49 +01:00
Move GitRepositoryServlet and BasicAuthenticationFilter to util package.
This commit is contained in:
@@ -1,52 +1,52 @@
|
|||||||
package app
|
package util
|
||||||
|
|
||||||
import javax.servlet._
|
import javax.servlet._
|
||||||
import javax.servlet.http._
|
import javax.servlet.http._
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides BASIC Authentication for [[app.GitRepositoryServlet]].
|
* Provides BASIC Authentication for [[app.GitRepositoryServlet]].
|
||||||
*/
|
*/
|
||||||
class BasicAuthenticationFilter extends Filter {
|
class BasicAuthenticationFilter extends Filter {
|
||||||
|
|
||||||
def init(config: FilterConfig) = {}
|
def init(config: FilterConfig) = {}
|
||||||
|
|
||||||
def destroy(): Unit = {}
|
def destroy(): Unit = {}
|
||||||
|
|
||||||
def doFilter(req: ServletRequest, res: ServletResponse, chain: FilterChain): Unit = {
|
def doFilter(req: ServletRequest, res: ServletResponse, chain: FilterChain): Unit = {
|
||||||
val request = req.asInstanceOf[HttpServletRequest]
|
val request = req.asInstanceOf[HttpServletRequest]
|
||||||
val response = res.asInstanceOf[HttpServletResponse]
|
val response = res.asInstanceOf[HttpServletResponse]
|
||||||
val session = request.getSession
|
val session = request.getSession
|
||||||
|
|
||||||
try {
|
try {
|
||||||
session.getAttribute("USER_INFO") match {
|
session.getAttribute("USER_INFO") match {
|
||||||
case null => request.getHeader("Authorization") match {
|
case null => request.getHeader("Authorization") match {
|
||||||
case null => requireAuth(response)
|
case null => requireAuth(response)
|
||||||
case auth => decodeAuthHeader(auth).split(":") match {
|
case auth => decodeAuthHeader(auth).split(":") match {
|
||||||
// TODO authenticate using registered user info
|
// TODO authenticate using registered user info
|
||||||
case Array(username, password) if(username == "gitbucket" && password == "password") => {
|
case Array(username, password) if(username == "gitbucket" && password == "password") => {
|
||||||
session.setAttribute("USER_INFO", "gitbucket")
|
session.setAttribute("USER_INFO", "gitbucket")
|
||||||
chain.doFilter(req, res)
|
chain.doFilter(req, res)
|
||||||
}
|
}
|
||||||
case _ => requireAuth(response)
|
case _ => requireAuth(response)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case user => chain.doFilter(req, res)
|
case user => chain.doFilter(req, res)
|
||||||
}
|
}
|
||||||
} catch {
|
} catch {
|
||||||
case _: Exception => requireAuth(response)
|
case _: Exception => requireAuth(response)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private def requireAuth(response: HttpServletResponse): Unit = {
|
private def requireAuth(response: HttpServletResponse): Unit = {
|
||||||
response.setHeader("WWW-Authenticate", "BASIC realm=\"GitBucket\"")
|
response.setHeader("WWW-Authenticate", "BASIC realm=\"GitBucket\"")
|
||||||
response.sendError(HttpServletResponse.SC_UNAUTHORIZED)
|
response.sendError(HttpServletResponse.SC_UNAUTHORIZED)
|
||||||
}
|
}
|
||||||
|
|
||||||
private def decodeAuthHeader(header: String): String = {
|
private def decodeAuthHeader(header: String): String = {
|
||||||
try {
|
try {
|
||||||
new String(new sun.misc.BASE64Decoder().decodeBuffer(header.substring(6)))
|
new String(new sun.misc.BASE64Decoder().decodeBuffer(header.substring(6)))
|
||||||
} catch {
|
} catch {
|
||||||
case _: Throwable => ""
|
case _: Throwable => ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,39 +1,37 @@
|
|||||||
package app
|
package util
|
||||||
|
|
||||||
import java.io._
|
import java.io._
|
||||||
import javax.servlet._
|
import javax.servlet._
|
||||||
import javax.servlet.http._
|
import javax.servlet.http._
|
||||||
import util.Directory
|
import util.Directory
|
||||||
import org.eclipse.jgit.api.Git
|
import org.eclipse.jgit.http.server.GitServlet
|
||||||
import org.eclipse.jgit.lib.Ref
|
import org.slf4j.LoggerFactory
|
||||||
import org.eclipse.jgit.http.server.GitServlet
|
|
||||||
import org.slf4j.LoggerFactory
|
/**
|
||||||
|
* Provides Git repository via HTTP.
|
||||||
/**
|
*
|
||||||
* Provides Git repository via HTTP.
|
* This servlet provides only Git repository functionality.
|
||||||
*
|
* Authentication is provided by [[app.BasicAuthenticationFilter]].
|
||||||
* This servlet provides only Git repository functionality.
|
*/
|
||||||
* Authentication is provided by [[app.BasicAuthenticationFilter]].
|
class GitRepositoryServlet extends GitServlet {
|
||||||
*/
|
|
||||||
class GitRepositoryServlet extends GitServlet {
|
private val logger = LoggerFactory.getLogger(classOf[GitRepositoryServlet])
|
||||||
|
|
||||||
private val logger = LoggerFactory.getLogger(classOf[GitRepositoryServlet])
|
// TODO are there any other ways...?
|
||||||
|
override def init(config: ServletConfig): Unit = {
|
||||||
// TODO are there any other ways...?
|
super.init(new ServletConfig(){
|
||||||
override def init(config: ServletConfig): Unit = {
|
def getInitParameter(name: String): String = name match {
|
||||||
super.init(new ServletConfig(){
|
case "base-path" => Directory.RepositoryHome
|
||||||
def getInitParameter(name: String): String = name match {
|
case "export-all" => "true"
|
||||||
case "base-path" => Directory.RepositoryHome
|
case name => config.getInitParameter(name)
|
||||||
case "export-all" => "true"
|
}
|
||||||
case name => config.getInitParameter(name)
|
def getInitParameterNames(): java.util.Enumeration[String] = {
|
||||||
}
|
config.getInitParameterNames
|
||||||
def getInitParameterNames(): java.util.Enumeration[String] = {
|
}
|
||||||
config.getInitParameterNames
|
|
||||||
}
|
def getServletContext(): ServletContext = config.getServletContext
|
||||||
|
def getServletName(): String = config.getServletName
|
||||||
def getServletContext(): ServletContext = config.getServletContext
|
});
|
||||||
def getServletName(): String = config.getServletName
|
}
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
<servlet>
|
<servlet>
|
||||||
<servlet-name>GitRepositoryServlet</servlet-name>
|
<servlet-name>GitRepositoryServlet</servlet-name>
|
||||||
<servlet-class>app.GitRepositoryServlet</servlet-class>
|
<servlet-class>util.GitRepositoryServlet</servlet-class>
|
||||||
</servlet>
|
</servlet>
|
||||||
|
|
||||||
<servlet-mapping>
|
<servlet-mapping>
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
|
|
||||||
<filter>
|
<filter>
|
||||||
<filter-name>BasicAuthenticationFilter</filter-name>
|
<filter-name>BasicAuthenticationFilter</filter-name>
|
||||||
<filter-class>app.BasicAuthenticationFilter</filter-class>
|
<filter-class>util.BasicAuthenticationFilter</filter-class>
|
||||||
</filter>
|
</filter>
|
||||||
|
|
||||||
<filter-mapping>
|
<filter-mapping>
|
||||||
|
|||||||
Reference in New Issue
Block a user