Skip to content

Commit 722637c

Browse files
api-clients-generation-pipeline[bot]ci.datadog-api-spec
andauthored
Add OpenAPI documentation for list and get indicators of compromise endpoints (DataDog#3967)
Co-authored-by: ci.datadog-api-spec <packages@datadoghq.com>
1 parent bcf1047 commit 722637c

30 files changed

Lines changed: 4467 additions & 0 deletions

.generator/schemas/v2/openapi.yaml

Lines changed: 423 additions & 0 deletions
Large diffs are not rendered by default.

api/datadog/configuration.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -706,12 +706,14 @@ func NewConfiguration() *Configuration {
706706
"v2.DeleteThreatHuntingJob": false,
707707
"v2.GetContentPacksStates": false,
708708
"v2.GetFinding": false,
709+
"v2.GetIndicatorOfCompromise": false,
709710
"v2.GetRuleVersionHistory": false,
710711
"v2.GetSecretsRules": false,
711712
"v2.GetSecurityMonitoringHistsignal": false,
712713
"v2.GetSecurityMonitoringHistsignalsByJobId": false,
713714
"v2.GetThreatHuntingJob": false,
714715
"v2.ListFindings": false,
716+
"v2.ListIndicatorsOfCompromise": false,
715717
"v2.ListMultipleRulesets": false,
716718
"v2.ListScannedAssetsMetadata": false,
717719
"v2.ListSecurityMonitoringHistsignals": false,

api/datadogV2/api_security_monitoring.go

Lines changed: 241 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2910,6 +2910,93 @@ func (a *SecurityMonitoringApi) GetFinding(ctx _context.Context, findingId strin
29102910
return localVarReturnValue, localVarHTTPResponse, nil
29112911
}
29122912

2913+
// GetIndicatorOfCompromise Get an indicator of compromise.
2914+
// Get detailed information about a specific indicator of compromise (IoC).
2915+
func (a *SecurityMonitoringApi) GetIndicatorOfCompromise(ctx _context.Context, indicator string) (GetIoCIndicatorResponse, *_nethttp.Response, error) {
2916+
var (
2917+
localVarHTTPMethod = _nethttp.MethodGet
2918+
localVarPostBody interface{}
2919+
localVarReturnValue GetIoCIndicatorResponse
2920+
)
2921+
2922+
operationId := "v2.GetIndicatorOfCompromise"
2923+
isOperationEnabled := a.Client.Cfg.IsUnstableOperationEnabled(operationId)
2924+
if !isOperationEnabled {
2925+
return localVarReturnValue, nil, datadog.GenericOpenAPIError{ErrorMessage: _fmt.Sprintf("Unstable operation '%s' is disabled", operationId)}
2926+
}
2927+
if isOperationEnabled && a.Client.Cfg.Debug {
2928+
_log.Printf("WARNING: Using unstable operation '%s'", operationId)
2929+
}
2930+
2931+
localBasePath, err := a.Client.Cfg.ServerURLWithContext(ctx, "v2.SecurityMonitoringApi.GetIndicatorOfCompromise")
2932+
if err != nil {
2933+
return localVarReturnValue, nil, datadog.GenericOpenAPIError{ErrorMessage: err.Error()}
2934+
}
2935+
2936+
localVarPath := localBasePath + "/api/v2/security/siem/ioc-explorer/indicator"
2937+
2938+
localVarHeaderParams := make(map[string]string)
2939+
localVarQueryParams := _neturl.Values{}
2940+
localVarFormParams := _neturl.Values{}
2941+
localVarQueryParams.Add("indicator", datadog.ParameterToString(indicator, ""))
2942+
localVarHeaderParams["Accept"] = "application/json"
2943+
2944+
if a.Client.Cfg.DelegatedTokenConfig != nil {
2945+
err = datadog.UseDelegatedTokenAuth(ctx, &localVarHeaderParams, a.Client.Cfg.DelegatedTokenConfig)
2946+
if err != nil {
2947+
return localVarReturnValue, nil, err
2948+
}
2949+
} else {
2950+
datadog.SetAuthKeys(
2951+
ctx,
2952+
&localVarHeaderParams,
2953+
[2]string{"apiKeyAuth", "DD-API-KEY"},
2954+
[2]string{"appKeyAuth", "DD-APPLICATION-KEY"},
2955+
)
2956+
}
2957+
req, err := a.Client.PrepareRequest(ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, nil)
2958+
if err != nil {
2959+
return localVarReturnValue, nil, err
2960+
}
2961+
2962+
localVarHTTPResponse, err := a.Client.CallAPI(req)
2963+
if err != nil || localVarHTTPResponse == nil {
2964+
return localVarReturnValue, localVarHTTPResponse, err
2965+
}
2966+
2967+
localVarBody, err := datadog.ReadBody(localVarHTTPResponse)
2968+
if err != nil {
2969+
return localVarReturnValue, localVarHTTPResponse, err
2970+
}
2971+
2972+
if localVarHTTPResponse.StatusCode >= 300 {
2973+
newErr := datadog.GenericOpenAPIError{
2974+
ErrorBody: localVarBody,
2975+
ErrorMessage: localVarHTTPResponse.Status,
2976+
}
2977+
if localVarHTTPResponse.StatusCode == 400 || localVarHTTPResponse.StatusCode == 403 || localVarHTTPResponse.StatusCode == 404 || localVarHTTPResponse.StatusCode == 429 {
2978+
var v APIErrorResponse
2979+
err = a.Client.Decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
2980+
if err != nil {
2981+
return localVarReturnValue, localVarHTTPResponse, newErr
2982+
}
2983+
newErr.ErrorModel = v
2984+
}
2985+
return localVarReturnValue, localVarHTTPResponse, newErr
2986+
}
2987+
2988+
err = a.Client.Decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
2989+
if err != nil {
2990+
newErr := datadog.GenericOpenAPIError{
2991+
ErrorBody: localVarBody,
2992+
ErrorMessage: err.Error(),
2993+
}
2994+
return localVarReturnValue, localVarHTTPResponse, newErr
2995+
}
2996+
2997+
return localVarReturnValue, localVarHTTPResponse, nil
2998+
}
2999+
29133000
// GetInvestigationLogQueriesMatchingSignal Get investigation queries for a signal.
29143001
// Get the list of investigation log queries available for a given security signal.
29153002
func (a *SecurityMonitoringApi) GetInvestigationLogQueriesMatchingSignal(ctx _context.Context, signalId string) (SecurityMonitoringSignalSuggestedActionsResponse, *_nethttp.Response, error) {
@@ -5403,6 +5490,160 @@ func (a *SecurityMonitoringApi) ListFindingsWithPagination(ctx _context.Context,
54035490
return items, cancel
54045491
}
54055492

5493+
// ListIndicatorsOfCompromiseOptionalParameters holds optional parameters for ListIndicatorsOfCompromise.
5494+
type ListIndicatorsOfCompromiseOptionalParameters struct {
5495+
Limit *int32
5496+
Offset *int32
5497+
Query *string
5498+
SortColumn *string
5499+
SortOrder *string
5500+
}
5501+
5502+
// NewListIndicatorsOfCompromiseOptionalParameters creates an empty struct for parameters.
5503+
func NewListIndicatorsOfCompromiseOptionalParameters() *ListIndicatorsOfCompromiseOptionalParameters {
5504+
this := ListIndicatorsOfCompromiseOptionalParameters{}
5505+
return &this
5506+
}
5507+
5508+
// WithLimit sets the corresponding parameter name and returns the struct.
5509+
func (r *ListIndicatorsOfCompromiseOptionalParameters) WithLimit(limit int32) *ListIndicatorsOfCompromiseOptionalParameters {
5510+
r.Limit = &limit
5511+
return r
5512+
}
5513+
5514+
// WithOffset sets the corresponding parameter name and returns the struct.
5515+
func (r *ListIndicatorsOfCompromiseOptionalParameters) WithOffset(offset int32) *ListIndicatorsOfCompromiseOptionalParameters {
5516+
r.Offset = &offset
5517+
return r
5518+
}
5519+
5520+
// WithQuery sets the corresponding parameter name and returns the struct.
5521+
func (r *ListIndicatorsOfCompromiseOptionalParameters) WithQuery(query string) *ListIndicatorsOfCompromiseOptionalParameters {
5522+
r.Query = &query
5523+
return r
5524+
}
5525+
5526+
// WithSortColumn sets the corresponding parameter name and returns the struct.
5527+
func (r *ListIndicatorsOfCompromiseOptionalParameters) WithSortColumn(sortColumn string) *ListIndicatorsOfCompromiseOptionalParameters {
5528+
r.SortColumn = &sortColumn
5529+
return r
5530+
}
5531+
5532+
// WithSortOrder sets the corresponding parameter name and returns the struct.
5533+
func (r *ListIndicatorsOfCompromiseOptionalParameters) WithSortOrder(sortOrder string) *ListIndicatorsOfCompromiseOptionalParameters {
5534+
r.SortOrder = &sortOrder
5535+
return r
5536+
}
5537+
5538+
// ListIndicatorsOfCompromise List indicators of compromise.
5539+
// Get a list of indicators of compromise (IoCs) matching the specified filters.
5540+
func (a *SecurityMonitoringApi) ListIndicatorsOfCompromise(ctx _context.Context, o ...ListIndicatorsOfCompromiseOptionalParameters) (IoCExplorerListResponse, *_nethttp.Response, error) {
5541+
var (
5542+
localVarHTTPMethod = _nethttp.MethodGet
5543+
localVarPostBody interface{}
5544+
localVarReturnValue IoCExplorerListResponse
5545+
optionalParams ListIndicatorsOfCompromiseOptionalParameters
5546+
)
5547+
5548+
if len(o) > 1 {
5549+
return localVarReturnValue, nil, datadog.ReportError("only one argument of type ListIndicatorsOfCompromiseOptionalParameters is allowed")
5550+
}
5551+
if len(o) == 1 {
5552+
optionalParams = o[0]
5553+
}
5554+
5555+
operationId := "v2.ListIndicatorsOfCompromise"
5556+
isOperationEnabled := a.Client.Cfg.IsUnstableOperationEnabled(operationId)
5557+
if !isOperationEnabled {
5558+
return localVarReturnValue, nil, datadog.GenericOpenAPIError{ErrorMessage: _fmt.Sprintf("Unstable operation '%s' is disabled", operationId)}
5559+
}
5560+
if isOperationEnabled && a.Client.Cfg.Debug {
5561+
_log.Printf("WARNING: Using unstable operation '%s'", operationId)
5562+
}
5563+
5564+
localBasePath, err := a.Client.Cfg.ServerURLWithContext(ctx, "v2.SecurityMonitoringApi.ListIndicatorsOfCompromise")
5565+
if err != nil {
5566+
return localVarReturnValue, nil, datadog.GenericOpenAPIError{ErrorMessage: err.Error()}
5567+
}
5568+
5569+
localVarPath := localBasePath + "/api/v2/security/siem/ioc-explorer"
5570+
5571+
localVarHeaderParams := make(map[string]string)
5572+
localVarQueryParams := _neturl.Values{}
5573+
localVarFormParams := _neturl.Values{}
5574+
if optionalParams.Limit != nil {
5575+
localVarQueryParams.Add("limit", datadog.ParameterToString(*optionalParams.Limit, ""))
5576+
}
5577+
if optionalParams.Offset != nil {
5578+
localVarQueryParams.Add("offset", datadog.ParameterToString(*optionalParams.Offset, ""))
5579+
}
5580+
if optionalParams.Query != nil {
5581+
localVarQueryParams.Add("query", datadog.ParameterToString(*optionalParams.Query, ""))
5582+
}
5583+
if optionalParams.SortColumn != nil {
5584+
localVarQueryParams.Add("sort[column]", datadog.ParameterToString(*optionalParams.SortColumn, ""))
5585+
}
5586+
if optionalParams.SortOrder != nil {
5587+
localVarQueryParams.Add("sort[order]", datadog.ParameterToString(*optionalParams.SortOrder, ""))
5588+
}
5589+
localVarHeaderParams["Accept"] = "application/json"
5590+
5591+
if a.Client.Cfg.DelegatedTokenConfig != nil {
5592+
err = datadog.UseDelegatedTokenAuth(ctx, &localVarHeaderParams, a.Client.Cfg.DelegatedTokenConfig)
5593+
if err != nil {
5594+
return localVarReturnValue, nil, err
5595+
}
5596+
} else {
5597+
datadog.SetAuthKeys(
5598+
ctx,
5599+
&localVarHeaderParams,
5600+
[2]string{"apiKeyAuth", "DD-API-KEY"},
5601+
[2]string{"appKeyAuth", "DD-APPLICATION-KEY"},
5602+
)
5603+
}
5604+
req, err := a.Client.PrepareRequest(ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, nil)
5605+
if err != nil {
5606+
return localVarReturnValue, nil, err
5607+
}
5608+
5609+
localVarHTTPResponse, err := a.Client.CallAPI(req)
5610+
if err != nil || localVarHTTPResponse == nil {
5611+
return localVarReturnValue, localVarHTTPResponse, err
5612+
}
5613+
5614+
localVarBody, err := datadog.ReadBody(localVarHTTPResponse)
5615+
if err != nil {
5616+
return localVarReturnValue, localVarHTTPResponse, err
5617+
}
5618+
5619+
if localVarHTTPResponse.StatusCode >= 300 {
5620+
newErr := datadog.GenericOpenAPIError{
5621+
ErrorBody: localVarBody,
5622+
ErrorMessage: localVarHTTPResponse.Status,
5623+
}
5624+
if localVarHTTPResponse.StatusCode == 400 || localVarHTTPResponse.StatusCode == 403 || localVarHTTPResponse.StatusCode == 429 {
5625+
var v APIErrorResponse
5626+
err = a.Client.Decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
5627+
if err != nil {
5628+
return localVarReturnValue, localVarHTTPResponse, newErr
5629+
}
5630+
newErr.ErrorModel = v
5631+
}
5632+
return localVarReturnValue, localVarHTTPResponse, newErr
5633+
}
5634+
5635+
err = a.Client.Decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
5636+
if err != nil {
5637+
newErr := datadog.GenericOpenAPIError{
5638+
ErrorBody: localVarBody,
5639+
ErrorMessage: err.Error(),
5640+
}
5641+
return localVarReturnValue, localVarHTTPResponse, newErr
5642+
}
5643+
5644+
return localVarReturnValue, localVarHTTPResponse, nil
5645+
}
5646+
54065647
// ListMultipleRulesets Ruleset get multiple.
54075648
// Get rules for multiple rulesets in batch.
54085649
func (a *SecurityMonitoringApi) ListMultipleRulesets(ctx _context.Context, body GetMultipleRulesetsRequest) (GetMultipleRulesetsResponse, *_nethttp.Response, error) {

api/datadogV2/doc.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -764,6 +764,7 @@
764764
// - [SecurityMonitoringApi.GetCriticalAssetsAffectingRule]
765765
// - [SecurityMonitoringApi.GetCustomFramework]
766766
// - [SecurityMonitoringApi.GetFinding]
767+
// - [SecurityMonitoringApi.GetIndicatorOfCompromise]
767768
// - [SecurityMonitoringApi.GetInvestigationLogQueriesMatchingSignal]
768769
// - [SecurityMonitoringApi.GetResourceEvaluationFilters]
769770
// - [SecurityMonitoringApi.GetRuleVersionHistory]
@@ -787,6 +788,7 @@
787788
// - [SecurityMonitoringApi.GetVulnerabilityNotificationRules]
788789
// - [SecurityMonitoringApi.ListAssetsSBOMs]
789790
// - [SecurityMonitoringApi.ListFindings]
791+
// - [SecurityMonitoringApi.ListIndicatorsOfCompromise]
790792
// - [SecurityMonitoringApi.ListMultipleRulesets]
791793
// - [SecurityMonitoringApi.ListScannedAssetsMetadata]
792794
// - [SecurityMonitoringApi.ListSecurityFilters]
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
// Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License.
2+
// This product includes software developed at Datadog (https://www.datadoghq.com/).
3+
// Copyright 2019-Present Datadog, Inc.
4+
5+
package datadogV2
6+
7+
import (
8+
"github.com/DataDog/datadog-api-client-go/v2/api/datadog"
9+
)
10+
11+
// GetIoCIndicatorResponse Response for the get indicator of compromise endpoint.
12+
type GetIoCIndicatorResponse struct {
13+
// IoC indicator response data object.
14+
Data *GetIoCIndicatorResponseData `json:"data,omitempty"`
15+
// UnparsedObject contains the raw value of the object if there was an error when deserializing into the struct
16+
UnparsedObject map[string]interface{} `json:"-"`
17+
AdditionalProperties map[string]interface{} `json:"-"`
18+
}
19+
20+
// NewGetIoCIndicatorResponse instantiates a new GetIoCIndicatorResponse object.
21+
// This constructor will assign default values to properties that have it defined,
22+
// and makes sure properties required by API are set, but the set of arguments
23+
// will change when the set of required properties is changed.
24+
func NewGetIoCIndicatorResponse() *GetIoCIndicatorResponse {
25+
this := GetIoCIndicatorResponse{}
26+
return &this
27+
}
28+
29+
// NewGetIoCIndicatorResponseWithDefaults instantiates a new GetIoCIndicatorResponse object.
30+
// This constructor will only assign default values to properties that have it defined,
31+
// but it doesn't guarantee that properties required by API are set.
32+
func NewGetIoCIndicatorResponseWithDefaults() *GetIoCIndicatorResponse {
33+
this := GetIoCIndicatorResponse{}
34+
return &this
35+
}
36+
37+
// GetData returns the Data field value if set, zero value otherwise.
38+
func (o *GetIoCIndicatorResponse) GetData() GetIoCIndicatorResponseData {
39+
if o == nil || o.Data == nil {
40+
var ret GetIoCIndicatorResponseData
41+
return ret
42+
}
43+
return *o.Data
44+
}
45+
46+
// GetDataOk returns a tuple with the Data field value if set, nil otherwise
47+
// and a boolean to check if the value has been set.
48+
func (o *GetIoCIndicatorResponse) GetDataOk() (*GetIoCIndicatorResponseData, bool) {
49+
if o == nil || o.Data == nil {
50+
return nil, false
51+
}
52+
return o.Data, true
53+
}
54+
55+
// HasData returns a boolean if a field has been set.
56+
func (o *GetIoCIndicatorResponse) HasData() bool {
57+
return o != nil && o.Data != nil
58+
}
59+
60+
// SetData gets a reference to the given GetIoCIndicatorResponseData and assigns it to the Data field.
61+
func (o *GetIoCIndicatorResponse) SetData(v GetIoCIndicatorResponseData) {
62+
o.Data = &v
63+
}
64+
65+
// MarshalJSON serializes the struct using spec logic.
66+
func (o GetIoCIndicatorResponse) MarshalJSON() ([]byte, error) {
67+
toSerialize := map[string]interface{}{}
68+
if o.UnparsedObject != nil {
69+
return datadog.Marshal(o.UnparsedObject)
70+
}
71+
if o.Data != nil {
72+
toSerialize["data"] = o.Data
73+
}
74+
75+
for key, value := range o.AdditionalProperties {
76+
toSerialize[key] = value
77+
}
78+
return datadog.Marshal(toSerialize)
79+
}
80+
81+
// UnmarshalJSON deserializes the given payload.
82+
func (o *GetIoCIndicatorResponse) UnmarshalJSON(bytes []byte) (err error) {
83+
all := struct {
84+
Data *GetIoCIndicatorResponseData `json:"data,omitempty"`
85+
}{}
86+
if err = datadog.Unmarshal(bytes, &all); err != nil {
87+
return datadog.Unmarshal(bytes, &o.UnparsedObject)
88+
}
89+
additionalProperties := make(map[string]interface{})
90+
if err = datadog.Unmarshal(bytes, &additionalProperties); err == nil {
91+
datadog.DeleteKeys(additionalProperties, &[]string{"data"})
92+
} else {
93+
return err
94+
}
95+
96+
hasInvalidField := false
97+
if all.Data != nil && all.Data.UnparsedObject != nil && o.UnparsedObject == nil {
98+
hasInvalidField = true
99+
}
100+
o.Data = all.Data
101+
102+
if len(additionalProperties) > 0 {
103+
o.AdditionalProperties = additionalProperties
104+
}
105+
106+
if hasInvalidField {
107+
return datadog.Unmarshal(bytes, &o.UnparsedObject)
108+
}
109+
110+
return nil
111+
}

0 commit comments

Comments
 (0)