mirror of
				https://github.com/gitbucket/gitbucket.git
				synced 2025-11-03 20:15:59 +01:00 
			
		
		
		
	Improve authentication for H2 console.
This commit is contained in:
		@@ -1,7 +1,7 @@
 | 
				
			|||||||
package app
 | 
					package app
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import _root_.util.Directory._
 | 
					import _root_.util.Directory._
 | 
				
			||||||
import _root_.util.{FileUtil, Validations}
 | 
					import _root_.util.{StringUtil, FileUtil, Validations}
 | 
				
			||||||
import org.scalatra._
 | 
					import org.scalatra._
 | 
				
			||||||
import org.scalatra.json._
 | 
					import org.scalatra.json._
 | 
				
			||||||
import org.json4s._
 | 
					import org.json4s._
 | 
				
			||||||
@@ -10,7 +10,7 @@ import org.apache.commons.io.FileUtils
 | 
				
			|||||||
import model.Account
 | 
					import model.Account
 | 
				
			||||||
import scala.Some
 | 
					import scala.Some
 | 
				
			||||||
import service.AccountService
 | 
					import service.AccountService
 | 
				
			||||||
import javax.servlet.http.{HttpSession, HttpServletRequest}
 | 
					import javax.servlet.http.{HttpServletResponse, HttpSession, HttpServletRequest}
 | 
				
			||||||
import java.text.SimpleDateFormat
 | 
					import java.text.SimpleDateFormat
 | 
				
			||||||
import javax.servlet.{FilterChain, ServletResponse, ServletRequest}
 | 
					import javax.servlet.{FilterChain, ServletResponse, ServletRequest}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -24,15 +24,27 @@ abstract class ControllerBase extends ScalatraFilter
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  override def doFilter(request: ServletRequest, response: ServletResponse, chain: FilterChain) {
 | 
					  override def doFilter(request: ServletRequest, response: ServletResponse, chain: FilterChain) {
 | 
				
			||||||
    val httpRequest  = request.asInstanceOf[HttpServletRequest]
 | 
					    val httpRequest  = request.asInstanceOf[HttpServletRequest]
 | 
				
			||||||
    val path = httpRequest.getRequestURI.substring(request.getServletContext.getContextPath.length)
 | 
					    val httpResponse = response.asInstanceOf[HttpServletResponse]
 | 
				
			||||||
 | 
					    val context      = request.getServletContext.getContextPath
 | 
				
			||||||
 | 
					    val path         = httpRequest.getRequestURI.substring(context.length)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if(path.startsWith("/console/")){
 | 
					    if(path.startsWith("/console/")){
 | 
				
			||||||
      Option(httpRequest.getSession.getAttribute("LOGIN_ACCOUNT").asInstanceOf[Account]).collect {
 | 
					      val account = httpRequest.getSession.getAttribute("LOGIN_ACCOUNT").asInstanceOf[Account]
 | 
				
			||||||
        case account if(account.isAdmin) => chain.doFilter(request, response)
 | 
					      if(account == null){
 | 
				
			||||||
      }
 | 
					        // Redirect to login form
 | 
				
			||||||
    } else if(path.startsWith("/git/")){
 | 
					        httpResponse.sendRedirect(context + "/signin?" + path)
 | 
				
			||||||
 | 
					      } else if(account.isAdmin){
 | 
				
			||||||
 | 
					        // H2 Console (administrators only)
 | 
				
			||||||
        chain.doFilter(request, response)
 | 
					        chain.doFilter(request, response)
 | 
				
			||||||
      } else {
 | 
					      } else {
 | 
				
			||||||
 | 
					        // Redirect to dashboard
 | 
				
			||||||
 | 
					        httpResponse.sendRedirect(context + "/")
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    } else if(path.startsWith("/git/")){
 | 
				
			||||||
 | 
					      // Git repository
 | 
				
			||||||
 | 
					      chain.doFilter(request, response)
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      // Scalatra actions
 | 
				
			||||||
      super.doFilter(request, response, chain)
 | 
					      super.doFilter(request, response, chain)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user