diff --git a/src/main/scala/app/BasicAuthenticationFilter.scala b/src/main/scala/app/BasicAuthenticationFilter.scala
new file mode 100644
index 0000000..0b8952c
--- /dev/null
+++ b/src/main/scala/app/BasicAuthenticationFilter.scala
@@ -0,0 +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 _ => ""
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/scala/app/GitRepositoryServlet.scala b/src/main/scala/app/GitRepositoryServlet.scala
new file mode 100644
index 0000000..0d704db
--- /dev/null
+++ b/src/main/scala/app/GitRepositoryServlet.scala
@@ -0,0 +1,34 @@
+package app
+
+import javax.servlet.ServletConfig
+import javax.servlet.ServletException
+import org.eclipse.jgit.http.server.GitServlet
+import javax.servlet.ServletContext
+import util.Directory
+import java.io.File
+
+/**
+ * Provides Git repository via HTTP.
+ *
+ * This servlet provides only Git repository functionality.
+ * Authentication is provided by [[app.BasicAuthenticationFilter]].
+ */
+class GitRepositoryServlet extends GitServlet {
+
+ 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
+ });
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml
index 01839e7..5ee959c 100644
--- a/src/main/webapp/WEB-INF/web.xml
+++ b/src/main/webapp/WEB-INF/web.xml
@@ -14,21 +14,23 @@
- GitServlet
- org.eclipse.jgit.http.server.GitServlet
-
- base-path
- C:/Users/takezoe/gitbucket/repositories
-
-
- export-all
- true
-
+ GitRepositoryServlet
+ app.GitRepositoryServlet
- GitServlet
+ GitRepositoryServlet
/git/*
+
+ BasicAuthenticationFilter
+ app.BasicAuthenticationFilter
+
+
+
+ BasicAuthenticationFilter
+ /git/*
+
+
\ No newline at end of file