diff --git a/src/main/scala/app/BasicAuthenticationFilter.scala b/src/main/scala/app/BasicAuthenticationFilter.scala
deleted file mode 100644
index b972c19..0000000
--- a/src/main/scala/app/BasicAuthenticationFilter.scala
+++ /dev/null
@@ -1,52 +0,0 @@
-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 => ""
- }
- }
-}
\ No newline at end of file
diff --git a/src/main/scala/app/ControllerBase.scala b/src/main/scala/app/ControllerBase.scala
new file mode 100644
index 0000000..61f4383
--- /dev/null
+++ b/src/main/scala/app/ControllerBase.scala
@@ -0,0 +1,23 @@
+package app
+
+import org.scalatra._
+import org.scalatra.json._
+import org.json4s._
+import org.json4s.jackson._
+import jp.sf.amateras.scalatra.forms._
+
+/**
+ * Provides generic features for ScalatraServlet implementations.
+ */
+abstract class ControllerBase extends ScalatraFilter with ClientSideValidationFormSupport with JacksonJsonSupport {
+
+ implicit val jsonFormats = DefaultFormats
+
+ implicit def context: Context = Context(servletContext.getContextPath)
+
+ // TODO get from session
+ val LoginUser = System.getProperty("user.name")
+
+}
+
+case class Context(path: String)
\ No newline at end of file
diff --git a/src/main/scala/app/GitRepositoryServlet.scala b/src/main/scala/app/GitRepositoryServlet.scala
deleted file mode 100644
index 2294e56..0000000
--- a/src/main/scala/app/GitRepositoryServlet.scala
+++ /dev/null
@@ -1,39 +0,0 @@
-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
- });
- }
-
-}
diff --git a/src/main/scala/app/ServletBase.scala b/src/main/scala/app/ServletBase.scala
deleted file mode 100644
index 61f4383..0000000
--- a/src/main/scala/app/ServletBase.scala
+++ /dev/null
@@ -1,23 +0,0 @@
-package app
-
-import org.scalatra._
-import org.scalatra.json._
-import org.json4s._
-import org.json4s.jackson._
-import jp.sf.amateras.scalatra.forms._
-
-/**
- * Provides generic features for ScalatraServlet implementations.
- */
-abstract class ControllerBase extends ScalatraFilter with ClientSideValidationFormSupport with JacksonJsonSupport {
-
- implicit val jsonFormats = DefaultFormats
-
- implicit def context: Context = Context(servletContext.getContextPath)
-
- // TODO get from session
- val LoginUser = System.getProperty("user.name")
-
-}
-
-case class Context(path: String)
\ No newline at end of file
diff --git a/src/main/scala/util/BasicAuthenticationFilter.scala b/src/main/scala/util/BasicAuthenticationFilter.scala
new file mode 100644
index 0000000..c81c221
--- /dev/null
+++ b/src/main/scala/util/BasicAuthenticationFilter.scala
@@ -0,0 +1,52 @@
+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 => ""
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/scala/util/GitRepositoryServlet.scala b/src/main/scala/util/GitRepositoryServlet.scala
new file mode 100644
index 0000000..49df1f0
--- /dev/null
+++ b/src/main/scala/util/GitRepositoryServlet.scala
@@ -0,0 +1,37 @@
+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
+ });
+ }
+
+}
diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml
index 93bc19d..9799689 100644
--- a/src/main/webapp/WEB-INF/web.xml
+++ b/src/main/webapp/WEB-INF/web.xml
@@ -13,7 +13,7 @@
GitRepositoryServlet
- app.GitRepositoryServlet
+ util.GitRepositoryServlet
@@ -23,7 +23,7 @@
BasicAuthenticationFilter
- app.BasicAuthenticationFilter
+ util.BasicAuthenticationFilter