github.com/crowdsecurity/crowdsec@v1.6.1/pkg/apiclient/alerts_service.go (about) 1 package apiclient 2 3 import ( 4 "context" 5 "fmt" 6 "net/http" 7 8 qs "github.com/google/go-querystring/query" 9 10 "github.com/crowdsecurity/crowdsec/pkg/models" 11 ) 12 13 // type ApiAlerts service 14 15 type AlertsService service 16 17 type AlertsListOpts struct { 18 ScopeEquals *string `url:"scope,omitempty"` 19 ValueEquals *string `url:"value,omitempty"` 20 ScenarioEquals *string `url:"scenario,omitempty"` 21 IPEquals *string `url:"ip,omitempty"` 22 RangeEquals *string `url:"range,omitempty"` 23 OriginEquals *string `url:"origin,omitempty"` 24 Since *string `url:"since,omitempty"` 25 TypeEquals *string `url:"decision_type,omitempty"` 26 Until *string `url:"until,omitempty"` 27 IncludeSimulated *bool `url:"simulated,omitempty"` 28 ActiveDecisionEquals *bool `url:"has_active_decision,omitempty"` 29 IncludeCAPI *bool `url:"include_capi,omitempty"` 30 Limit *int `url:"limit,omitempty"` 31 Contains *bool `url:"contains,omitempty"` 32 ListOpts 33 } 34 35 type AlertsDeleteOpts struct { 36 ScopeEquals *string `url:"scope,omitempty"` 37 ValueEquals *string `url:"value,omitempty"` 38 ScenarioEquals *string `url:"scenario,omitempty"` 39 IPEquals *string `url:"ip,omitempty"` 40 RangeEquals *string `url:"range,omitempty"` 41 Since *string `url:"since,omitempty"` 42 Until *string `url:"until,omitempty"` 43 OriginEquals *string `url:"origin,omitempty"` 44 ActiveDecisionEquals *bool `url:"has_active_decision,omitempty"` 45 SourceEquals *string `url:"alert_source,omitempty"` 46 Contains *bool `url:"contains,omitempty"` 47 Limit *int `url:"limit,omitempty"` 48 ListOpts 49 } 50 51 func (s *AlertsService) Add(ctx context.Context, alerts models.AddAlertsRequest) (*models.AddAlertsResponse, *Response, error) { 52 u := fmt.Sprintf("%s/alerts", s.client.URLPrefix) 53 54 req, err := s.client.NewRequest(http.MethodPost, u, &alerts) 55 if err != nil { 56 return nil, nil, err 57 } 58 59 addedIds := models.AddAlertsResponse{} 60 61 resp, err := s.client.Do(ctx, req, &addedIds) 62 if err != nil { 63 return nil, resp, err 64 } 65 66 return &addedIds, resp, nil 67 } 68 69 // to demo query arguments 70 func (s *AlertsService) List(ctx context.Context, opts AlertsListOpts) (*models.GetAlertsResponse, *Response, error) { 71 u := fmt.Sprintf("%s/alerts", s.client.URLPrefix) 72 73 params, err := qs.Values(opts) 74 if err != nil { 75 return nil, nil, fmt.Errorf("building query: %w", err) 76 } 77 78 URI := u 79 if len(params) > 0 { 80 URI = fmt.Sprintf("%s?%s", URI, params.Encode()) 81 } 82 83 req, err := s.client.NewRequest(http.MethodGet, URI, nil) 84 if err != nil { 85 return nil, nil, fmt.Errorf("building request: %w", err) 86 } 87 88 alerts := models.GetAlertsResponse{} 89 90 resp, err := s.client.Do(ctx, req, &alerts) 91 if err != nil { 92 return nil, resp, fmt.Errorf("performing request: %w", err) 93 } 94 95 return &alerts, resp, nil 96 } 97 98 // to demo query arguments 99 func (s *AlertsService) Delete(ctx context.Context, opts AlertsDeleteOpts) (*models.DeleteAlertsResponse, *Response, error) { 100 params, err := qs.Values(opts) 101 if err != nil { 102 return nil, nil, err 103 } 104 105 u := fmt.Sprintf("%s/alerts?%s", s.client.URLPrefix, params.Encode()) 106 107 req, err := s.client.NewRequest(http.MethodDelete, u, nil) 108 if err != nil { 109 return nil, nil, err 110 } 111 112 alerts := models.DeleteAlertsResponse{} 113 114 resp, err := s.client.Do(ctx, req, &alerts) 115 if err != nil { 116 return nil, resp, err 117 } 118 119 return &alerts, resp, nil 120 } 121 122 func (s *AlertsService) DeleteOne(ctx context.Context, alertID string) (*models.DeleteAlertsResponse, *Response, error) { 123 u := fmt.Sprintf("%s/alerts/%s", s.client.URLPrefix, alertID) 124 125 req, err := s.client.NewRequest(http.MethodDelete, u, nil) 126 if err != nil { 127 return nil, nil, err 128 } 129 130 alerts := models.DeleteAlertsResponse{} 131 132 resp, err := s.client.Do(ctx, req, &alerts) 133 if err != nil { 134 return nil, resp, err 135 } 136 137 return &alerts, resp, nil 138 } 139 140 func (s *AlertsService) GetByID(ctx context.Context, alertID int) (*models.Alert, *Response, error) { 141 u := fmt.Sprintf("%s/alerts/%d", s.client.URLPrefix, alertID) 142 143 req, err := s.client.NewRequest(http.MethodGet, u, nil) 144 if err != nil { 145 return nil, nil, err 146 } 147 148 alert := models.Alert{} 149 150 resp, err := s.client.Do(ctx, req, &alert) 151 if err != nil { 152 return nil, nil, err 153 } 154 155 return &alert, resp, nil 156 }