Move GitRepositoryServlet and BasicAuthenticationFilter to util package.

This commit is contained in:
takezoe
2013-05-02 02:05:27 +09:00
parent 36ce53477f
commit 19466342ff
4 changed files with 90 additions and 92 deletions

View File

@@ -1,52 +1,52 @@
package app
import javax.servlet._
import javax.servlet.http._
/**
* Provides BASIC Authentication for [[app.GitRepositoryServlet]].
*/
class BasicAuthenticationFilter extends Filter {
def init(config: FilterConfig) = {}
def destroy(): Unit = {}
def doFilter(req: ServletRequest, res: ServletResponse, chain: FilterChain): Unit = {
val request = req.asInstanceOf[HttpServletRequest]
val response = res.asInstanceOf[HttpServletResponse]
val session = request.getSession
try {
session.getAttribute("USER_INFO") match {
case null => request.getHeader("Authorization") match {
case null => requireAuth(response)
case auth => decodeAuthHeader(auth).split(":") match {
// TODO authenticate using registered user info
case Array(username, password) if(username == "gitbucket" && password == "password") => {
session.setAttribute("USER_INFO", "gitbucket")
chain.doFilter(req, res)
}
case _ => requireAuth(response)
}
}
case user => chain.doFilter(req, res)
}
} catch {
case _: Exception => requireAuth(response)
}
}
private def requireAuth(response: HttpServletResponse): Unit = {
response.setHeader("WWW-Authenticate", "BASIC realm=\"GitBucket\"")
response.sendError(HttpServletResponse.SC_UNAUTHORIZED)
}
private def decodeAuthHeader(header: String): String = {
try {
new String(new sun.misc.BASE64Decoder().decodeBuffer(header.substring(6)))
} catch {
case _: Throwable => ""
}
}
package util
import javax.servlet._
import javax.servlet.http._
/**
* Provides BASIC Authentication for [[app.GitRepositoryServlet]].
*/
class BasicAuthenticationFilter extends Filter {
def init(config: FilterConfig) = {}
def destroy(): Unit = {}
def doFilter(req: ServletRequest, res: ServletResponse, chain: FilterChain): Unit = {
val request = req.asInstanceOf[HttpServletRequest]
val response = res.asInstanceOf[HttpServletResponse]
val session = request.getSession
try {
session.getAttribute("USER_INFO") match {
case null => request.getHeader("Authorization") match {
case null => requireAuth(response)
case auth => decodeAuthHeader(auth).split(":") match {
// TODO authenticate using registered user info
case Array(username, password) if(username == "gitbucket" && password == "password") => {
session.setAttribute("USER_INFO", "gitbucket")
chain.doFilter(req, res)
}
case _ => requireAuth(response)
}
}
case user => chain.doFilter(req, res)
}
} catch {
case _: Exception => requireAuth(response)
}
}
private def requireAuth(response: HttpServletResponse): Unit = {
response.setHeader("WWW-Authenticate", "BASIC realm=\"GitBucket\"")
response.sendError(HttpServletResponse.SC_UNAUTHORIZED)
}
private def decodeAuthHeader(header: String): String = {
try {
new String(new sun.misc.BASE64Decoder().decodeBuffer(header.substring(6)))
} catch {
case _: Throwable => ""
}
}
}

View File

@@ -1,39 +1,37 @@
package app
import java.io._
import javax.servlet._
import javax.servlet.http._
import util.Directory
import org.eclipse.jgit.api.Git
import org.eclipse.jgit.lib.Ref
import org.eclipse.jgit.http.server.GitServlet
import org.slf4j.LoggerFactory
/**
* Provides Git repository via HTTP.
*
* This servlet provides only Git repository functionality.
* Authentication is provided by [[app.BasicAuthenticationFilter]].
*/
class GitRepositoryServlet extends GitServlet {
private val logger = LoggerFactory.getLogger(classOf[GitRepositoryServlet])
// TODO are there any other ways...?
override def init(config: ServletConfig): Unit = {
super.init(new ServletConfig(){
def getInitParameter(name: String): String = name match {
case "base-path" => Directory.RepositoryHome
case "export-all" => "true"
case name => config.getInitParameter(name)
}
def getInitParameterNames(): java.util.Enumeration[String] = {
config.getInitParameterNames
}
def getServletContext(): ServletContext = config.getServletContext
def getServletName(): String = config.getServletName
});
}
}
package util
import java.io._
import javax.servlet._
import javax.servlet.http._
import util.Directory
import org.eclipse.jgit.http.server.GitServlet
import org.slf4j.LoggerFactory
/**
* Provides Git repository via HTTP.
*
* This servlet provides only Git repository functionality.
* Authentication is provided by [[app.BasicAuthenticationFilter]].
*/
class GitRepositoryServlet extends GitServlet {
private val logger = LoggerFactory.getLogger(classOf[GitRepositoryServlet])
// TODO are there any other ways...?
override def init(config: ServletConfig): Unit = {
super.init(new ServletConfig(){
def getInitParameter(name: String): String = name match {
case "base-path" => Directory.RepositoryHome
case "export-all" => "true"
case name => config.getInitParameter(name)
}
def getInitParameterNames(): java.util.Enumeration[String] = {
config.getInitParameterNames
}
def getServletContext(): ServletContext = config.getServletContext
def getServletName(): String = config.getServletName
});
}
}

View File

@@ -13,7 +13,7 @@
<servlet>
<servlet-name>GitRepositoryServlet</servlet-name>
<servlet-class>app.GitRepositoryServlet</servlet-class>
<servlet-class>util.GitRepositoryServlet</servlet-class>
</servlet>
<servlet-mapping>
@@ -23,7 +23,7 @@
<filter>
<filter-name>BasicAuthenticationFilter</filter-name>
<filter-class>app.BasicAuthenticationFilter</filter-class>
<filter-class>util.BasicAuthenticationFilter</filter-class>
</filter>
<filter-mapping>