mirror of
				https://github.com/gitbucket/gitbucket.git
				synced 2025-10-30 18:15:59 +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