auth_service.go 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package apiclient
  2. import (
  3. "context"
  4. "fmt"
  5. "net/http"
  6. "github.com/crowdsecurity/crowdsec/pkg/models"
  7. )
  8. // type ApiAlerts service
  9. type AuthService service
  10. // Don't add it to the models, as they are used with LAPI, but the enroll endpoint is specific to CAPI
  11. type enrollRequest struct {
  12. EnrollKey string `json:"attachment_key"`
  13. Name string `json:"name"`
  14. Tags []string `json:"tags"`
  15. Overwrite bool `json:"overwrite"`
  16. }
  17. func (s *AuthService) UnregisterWatcher(ctx context.Context) (*Response, error) {
  18. u := fmt.Sprintf("%s/watchers", s.client.URLPrefix)
  19. req, err := s.client.NewRequest(http.MethodDelete, u, nil)
  20. if err != nil {
  21. return nil, err
  22. }
  23. resp, err := s.client.Do(ctx, req, nil)
  24. if err != nil {
  25. return resp, err
  26. }
  27. return resp, nil
  28. }
  29. func (s *AuthService) RegisterWatcher(ctx context.Context, registration models.WatcherRegistrationRequest) (*Response, error) {
  30. u := fmt.Sprintf("%s/watchers", s.client.URLPrefix)
  31. req, err := s.client.NewRequest(http.MethodPost, u, &registration)
  32. if err != nil {
  33. return nil, err
  34. }
  35. resp, err := s.client.Do(ctx, req, nil)
  36. if err != nil {
  37. return resp, err
  38. }
  39. return resp, nil
  40. }
  41. func (s *AuthService) AuthenticateWatcher(ctx context.Context, auth models.WatcherAuthRequest) (models.WatcherAuthResponse, *Response, error) {
  42. var authResp models.WatcherAuthResponse
  43. u := fmt.Sprintf("%s/watchers/login", s.client.URLPrefix)
  44. req, err := s.client.NewRequest(http.MethodPost, u, &auth)
  45. if err != nil {
  46. return authResp, nil, err
  47. }
  48. resp, err := s.client.Do(ctx, req, &authResp)
  49. if err != nil {
  50. return authResp, resp, err
  51. }
  52. return authResp, resp, nil
  53. }
  54. func (s *AuthService) EnrollWatcher(ctx context.Context, enrollKey string, name string, tags []string, overwrite bool) (*Response, error) {
  55. u := fmt.Sprintf("%s/watchers/enroll", s.client.URLPrefix)
  56. req, err := s.client.NewRequest(http.MethodPost, u, &enrollRequest{EnrollKey: enrollKey, Name: name, Tags: tags, Overwrite: overwrite})
  57. if err != nil {
  58. return nil, err
  59. }
  60. resp, err := s.client.Do(ctx, req, nil)
  61. if err != nil {
  62. return resp, err
  63. }
  64. return resp, nil
  65. }