bitbucket.org/Aishee/synsec@v0.0.0-20210414005726-236fc01a153d/pkg/apiclient/alerts_service.go (about) 1 package apiclient 2 3 import ( 4 "context" 5 "fmt" 6 7 "bitbucket.org/Aishee/synsec/pkg/models" 8 qs "github.com/google/go-querystring/query" 9 "github.com/pkg/errors" 10 ) 11 12 // type ApiAlerts service 13 14 type AlertsService service 15 16 type AlertsListOpts struct { 17 ScopeEquals *string `url:"scope,omitempty"` 18 ValueEquals *string `url:"value,omitempty"` 19 ScenarioEquals *string `url:"scenario,omitempty"` 20 IPEquals *string `url:"ip,omitempty"` 21 RangeEquals *string `url:"range,omitempty"` 22 Since *string `url:"since,omitempty"` 23 TypeEquals *string `url:"decision_type,omitempty"` 24 Until *string `url:"until,omitempty"` 25 IncludeSimulated *bool `url:"simulated,omitempty"` 26 ActiveDecisionEquals *bool `url:"has_active_decision,omitempty"` 27 Limit *int `url:"limit,omitempty"` 28 Contains *bool `url:"contains,omitempty"` 29 ListOpts 30 } 31 32 type AlertsDeleteOpts struct { 33 ScopeEquals *string `url:"scope,omitempty"` 34 ValueEquals *string `url:"value,omitempty"` 35 ScenarioEquals *string `url:"scenario,omitempty"` 36 IPEquals *string `url:"ip,omitempty"` 37 RangeEquals *string `url:"range,omitempty"` 38 Since *string `url:"since,omitempty"` 39 Until *string `url:"until,omitempty"` 40 ActiveDecisionEquals *bool `url:"has_active_decision,omitempty"` 41 SourceEquals *string `url:"alert_source,omitempty"` 42 Contains *bool `url:"contains,omitempty"` 43 ListOpts 44 } 45 46 func (s *AlertsService) Add(ctx context.Context, alerts models.AddAlertsRequest) (*models.AddAlertsResponse, *Response, error) { 47 48 var added_ids models.AddAlertsResponse 49 50 u := fmt.Sprintf("%s/alerts", s.client.URLPrefix) 51 req, err := s.client.NewRequest("POST", u, &alerts) 52 if err != nil { 53 return nil, nil, err 54 } 55 56 resp, err := s.client.Do(ctx, req, &added_ids) 57 if err != nil { 58 return nil, resp, err 59 } 60 return &added_ids, resp, nil 61 } 62 63 //to demo query arguments 64 func (s *AlertsService) List(ctx context.Context, opts AlertsListOpts) (*models.GetAlertsResponse, *Response, error) { 65 var alerts models.GetAlertsResponse 66 var URI string 67 u := fmt.Sprintf("%s/alerts", s.client.URLPrefix) 68 params, err := qs.Values(opts) 69 if err != nil { 70 return nil, nil, errors.Wrap(err, "building query") 71 } 72 if len(params) > 0 { 73 URI = fmt.Sprintf("%s?%s", u, params.Encode()) 74 } else { 75 URI = u 76 } 77 78 req, err := s.client.NewRequest("GET", URI, nil) 79 if err != nil { 80 return nil, nil, errors.Wrap(err, "building request") 81 } 82 83 resp, err := s.client.Do(ctx, req, &alerts) 84 if err != nil { 85 return nil, resp, errors.Wrap(err, "performing request") 86 } 87 return &alerts, resp, nil 88 } 89 90 //to demo query arguments 91 func (s *AlertsService) Delete(ctx context.Context, opts AlertsDeleteOpts) (*models.DeleteAlertsResponse, *Response, error) { 92 var alerts models.DeleteAlertsResponse 93 params, err := qs.Values(opts) 94 if err != nil { 95 return nil, nil, err 96 } 97 u := fmt.Sprintf("%s/alerts?%s", s.client.URLPrefix, params.Encode()) 98 99 req, err := s.client.NewRequest("DELETE", u, nil) 100 if err != nil { 101 return nil, nil, err 102 } 103 104 resp, err := s.client.Do(ctx, req, &alerts) 105 if err != nil { 106 return nil, resp, err 107 } 108 return &alerts, resp, nil 109 } 110 111 func (s *AlertsService) GetByID(ctx context.Context, alertID int) (*models.Alert, *Response, error) { 112 var alert models.Alert 113 u := fmt.Sprintf("%s/alerts/%d", s.client.URLPrefix, alertID) 114 115 req, err := s.client.NewRequest("GET", u, nil) 116 if err != nil { 117 return nil, nil, err 118 } 119 120 resp, err := s.client.Do(ctx, req, &alert) 121 if err != nil { 122 return nil, nil, err 123 } 124 return &alert, resp, nil 125 }