mirror of https://github.com/portainer/portainer
fix(auth): remove a nil pointer dereference BE-12149 (#1014)
parent
3ade5cdf19
commit
7f167ff2fc
|
@ -26,11 +26,10 @@ func (handler *Handler) logout(w http.ResponseWriter, r *http.Request) *httperro
|
||||||
handler.KubernetesTokenCacheManager.RemoveUserFromCache(tokenData.ID)
|
handler.KubernetesTokenCacheManager.RemoveUserFromCache(tokenData.ID)
|
||||||
handler.KubernetesClientFactory.ClearUserClientCache(strconv.Itoa(int(tokenData.ID)))
|
handler.KubernetesClientFactory.ClearUserClientCache(strconv.Itoa(int(tokenData.ID)))
|
||||||
logoutcontext.Cancel(tokenData.Token)
|
logoutcontext.Cancel(tokenData.Token)
|
||||||
|
handler.bouncer.RevokeJWT(tokenData.Token)
|
||||||
}
|
}
|
||||||
|
|
||||||
security.RemoveAuthCookie(w)
|
security.RemoveAuthCookie(w)
|
||||||
|
|
||||||
handler.bouncer.RevokeJWT(tokenData.Token)
|
|
||||||
|
|
||||||
return response.Empty(w)
|
return response.Empty(w)
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,55 @@
|
||||||
|
package auth
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
"net/http/httptest"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
portainer "github.com/portainer/portainer/api"
|
||||||
|
"github.com/portainer/portainer/api/http/proxy/factory/kubernetes"
|
||||||
|
"github.com/portainer/portainer/api/http/security"
|
||||||
|
"github.com/portainer/portainer/api/internal/testhelpers"
|
||||||
|
"github.com/portainer/portainer/api/kubernetes/cli"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
type mockBouncer struct {
|
||||||
|
security.BouncerService
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewMockBouncer() *mockBouncer {
|
||||||
|
return &mockBouncer{BouncerService: testhelpers.NewTestRequestBouncer()}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*mockBouncer) CookieAuthLookup(r *http.Request) (*portainer.TokenData, error) {
|
||||||
|
return &portainer.TokenData{
|
||||||
|
ID: 1,
|
||||||
|
Username: "testuser",
|
||||||
|
Token: "valid-token",
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestLogout(t *testing.T) {
|
||||||
|
h := NewHandler(NewMockBouncer(), nil, nil, nil)
|
||||||
|
h.KubernetesTokenCacheManager = kubernetes.NewTokenCacheManager()
|
||||||
|
k, err := cli.NewClientFactory(nil, nil, nil, "", "", "")
|
||||||
|
require.NoError(t, err)
|
||||||
|
h.KubernetesClientFactory = k
|
||||||
|
|
||||||
|
rr := httptest.NewRecorder()
|
||||||
|
req := httptest.NewRequest("POST", "/auth/logout", nil)
|
||||||
|
|
||||||
|
h.ServeHTTP(rr, req)
|
||||||
|
require.Equal(t, http.StatusNoContent, rr.Code)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestLogoutNoPanic(t *testing.T) {
|
||||||
|
h := NewHandler(testhelpers.NewTestRequestBouncer(), nil, nil, nil)
|
||||||
|
|
||||||
|
rr := httptest.NewRecorder()
|
||||||
|
req := httptest.NewRequest("POST", "/auth/logout", nil)
|
||||||
|
|
||||||
|
h.ServeHTTP(rr, req)
|
||||||
|
require.Equal(t, http.StatusNoContent, rr.Code)
|
||||||
|
}
|
Loading…
Reference in New Issue