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  }