Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

apiclient/apiserver: lint #2739

Merged
merged 1 commit into from
Jan 15, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
32 changes: 14 additions & 18 deletions pkg/apiclient/alerts_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,15 +49,15 @@ type AlertsDeleteOpts struct {
}

func (s *AlertsService) Add(ctx context.Context, alerts models.AddAlertsRequest) (*models.AddAlertsResponse, *Response, error) {
var addedIds models.AddAlertsResponse

u := fmt.Sprintf("%s/alerts", s.client.URLPrefix)
req, err := s.client.NewRequest(http.MethodPost, u, &alerts)

req, err := s.client.NewRequest(http.MethodPost, u, &alerts)
if err != nil {
return nil, nil, err
}

var addedIds models.AddAlertsResponse

resp, err := s.client.Do(ctx, req, &addedIds)
if err != nil {
return nil, resp, err
Expand All @@ -68,29 +68,25 @@ func (s *AlertsService) Add(ctx context.Context, alerts models.AddAlertsRequest)

// to demo query arguments
func (s *AlertsService) List(ctx context.Context, opts AlertsListOpts) (*models.GetAlertsResponse, *Response, error) {
var (
alerts models.GetAlertsResponse
URI string
)

u := fmt.Sprintf("%s/alerts", s.client.URLPrefix)
params, err := qs.Values(opts)

params, err := qs.Values(opts)
if err != nil {
return nil, nil, fmt.Errorf("building query: %w", err)
}

URI := u
if len(params) > 0 {
URI = fmt.Sprintf("%s?%s", u, params.Encode())
} else {
URI = u
URI = fmt.Sprintf("%s?%s", URI, params.Encode())
}

req, err := s.client.NewRequest(http.MethodGet, URI, nil)
if err != nil {
return nil, nil, fmt.Errorf("building request: %w", err)
}

alerts := models.GetAlertsResponse{}

resp, err := s.client.Do(ctx, req, &alerts)
if err != nil {
return nil, resp, fmt.Errorf("performing request: %w", err)
Expand All @@ -101,8 +97,6 @@ func (s *AlertsService) List(ctx context.Context, opts AlertsListOpts) (*models.

// to demo query arguments
func (s *AlertsService) Delete(ctx context.Context, opts AlertsDeleteOpts) (*models.DeleteAlertsResponse, *Response, error) {
var alerts models.DeleteAlertsResponse

params, err := qs.Values(opts)
if err != nil {
return nil, nil, err
Expand All @@ -115,6 +109,8 @@ func (s *AlertsService) Delete(ctx context.Context, opts AlertsDeleteOpts) (*mod
return nil, nil, err
}

alerts := models.DeleteAlertsResponse{}

resp, err := s.client.Do(ctx, req, &alerts)
if err != nil {
return nil, resp, err
Expand All @@ -124,15 +120,15 @@ func (s *AlertsService) Delete(ctx context.Context, opts AlertsDeleteOpts) (*mod
}

func (s *AlertsService) DeleteOne(ctx context.Context, alertID string) (*models.DeleteAlertsResponse, *Response, error) {
var alerts models.DeleteAlertsResponse

u := fmt.Sprintf("%s/alerts/%s", s.client.URLPrefix, alertID)

req, err := s.client.NewRequest(http.MethodDelete, u, nil)
if err != nil {
return nil, nil, err
}

alerts := models.DeleteAlertsResponse{}

resp, err := s.client.Do(ctx, req, &alerts)
if err != nil {
return nil, resp, err
Expand All @@ -142,15 +138,15 @@ func (s *AlertsService) DeleteOne(ctx context.Context, alertID string) (*models.
}

func (s *AlertsService) GetByID(ctx context.Context, alertID int) (*models.Alert, *Response, error) {
var alert models.Alert

u := fmt.Sprintf("%s/alerts/%d", s.client.URLPrefix, alertID)

req, err := s.client.NewRequest(http.MethodGet, u, nil)
if err != nil {
return nil, nil, err
}

alert := models.Alert{}

resp, err := s.client.Do(ctx, req, &alert)
if err != nil {
return nil, nil, err
Expand Down
22 changes: 11 additions & 11 deletions pkg/apiclient/auth.go
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@

select {
case <-req.Context().Done():
return resp, req.Context().Err()
return nil, req.Context().Err()

Check warning on line 128 in pkg/apiclient/auth.go

View check run for this annotation

Codecov / codecov/patch

pkg/apiclient/auth.go#L128

Added line #L128 was not covered by tests
case <-time.After(time.Duration(backoff) * time.Second):
}
}
Expand All @@ -135,8 +135,8 @@
}

clonedReq := cloneRequest(req)
resp, err = r.next.RoundTrip(clonedReq)

resp, err = r.next.RoundTrip(clonedReq)
if err != nil {
if left := maxAttempts - i - 1; left > 0 {
log.Errorf("error while performing request: %s; %d retries left", err, left)
Expand Down Expand Up @@ -171,10 +171,11 @@

func (t *JWTTransport) refreshJwtToken() error {
var err error

if t.UpdateScenario != nil {
t.Scenarios, err = t.UpdateScenario()
if err != nil {
return fmt.Errorf("can't update scenario list: %s", err)
return fmt.Errorf("can't update scenario list: %w", err)

Check warning on line 178 in pkg/apiclient/auth.go

View check run for this annotation

Codecov / codecov/patch

pkg/apiclient/auth.go#L178

Added line #L178 was not covered by tests
}

log.Debugf("scenarios list updated for '%s'", *t.MachineID)
Expand All @@ -186,8 +187,6 @@
Scenarios: t.Scenarios,
}

var response models.WatcherAuthResponse

/*
we don't use the main client, so let's build the body
*/
Expand Down Expand Up @@ -250,6 +249,8 @@
}
}

var response models.WatcherAuthResponse

if err := json.NewDecoder(resp.Body).Decode(&response); err != nil {
return fmt.Errorf("unable to decode response: %w", err)
}
Expand Down Expand Up @@ -300,7 +301,7 @@
}

if err != nil {
// we had an error (network error for example, or 401 because token is refused), reset the token ?
// we had an error (network error for example, or 401 because token is refused), reset the token?
t.Token = ""

return resp, fmt.Errorf("performing jwt auth: %w", err)
Expand All @@ -324,14 +325,13 @@
t.refreshTokenMutex.Unlock()
}

// transport() returns a round tripper that retries once when the status is unauthorized, and 5 times when the infrastructure is overloaded.
func (t *JWTTransport) transport() http.RoundTripper {
var transport http.RoundTripper
if t.Transport != nil {
transport = t.Transport
} else {
transport := t.Transport
if transport == nil {
transport = http.DefaultTransport
}
// a round tripper that retries once when the status is unauthorized and 5 times when infrastructure is overloaded

return &retryRoundTripper{
next: &retryRoundTripper{
next: transport,
Expand Down
2 changes: 1 addition & 1 deletion pkg/apiclient/client_http.go
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ func (c *ApiClient) Do(ctx context.Context, req *http.Request, v interface{}) (*

if log.GetLevel() >= log.DebugLevel {
for k, v := range resp.Header {
log.Debugf("[headers] %s : %s", k, v)
log.Debugf("[headers] %s: %s", k, v)
}

dump, err := httputil.DumpResponse(resp, true)
Expand Down
39 changes: 19 additions & 20 deletions pkg/apiclient/decisions_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@
import (
"bufio"
"context"
"errors"
"fmt"
"net/http"

qs "github.com/google/go-querystring/query"
"github.com/pkg/errors"
log "github.com/sirupsen/logrus"

"github.com/crowdsecurity/go-cs-lib/ptr"
Expand Down Expand Up @@ -61,8 +61,6 @@

// to demo query arguments
func (s *DecisionsService) List(ctx context.Context, opts DecisionsListOpts) (*models.GetDecisionsResponse, *Response, error) {
var decisions models.GetDecisionsResponse

params, err := qs.Values(opts)
if err != nil {
return nil, nil, err
Expand All @@ -75,6 +73,8 @@
return nil, nil, err
}

var decisions models.GetDecisionsResponse

resp, err := s.client.Do(ctx, req, &decisions)
if err != nil {
return nil, resp, err
Expand All @@ -84,13 +84,13 @@
}

func (s *DecisionsService) FetchV2Decisions(ctx context.Context, url string) (*models.DecisionsStreamResponse, *Response, error) {
var decisions models.DecisionsStreamResponse

req, err := s.client.NewRequest(http.MethodGet, url, nil)
if err != nil {
return nil, nil, err
}

var decisions models.DecisionsStreamResponse

resp, err := s.client.Do(ctx, req, &decisions)
if err != nil {
return nil, resp, err
Expand All @@ -100,7 +100,7 @@
}

func (s *DecisionsService) GetDecisionsFromGroups(decisionsGroups []*modelscapi.GetDecisionsStreamResponseNewItem) []*models.Decision {
var decisions []*models.Decision
decisions := make([]*models.Decision, 0)

for _, decisionsGroup := range decisionsGroups {
partialDecisions := make([]*models.Decision, len(decisionsGroup.Decisions))
Expand All @@ -122,11 +122,6 @@
}

func (s *DecisionsService) FetchV3Decisions(ctx context.Context, url string) (*models.DecisionsStreamResponse, *Response, error) {
var (
decisions modelscapi.GetDecisionsStreamResponse
v2Decisions models.DecisionsStreamResponse
)

scenarioDeleted := "deleted"
durationDeleted := "1h"

Expand All @@ -135,11 +130,14 @@
return nil, nil, err
}

decisions := modelscapi.GetDecisionsStreamResponse{}

resp, err := s.client.Do(ctx, req, &decisions)
if err != nil {
return nil, resp, err
}

v2Decisions := models.DecisionsStreamResponse{}
v2Decisions.New = s.GetDecisionsFromGroups(decisions.New)

for _, decisionsGroup := range decisions.Deleted {
Expand Down Expand Up @@ -183,6 +181,7 @@

req = req.WithContext(ctx)
log.Debugf("[URL] %s %s", req.Method, req.URL)

// we don't use client_http Do method because we need the reader and is not provided.
// We would be forced to use Pipe and goroutine, etc
resp, err := client.Do(req)
Expand Down Expand Up @@ -247,11 +246,11 @@
return nil, nil, err
}

if s.client.URLPrefix == "v3" {
return s.FetchV3Decisions(ctx, u)
} else {
if s.client.URLPrefix != "v3" {
return s.FetchV2Decisions(ctx, u)
}

return s.FetchV3Decisions(ctx, u)
}

func (s *DecisionsService) GetStreamV3(ctx context.Context, opts DecisionsStreamOpts) (*modelscapi.GetDecisionsStreamResponse, *Response, error) {
Expand All @@ -260,13 +259,13 @@
return nil, nil, err
}

var decisions modelscapi.GetDecisionsStreamResponse

req, err := s.client.NewRequest(http.MethodGet, u, nil)
if err != nil {
return nil, nil, err
}

decisions := modelscapi.GetDecisionsStreamResponse{}

resp, err := s.client.Do(ctx, req, &decisions)
if err != nil {
return nil, resp, err
Expand All @@ -292,8 +291,6 @@
}

func (s *DecisionsService) Delete(ctx context.Context, opts DecisionsDeleteOpts) (*models.DeleteDecisionResponse, *Response, error) {
var deleteDecisionResponse models.DeleteDecisionResponse

params, err := qs.Values(opts)
if err != nil {
return nil, nil, err
Expand All @@ -306,6 +303,8 @@
return nil, nil, err
}

deleteDecisionResponse := models.DeleteDecisionResponse{}

resp, err := s.client.Do(ctx, req, &deleteDecisionResponse)
if err != nil {
return nil, resp, err
Expand All @@ -315,15 +314,15 @@
}

func (s *DecisionsService) DeleteOne(ctx context.Context, decisionID string) (*models.DeleteDecisionResponse, *Response, error) {
var deleteDecisionResponse models.DeleteDecisionResponse

u := fmt.Sprintf("%s/decisions/%s", s.client.URLPrefix, decisionID)

req, err := s.client.NewRequest(http.MethodDelete, u, nil)
if err != nil {
return nil, nil, err
}

deleteDecisionResponse := models.DeleteDecisionResponse{}

Check warning on line 325 in pkg/apiclient/decisions_service.go

View check run for this annotation

Codecov / codecov/patch

pkg/apiclient/decisions_service.go#L324-L325

Added lines #L324 - L325 were not covered by tests
resp, err := s.client.Do(ctx, req, &deleteDecisionResponse)
if err != nil {
return nil, resp, err
Expand Down
8 changes: 4 additions & 4 deletions pkg/apiclient/decisions_sync_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,24 +14,24 @@

// DecisionDeleteService purposely reuses AddSignalsRequestItemDecisions model
func (d *DecisionDeleteService) Add(ctx context.Context, deletedDecisions *models.DecisionsDeleteRequest) (interface{}, *Response, error) {
var response interface{}

u := fmt.Sprintf("%s/decisions/delete", d.client.URLPrefix)

req, err := d.client.NewRequest(http.MethodPost, u, &deletedDecisions)
if err != nil {
return nil, nil, fmt.Errorf("while building request: %w", err)
}

var response interface{}

Check warning on line 25 in pkg/apiclient/decisions_sync_service.go

View check run for this annotation

Codecov / codecov/patch

pkg/apiclient/decisions_sync_service.go#L24-L25

Added lines #L24 - L25 were not covered by tests
resp, err := d.client.Do(ctx, req, &response)
if err != nil {
return nil, resp, fmt.Errorf("while performing request: %w", err)
}

if resp.Response.StatusCode != http.StatusOK {
log.Warnf("Decisions delete response : http %s", resp.Response.Status)
log.Warnf("Decisions delete response: http %s", resp.Response.Status)

Check warning on line 32 in pkg/apiclient/decisions_sync_service.go

View check run for this annotation

Codecov / codecov/patch

pkg/apiclient/decisions_sync_service.go#L32

Added line #L32 was not covered by tests
} else {
log.Debugf("Decisions delete response : http %s", resp.Response.Status)
log.Debugf("Decisions delete response: http %s", resp.Response.Status)

Check warning on line 34 in pkg/apiclient/decisions_sync_service.go

View check run for this annotation

Codecov / codecov/patch

pkg/apiclient/decisions_sync_service.go#L34

Added line #L34 was not covered by tests
}

return &response, resp, nil
Expand Down
4 changes: 2 additions & 2 deletions pkg/apiclient/heartbeat.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,13 +41,13 @@

ok, resp, err := h.Ping(ctx)
if err != nil {
log.Errorf("heartbeat error : %s", err)
log.Errorf("heartbeat error: %s", err)

Check warning on line 44 in pkg/apiclient/heartbeat.go

View check run for this annotation

Codecov / codecov/patch

pkg/apiclient/heartbeat.go#L44

Added line #L44 was not covered by tests
continue
}

resp.Response.Body.Close()
if resp.Response.StatusCode != http.StatusOK {
log.Errorf("heartbeat unexpected return code : %d", resp.Response.StatusCode)
log.Errorf("heartbeat unexpected return code: %d", resp.Response.StatusCode)

Check warning on line 50 in pkg/apiclient/heartbeat.go

View check run for this annotation

Codecov / codecov/patch

pkg/apiclient/heartbeat.go#L50

Added line #L50 was not covered by tests
continue
}
if !ok {
Expand Down