github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/api/auth/check_authentication_handler.go (about)

     1  package auth
     2  
     3  import (
     4  	"net/http"
     5  
     6  	"github.com/pf-qiu/concourse/v6/atc/api/accessor"
     7  )
     8  
     9  type checkAuthHandler struct {
    10  	handler  http.Handler
    11  	rejector Rejector
    12  }
    13  
    14  func CheckAuthenticationHandler(
    15  	handler http.Handler,
    16  	rejector Rejector,
    17  ) http.Handler {
    18  	return checkAuthHandler{
    19  		handler:  handler,
    20  		rejector: rejector,
    21  	}
    22  }
    23  
    24  func (h checkAuthHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    25  	acc := accessor.GetAccessor(r)
    26  
    27  	if acc.IsAuthenticated() {
    28  		h.handler.ServeHTTP(w, r)
    29  	} else {
    30  		h.rejector.Unauthorized(w, r)
    31  	}
    32  }
    33  
    34  type checkAuthIfProvidedHandler struct {
    35  	handler  http.Handler
    36  	rejector Rejector
    37  }
    38  
    39  func CheckAuthenticationIfProvidedHandler(
    40  	handler http.Handler,
    41  	rejector Rejector,
    42  ) http.Handler {
    43  	return checkAuthIfProvidedHandler{
    44  		handler:  handler,
    45  		rejector: rejector,
    46  	}
    47  }
    48  
    49  func (h checkAuthIfProvidedHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    50  	acc := accessor.GetAccessor(r)
    51  
    52  	if acc.HasToken() && !acc.IsAuthenticated() {
    53  		h.rejector.Unauthorized(w, r)
    54  	} else {
    55  		h.handler.ServeHTTP(w, r)
    56  	}
    57  }