alerts_service.go 4.3 KB

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