decisions_service.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. package apiclient
  2. import (
  3. "context"
  4. "fmt"
  5. "strings"
  6. "github.com/crowdsecurity/crowdsec/pkg/models"
  7. qs "github.com/google/go-querystring/query"
  8. )
  9. type DecisionsService service
  10. type DecisionsListOpts struct {
  11. ScopeEquals *string `url:"scope,omitempty"`
  12. ValueEquals *string `url:"value,omitempty"`
  13. TypeEquals *string `url:"type,omitempty"`
  14. IPEquals *string `url:"ip,omitempty"`
  15. RangeEquals *string `url:"range,omitempty"`
  16. Contains *bool `url:"contains,omitempty"`
  17. ListOpts
  18. }
  19. type DecisionsDeleteOpts struct {
  20. ScopeEquals *string `url:"scope,omitempty"`
  21. ValueEquals *string `url:"value,omitempty"`
  22. TypeEquals *string `url:"type,omitempty"`
  23. IPEquals *string `url:"ip,omitempty"`
  24. RangeEquals *string `url:"range,omitempty"`
  25. Contains *bool `url:"contains,omitempty"`
  26. ListOpts
  27. }
  28. //to demo query arguments
  29. func (s *DecisionsService) List(ctx context.Context, opts DecisionsListOpts) (*models.GetDecisionsResponse, *Response, error) {
  30. var decisions models.GetDecisionsResponse
  31. params, err := qs.Values(opts)
  32. if err != nil {
  33. return nil, nil, err
  34. }
  35. u := fmt.Sprintf("%s/decisions?%s", s.client.URLPrefix, params.Encode())
  36. req, err := s.client.NewRequest("GET", u, nil)
  37. if err != nil {
  38. return nil, nil, err
  39. }
  40. resp, err := s.client.Do(ctx, req, &decisions)
  41. if err != nil {
  42. return nil, resp, err
  43. }
  44. return &decisions, resp, nil
  45. }
  46. func (s *DecisionsService) GetStream(ctx context.Context, startup bool, scopes []string) (*models.DecisionsStreamResponse, *Response, error) {
  47. var decisions models.DecisionsStreamResponse
  48. u := fmt.Sprintf("%s/decisions/stream?startup=%t", s.client.URLPrefix, startup)
  49. if len(scopes) > 0 {
  50. u += "&scopes=" + strings.Join(scopes, ",")
  51. }
  52. req, err := s.client.NewRequest("GET", u, nil)
  53. if err != nil {
  54. return nil, nil, err
  55. }
  56. resp, err := s.client.Do(ctx, req, &decisions)
  57. if err != nil {
  58. return nil, resp, err
  59. }
  60. return &decisions, resp, nil
  61. }
  62. func (s *DecisionsService) StopStream(ctx context.Context) (*Response, error) {
  63. u := fmt.Sprintf("%s/decisions", s.client.URLPrefix)
  64. req, err := s.client.NewRequest("DELETE", u, nil)
  65. if err != nil {
  66. return nil, err
  67. }
  68. resp, err := s.client.Do(ctx, req, nil)
  69. if err != nil {
  70. return resp, err
  71. }
  72. return resp, nil
  73. }
  74. func (s *DecisionsService) Delete(ctx context.Context, opts DecisionsDeleteOpts) (*models.DeleteDecisionResponse, *Response, error) {
  75. var deleteDecisionResponse models.DeleteDecisionResponse
  76. params, err := qs.Values(opts)
  77. if err != nil {
  78. return nil, nil, err
  79. }
  80. u := fmt.Sprintf("%s/decisions?%s", s.client.URLPrefix, params.Encode())
  81. req, err := s.client.NewRequest("DELETE", u, nil)
  82. if err != nil {
  83. return nil, nil, err
  84. }
  85. resp, err := s.client.Do(ctx, req, &deleteDecisionResponse)
  86. if err != nil {
  87. return nil, resp, err
  88. }
  89. return &deleteDecisionResponse, resp, nil
  90. }
  91. func (s *DecisionsService) DeleteOne(ctx context.Context, decision_id string) (*models.DeleteDecisionResponse, *Response, error) {
  92. var deleteDecisionResponse models.DeleteDecisionResponse
  93. u := fmt.Sprintf("%s/decisions/%s", s.client.URLPrefix, decision_id)
  94. req, err := s.client.NewRequest("DELETE", u, nil)
  95. if err != nil {
  96. return nil, nil, err
  97. }
  98. resp, err := s.client.Do(ctx, req, &deleteDecisionResponse)
  99. if err != nil {
  100. return nil, resp, err
  101. }
  102. return &deleteDecisionResponse, resp, nil
  103. }