repo_description: Realtime log viewer for containers.  Supports Docker, Swarm and K8s. 
repo_topics: docker docker-container golang k8s log logging logging-server real-time sever-events swarm vuejs
code: package auth
  
  import (
  	"net/http"
  	"net/http/httptest"
  	"testing"
  
  	"github.com/go-chi/jwtauth/v5"
  	"github.com/stretchr/testify/require"
  )
  
  func TestForwardProxyAuthRejectsInvalidFilter(t *testing.T) {
  	auth := NewForwardProxyAuth("Remote-User", "Remote-Email", "Remote-Name", "Remote-Filter", "Remote-Roles")
  	called := false
  	handler := auth.AuthMiddleware(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  		called = true
  		w.WriteHeader(http.StatusOK)
  	}))
  
  	req := httptest.NewRequest(http.MethodGet, "/", nil)
  	req.Header.Set("Remote-User", "alice")
  	req.Header.Set("Remote-Filter", "invalid-filter")
  
  	resp := httptest.NewRecorder()
  	handler.ServeHTTP(resp, req)
  
  	require.Equal(t, http.StatusBadRequest, resp.Code)
  	require.False(t, called)
  }
  
  func TestUserFromContextInvalidFilterReturnsNil(t *testing.T) {
  	tokenAuth := jwtauth.New("HS256", []byte("secret"), nil)
  	_, tokenString, err := tokenAuth.Encode(map[string]interface{}{
  		"username": "alice",
  		"email":    "alice@example.com",
  		"name":     "Alice",
  		"filter":   "invalid-filter",
  	})
  	require.NoError(t, err)
  
  	handler := jwtauth.Verifier(tokenAuth)(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  		if UserFromContext(r.Context()) == nil {
  			w.WriteHeader(http.StatusUnauthorized)
  			return
  		}
  		w.WriteHeader(http.StatusOK)
  	}))
  
  	req := httptest.NewRequest(http.MethodGet, "/", nil)
  	req.Header.Set("Authorization", "Bearer "+tokenString)
  
  	resp := httptest.NewRecorder()
  	handler.ServeHTTP(resp, req)
  
  	require.Equal(t, http.StatusUnauthorized, resp.Code)
  }
  