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  }