github.com/crowdsecurity/crowdsec@v1.6.1/pkg/apiclient/auth_key_test.go (about) 1 package apiclient 2 3 import ( 4 "context" 5 "net/http" 6 "net/url" 7 "testing" 8 9 log "github.com/sirupsen/logrus" 10 "github.com/stretchr/testify/assert" 11 "github.com/stretchr/testify/require" 12 13 "github.com/crowdsecurity/go-cs-lib/cstest" 14 "github.com/crowdsecurity/go-cs-lib/ptr" 15 ) 16 17 func TestApiAuth(t *testing.T) { 18 log.SetLevel(log.TraceLevel) 19 20 mux, urlx, teardown := setup() 21 mux.HandleFunc("/decisions", func(w http.ResponseWriter, r *http.Request) { 22 testMethod(t, r, "GET") 23 24 if r.Header.Get("X-Api-Key") == "ixu" { 25 assert.Equal(t, "ip=1.2.3.4", r.URL.RawQuery) 26 w.WriteHeader(http.StatusOK) 27 w.Write([]byte(`null`)) 28 } else { 29 w.WriteHeader(http.StatusForbidden) 30 w.Write([]byte(`{"message":"access forbidden"}`)) 31 } 32 }) 33 34 log.Printf("URL is %s", urlx) 35 36 apiURL, err := url.Parse(urlx + "/") 37 require.NoError(t, err) 38 39 defer teardown() 40 41 //ok no answer 42 auth := &APIKeyTransport{ 43 APIKey: "ixu", 44 } 45 46 newcli, err := NewDefaultClient(apiURL, "v1", "toto", auth.Client()) 47 require.NoError(t, err) 48 49 alert := DecisionsListOpts{IPEquals: ptr.Of("1.2.3.4")} 50 _, resp, err := newcli.Decisions.List(context.Background(), alert) 51 require.NoError(t, err) 52 assert.Equal(t, http.StatusOK, resp.Response.StatusCode) 53 54 //ko bad token 55 auth = &APIKeyTransport{ 56 APIKey: "bad", 57 } 58 59 newcli, err = NewDefaultClient(apiURL, "v1", "toto", auth.Client()) 60 require.NoError(t, err) 61 62 _, resp, err = newcli.Decisions.List(context.Background(), alert) 63 64 log.Infof("--> %s", err) 65 66 assert.Equal(t, http.StatusForbidden, resp.Response.StatusCode) 67 68 cstest.RequireErrorMessage(t, err, "API error: access forbidden") 69 70 //ko empty token 71 auth = &APIKeyTransport{} 72 73 newcli, err = NewDefaultClient(apiURL, "v1", "toto", auth.Client()) 74 require.NoError(t, err) 75 76 _, _, err = newcli.Decisions.List(context.Background(), alert) 77 require.Error(t, err) 78 79 log.Infof("--> %s", err) 80 assert.Contains(t, err.Error(), "APIKey is empty") 81 }