diff --git a/mockns1/account_activity.go b/mockns1/account_activity.go new file mode 100644 index 0000000..5d0c958 --- /dev/null +++ b/mockns1/account_activity.go @@ -0,0 +1,19 @@ +package mockns1 + +import ( + "net/http" + + "gopkg.in/ns1/ns1-go.v2/rest/model/account" +) + +// AddActivityListTestCase sets up a test case for the api.Client.Activity.List() +// function +func (s *Service) AddActivityListTestCase( + requestHeaders, responseHeaders http.Header, + response []*account.Activity, +) error { + return s.AddTestCase( + http.MethodGet, "/account/activity", http.StatusOK, requestHeaders, + responseHeaders, "", response, + ) +} diff --git a/rest/_examples/account.go b/rest/_examples/account.go index a9ccacb..a8b0584 100644 --- a/rest/_examples/account.go +++ b/rest/_examples/account.go @@ -67,4 +67,14 @@ func main() { if _, err := client.APIKeys.Create(&key); err != nil { log.Fatal(err) } + + activity, _, err := client.Activity.List() + if err != nil { + log.Fatal(err) + } + + for _, a := range activity { + b, _ := json.MarshalIndent(a, "", " ") + fmt.Println(string(b)) + } } diff --git a/rest/account_activity.go b/rest/account_activity.go new file mode 100644 index 0000000..38ed1eb --- /dev/null +++ b/rest/account_activity.go @@ -0,0 +1,29 @@ +package rest + +import ( + "net/http" + + "gopkg.in/ns1/ns1-go.v2/rest/model/account" +) + +// ActivityService handles 'account/activity' endpoint. +type ActivityService service + +// List returns all activity in the account. +// +// NS1 API docs: https://developer.ibm.com/apis/catalog/ns1--ibm-ns1-connect-api/api/API--ns1--ibm-ns1-connect-api#getActivity +func (s *ActivityService) List() ([]*account.Activity, *http.Response, error) { + // TODO: add support for url parameters to adjust endpoint behavior? + req, err := s.client.NewRequest("GET", "account/activity", nil) + if err != nil { + return nil, nil, err + } + + al := []*account.Activity{} + resp, err := s.client.Do(req, &al) + if err != nil { + return nil, resp, err + } + + return al, resp, nil +} diff --git a/rest/client.go b/rest/client.go index 038b9d7..e8846f2 100644 --- a/rest/client.go +++ b/rest/client.go @@ -91,6 +91,7 @@ type Client struct { Network *NetworkService GlobalIPWhitelist *GlobalIPWhitelistService Datasets *DatasetsService + Activity *ActivityService } // NewClient constructs and returns a reference to an instantiated Client. @@ -139,6 +140,7 @@ func NewClient(httpClient Doer, options ...func(*Client)) *Client { c.Network = (*NetworkService)(&c.common) c.GlobalIPWhitelist = (*GlobalIPWhitelistService)(&c.common) c.Datasets = (*DatasetsService)(&c.common) + c.Activity = (*ActivityService)(&c.common) for _, option := range options { option(c) diff --git a/rest/model/account/activity.go b/rest/model/account/activity.go new file mode 100644 index 0000000..1427ecc --- /dev/null +++ b/rest/model/account/activity.go @@ -0,0 +1,13 @@ +package account + +// Activity wraps an NS1 /account/activity resource +type Activity struct { + UserID string `json:"user_id,omitempty"` + ResourceID string `json:"resource_id,omitempty"` + Timestamp int `json:"timestamp,omitempty"` + UserType string `json:"user_type,omitempty"` + Action string `json:"action,omitempty"` + UserName string `json:"user_name,omitempty"` + ID string `json:"id,omitempty"` + ResourceType string `json:"resource_type,omitempty"` +}