1// Code generated by smithy-go-codegen DO NOT EDIT.
2
3package guardduty
4
5import (
6	"context"
7	"fmt"
8	awsmiddleware "github.com/aws/aws-sdk-go-v2/aws/middleware"
9	"github.com/aws/aws-sdk-go-v2/aws/signer/v4"
10	"github.com/aws/aws-sdk-go-v2/service/guardduty/types"
11	"github.com/aws/smithy-go/middleware"
12	smithyhttp "github.com/aws/smithy-go/transport/http"
13)
14
15// Creates a filter using the specified finding criteria.
16func (c *Client) CreateFilter(ctx context.Context, params *CreateFilterInput, optFns ...func(*Options)) (*CreateFilterOutput, error) {
17	if params == nil {
18		params = &CreateFilterInput{}
19	}
20
21	result, metadata, err := c.invokeOperation(ctx, "CreateFilter", params, optFns, addOperationCreateFilterMiddlewares)
22	if err != nil {
23		return nil, err
24	}
25
26	out := result.(*CreateFilterOutput)
27	out.ResultMetadata = metadata
28	return out, nil
29}
30
31type CreateFilterInput struct {
32
33	// The ID of the detector belonging to the GuardDuty account that you want to
34	// create a filter for.
35	//
36	// This member is required.
37	DetectorId *string
38
39	// Represents the criteria to be used in the filter for querying findings. You can
40	// only use the following attributes to query findings:
41	//
42	// * accountId
43	//
44	// * region
45	//
46	// *
47	// confidence
48	//
49	// * id
50	//
51	// * resource.accessKeyDetails.accessKeyId
52	//
53	// *
54	// resource.accessKeyDetails.principalId
55	//
56	// * resource.accessKeyDetails.userName
57	//
58	// *
59	// resource.accessKeyDetails.userType
60	//
61	// *
62	// resource.instanceDetails.iamInstanceProfile.id
63	//
64	// *
65	// resource.instanceDetails.imageId
66	//
67	// * resource.instanceDetails.instanceId
68	//
69	// *
70	// resource.instanceDetails.outpostArn
71	//
72	// *
73	// resource.instanceDetails.networkInterfaces.ipv6Addresses
74	//
75	// *
76	// resource.instanceDetails.networkInterfaces.privateIpAddresses.privateIpAddress
77	//
78	// *
79	// resource.instanceDetails.networkInterfaces.publicDnsName
80	//
81	// *
82	// resource.instanceDetails.networkInterfaces.publicIp
83	//
84	// *
85	// resource.instanceDetails.networkInterfaces.securityGroups.groupId
86	//
87	// *
88	// resource.instanceDetails.networkInterfaces.securityGroups.groupName
89	//
90	// *
91	// resource.instanceDetails.networkInterfaces.subnetId
92	//
93	// *
94	// resource.instanceDetails.networkInterfaces.vpcId
95	//
96	// *
97	// resource.instanceDetails.tags.key
98	//
99	// * resource.instanceDetails.tags.value
100	//
101	// *
102	// resource.resourceType
103	//
104	// * service.action.actionType
105	//
106	// *
107	// service.action.awsApiCallAction.api
108	//
109	// *
110	// service.action.awsApiCallAction.callerType
111	//
112	// *
113	// service.action.awsApiCallAction.errorCode
114	//
115	// *
116	// service.action.awsApiCallAction.remoteIpDetails.city.cityName
117	//
118	// *
119	// service.action.awsApiCallAction.remoteIpDetails.country.countryName
120	//
121	// *
122	// service.action.awsApiCallAction.remoteIpDetails.ipAddressV4
123	//
124	// *
125	// service.action.awsApiCallAction.remoteIpDetails.organization.asn
126	//
127	// *
128	// service.action.awsApiCallAction.remoteIpDetails.organization.asnOrg
129	//
130	// *
131	// service.action.awsApiCallAction.serviceName
132	//
133	// *
134	// service.action.dnsRequestAction.domain
135	//
136	// *
137	// service.action.networkConnectionAction.blocked
138	//
139	// *
140	// service.action.networkConnectionAction.connectionDirection
141	//
142	// *
143	// service.action.networkConnectionAction.localPortDetails.port
144	//
145	// *
146	// service.action.networkConnectionAction.protocol
147	//
148	// *
149	// service.action.networkConnectionAction.localIpDetails.ipAddressV4
150	//
151	// *
152	// service.action.networkConnectionAction.remoteIpDetails.city.cityName
153	//
154	// *
155	// service.action.networkConnectionAction.remoteIpDetails.country.countryName
156	//
157	// *
158	// service.action.networkConnectionAction.remoteIpDetails.ipAddressV4
159	//
160	// *
161	// service.action.networkConnectionAction.remoteIpDetails.organization.asn
162	//
163	// *
164	// service.action.networkConnectionAction.remoteIpDetails.organization.asnOrg
165	//
166	// *
167	// service.action.networkConnectionAction.remotePortDetails.port
168	//
169	// *
170	// service.additionalInfo.threatListName
171	//
172	// * service.archived When this attribute is
173	// set to TRUE, only archived findings are listed. When it's set to FALSE, only
174	// unarchived findings are listed. When this attribute is not set, all existing
175	// findings are listed.
176	//
177	// * service.resourceRole
178	//
179	// * severity
180	//
181	// * type
182	//
183	// * updatedAt
184	// Type: ISO 8601 string format: YYYY-MM-DDTHH:MM:SS.SSSZ or YYYY-MM-DDTHH:MM:SSZ
185	// depending on whether the value contains milliseconds.
186	//
187	// This member is required.
188	FindingCriteria *types.FindingCriteria
189
190	// The name of the filter. Minimum length of 3. Maximum length of 64. Valid
191	// characters include alphanumeric characters, dot (.), underscore (_), and dash
192	// (-). Spaces are not allowed.
193	//
194	// This member is required.
195	Name *string
196
197	// Specifies the action that is to be applied to the findings that match the
198	// filter.
199	Action types.FilterAction
200
201	// The idempotency token for the create request.
202	ClientToken *string
203
204	// The description of the filter.
205	Description *string
206
207	// Specifies the position of the filter in the list of current filters. Also
208	// specifies the order in which this filter is applied to the findings.
209	Rank int32
210
211	// The tags to be added to a new filter resource.
212	Tags map[string]string
213}
214
215type CreateFilterOutput struct {
216
217	// The name of the successfully created filter.
218	//
219	// This member is required.
220	Name *string
221
222	// Metadata pertaining to the operation's result.
223	ResultMetadata middleware.Metadata
224}
225
226func addOperationCreateFilterMiddlewares(stack *middleware.Stack, options Options) (err error) {
227	err = stack.Serialize.Add(&awsRestjson1_serializeOpCreateFilter{}, middleware.After)
228	if err != nil {
229		return err
230	}
231	err = stack.Deserialize.Add(&awsRestjson1_deserializeOpCreateFilter{}, middleware.After)
232	if err != nil {
233		return err
234	}
235	if err = addSetLoggerMiddleware(stack, options); err != nil {
236		return err
237	}
238	if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil {
239		return err
240	}
241	if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil {
242		return err
243	}
244	if err = addResolveEndpointMiddleware(stack, options); err != nil {
245		return err
246	}
247	if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil {
248		return err
249	}
250	if err = addRetryMiddlewares(stack, options); err != nil {
251		return err
252	}
253	if err = addHTTPSignerV4Middleware(stack, options); err != nil {
254		return err
255	}
256	if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil {
257		return err
258	}
259	if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil {
260		return err
261	}
262	if err = addClientUserAgent(stack); err != nil {
263		return err
264	}
265	if err = smithyhttp.AddErrorCloseResponseBodyMiddleware(stack); err != nil {
266		return err
267	}
268	if err = smithyhttp.AddCloseResponseBodyMiddleware(stack); err != nil {
269		return err
270	}
271	if err = addIdempotencyToken_opCreateFilterMiddleware(stack, options); err != nil {
272		return err
273	}
274	if err = addOpCreateFilterValidationMiddleware(stack); err != nil {
275		return err
276	}
277	if err = stack.Initialize.Add(newServiceMetadataMiddleware_opCreateFilter(options.Region), middleware.Before); err != nil {
278		return err
279	}
280	if err = addRequestIDRetrieverMiddleware(stack); err != nil {
281		return err
282	}
283	if err = addResponseErrorMiddleware(stack); err != nil {
284		return err
285	}
286	if err = addRequestResponseLogging(stack, options); err != nil {
287		return err
288	}
289	return nil
290}
291
292type idempotencyToken_initializeOpCreateFilter struct {
293	tokenProvider IdempotencyTokenProvider
294}
295
296func (*idempotencyToken_initializeOpCreateFilter) ID() string {
297	return "OperationIdempotencyTokenAutoFill"
298}
299
300func (m *idempotencyToken_initializeOpCreateFilter) HandleInitialize(ctx context.Context, in middleware.InitializeInput, next middleware.InitializeHandler) (
301	out middleware.InitializeOutput, metadata middleware.Metadata, err error,
302) {
303	if m.tokenProvider == nil {
304		return next.HandleInitialize(ctx, in)
305	}
306
307	input, ok := in.Parameters.(*CreateFilterInput)
308	if !ok {
309		return out, metadata, fmt.Errorf("expected middleware input to be of type *CreateFilterInput ")
310	}
311
312	if input.ClientToken == nil {
313		t, err := m.tokenProvider.GetIdempotencyToken()
314		if err != nil {
315			return out, metadata, err
316		}
317		input.ClientToken = &t
318	}
319	return next.HandleInitialize(ctx, in)
320}
321func addIdempotencyToken_opCreateFilterMiddleware(stack *middleware.Stack, cfg Options) error {
322	return stack.Initialize.Add(&idempotencyToken_initializeOpCreateFilter{tokenProvider: cfg.IdempotencyTokenProvider}, middleware.Before)
323}
324
325func newServiceMetadataMiddleware_opCreateFilter(region string) *awsmiddleware.RegisterServiceMetadata {
326	return &awsmiddleware.RegisterServiceMetadata{
327		Region:        region,
328		ServiceID:     ServiceID,
329		SigningName:   "guardduty",
330		OperationName: "CreateFilter",
331	}
332}
333