This commit is contained in:
Jakob Borg 2023-06-29 14:36:55 +02:00
parent 04b121b5f4
commit dca496cd7d
2 changed files with 10 additions and 2 deletions

View File

@ -39,7 +39,7 @@ func emitLoginAttempt(success bool, username, address string, evLogger events.Lo
func basicAuthAndSessionMiddleware(cookieName string, guiCfg config.GUIConfiguration, ldapCfg config.LDAPConfiguration, next http.Handler, evLogger events.Logger) http.Handler { func basicAuthAndSessionMiddleware(cookieName string, guiCfg config.GUIConfiguration, ldapCfg config.LDAPConfiguration, next http.Handler, evLogger events.Logger) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if guiCfg.IsValidAPIKey(r.Header.Get("X-API-Key")) { if hasValidAPIKeyHeader(r, guiCfg) {
next.ServeHTTP(w, r) next.ServeHTTP(w, r)
return return
} }

View File

@ -59,7 +59,7 @@ func newCsrfManager(unique string, prefix string, apiKeyValidator apiKeyValidato
func (m *csrfManager) ServeHTTP(w http.ResponseWriter, r *http.Request) { func (m *csrfManager) ServeHTTP(w http.ResponseWriter, r *http.Request) {
// Allow requests carrying a valid API key // Allow requests carrying a valid API key
if m.apiKeyValidator.IsValidAPIKey(r.Header.Get("X-API-Key")) { if hasValidAPIKeyHeader(r, m.apiKeyValidator) {
// Set the access-control-allow-origin header for CORS requests // Set the access-control-allow-origin header for CORS requests
// since a valid API key has been provided // since a valid API key has been provided
w.Header().Add("Access-Control-Allow-Origin", "*") w.Header().Add("Access-Control-Allow-Origin", "*")
@ -178,3 +178,11 @@ func (m *csrfManager) load() {
m.tokens = append(m.tokens, s.Text()) m.tokens = append(m.tokens, s.Text())
} }
} }
func hasValidAPIKeyHeader(r *http.Request, validator apiKeyValidator) bool {
if auth := r.Header.Get("Authorization"); strings.HasPrefix(strings.ToLower(auth), "bearer ") {
bearerToken := auth[len("bearer "):]
return validator.IsValidAPIKey(bearerToken)
}
return validator.IsValidAPIKey(r.Header.Get("X-API-Key"))
}