mirror of
				https://github.com/gitbucket/gitbucket.git
				synced 2025-10-31 02:25:59 +01:00 
			
		
		
		
	Move GitRepositoryServlet and BasicAuthenticationFilter to util package.
This commit is contained in:
		| @@ -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 => "" | ||||
|     } | ||||
|   } | ||||
| } | ||||
| @@ -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 | ||||
|     }); | ||||
|   } | ||||
|    | ||||
| } | ||||
| @@ -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> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user