1// Code generated by smithy-go-codegen DO NOT EDIT. 2 3package route53resolver 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/route53resolver/types" 11 "github.com/aws/smithy-go/middleware" 12 smithyhttp "github.com/aws/smithy-go/transport/http" 13) 14 15// Retrieves the firewall rules that you have defined for the specified firewall 16// rule group. DNS Firewall uses the rules in a rule group to filter DNS network 17// traffic for a VPC. A single call might return only a partial list of the rules. 18// For information, see MaxResults. 19func (c *Client) ListFirewallRules(ctx context.Context, params *ListFirewallRulesInput, optFns ...func(*Options)) (*ListFirewallRulesOutput, error) { 20 if params == nil { 21 params = &ListFirewallRulesInput{} 22 } 23 24 result, metadata, err := c.invokeOperation(ctx, "ListFirewallRules", params, optFns, c.addOperationListFirewallRulesMiddlewares) 25 if err != nil { 26 return nil, err 27 } 28 29 out := result.(*ListFirewallRulesOutput) 30 out.ResultMetadata = metadata 31 return out, nil 32} 33 34type ListFirewallRulesInput struct { 35 36 // The unique identifier of the firewall rule group that you want to retrieve the 37 // rules for. 38 // 39 // This member is required. 40 FirewallRuleGroupId *string 41 42 // Optional additional filter for the rules to retrieve. The action that DNS 43 // Firewall should take on a DNS query when it matches one of the domains in the 44 // rule's domain list: 45 // 46 // * ALLOW - Permit the request to go through. 47 // 48 // * ALERT - 49 // Permit the request to go through but send an alert to the logs. 50 // 51 // * BLOCK - 52 // Disallow the request. If this is specified, additional handling details are 53 // provided in the rule's BlockResponse setting. 54 Action types.Action 55 56 // The maximum number of objects that you want Resolver to return for this request. 57 // If more objects are available, in the response, Resolver provides a NextToken 58 // value that you can use in a subsequent call to get the next batch of objects. If 59 // you don't specify a value for MaxResults, Resolver returns up to 100 objects. 60 MaxResults *int32 61 62 // For the first call to this list request, omit this value. When you request a 63 // list of objects, Resolver returns at most the number of objects specified in 64 // MaxResults. If more objects are available for retrieval, Resolver returns a 65 // NextToken value in the response. To retrieve the next batch of objects, use the 66 // token that was returned for the prior request in your next request. 67 NextToken *string 68 69 // Optional additional filter for the rules to retrieve. The setting that 70 // determines the processing order of the rules in a rule group. DNS Firewall 71 // processes the rules in a rule group by order of priority, starting from the 72 // lowest setting. 73 Priority *int32 74 75 noSmithyDocumentSerde 76} 77 78type ListFirewallRulesOutput struct { 79 80 // A list of the rules that you have defined. This might be a partial list of the 81 // firewall rules that you've defined. For information, see MaxResults. 82 FirewallRules []types.FirewallRule 83 84 // If objects are still available for retrieval, Resolver returns this token in the 85 // response. To retrieve the next batch of objects, provide this token in your next 86 // request. 87 NextToken *string 88 89 // Metadata pertaining to the operation's result. 90 ResultMetadata middleware.Metadata 91 92 noSmithyDocumentSerde 93} 94 95func (c *Client) addOperationListFirewallRulesMiddlewares(stack *middleware.Stack, options Options) (err error) { 96 err = stack.Serialize.Add(&awsAwsjson11_serializeOpListFirewallRules{}, middleware.After) 97 if err != nil { 98 return err 99 } 100 err = stack.Deserialize.Add(&awsAwsjson11_deserializeOpListFirewallRules{}, middleware.After) 101 if err != nil { 102 return err 103 } 104 if err = addSetLoggerMiddleware(stack, options); err != nil { 105 return err 106 } 107 if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { 108 return err 109 } 110 if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { 111 return err 112 } 113 if err = addResolveEndpointMiddleware(stack, options); err != nil { 114 return err 115 } 116 if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { 117 return err 118 } 119 if err = addRetryMiddlewares(stack, options); err != nil { 120 return err 121 } 122 if err = addHTTPSignerV4Middleware(stack, options); err != nil { 123 return err 124 } 125 if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { 126 return err 127 } 128 if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { 129 return err 130 } 131 if err = addClientUserAgent(stack); err != nil { 132 return err 133 } 134 if err = smithyhttp.AddErrorCloseResponseBodyMiddleware(stack); err != nil { 135 return err 136 } 137 if err = smithyhttp.AddCloseResponseBodyMiddleware(stack); err != nil { 138 return err 139 } 140 if err = addOpListFirewallRulesValidationMiddleware(stack); err != nil { 141 return err 142 } 143 if err = stack.Initialize.Add(newServiceMetadataMiddleware_opListFirewallRules(options.Region), middleware.Before); err != nil { 144 return err 145 } 146 if err = addRequestIDRetrieverMiddleware(stack); err != nil { 147 return err 148 } 149 if err = addResponseErrorMiddleware(stack); err != nil { 150 return err 151 } 152 if err = addRequestResponseLogging(stack, options); err != nil { 153 return err 154 } 155 return nil 156} 157 158// ListFirewallRulesAPIClient is a client that implements the ListFirewallRules 159// operation. 160type ListFirewallRulesAPIClient interface { 161 ListFirewallRules(context.Context, *ListFirewallRulesInput, ...func(*Options)) (*ListFirewallRulesOutput, error) 162} 163 164var _ ListFirewallRulesAPIClient = (*Client)(nil) 165 166// ListFirewallRulesPaginatorOptions is the paginator options for ListFirewallRules 167type ListFirewallRulesPaginatorOptions struct { 168 // The maximum number of objects that you want Resolver to return for this request. 169 // If more objects are available, in the response, Resolver provides a NextToken 170 // value that you can use in a subsequent call to get the next batch of objects. If 171 // you don't specify a value for MaxResults, Resolver returns up to 100 objects. 172 Limit int32 173 174 // Set to true if pagination should stop if the service returns a pagination token 175 // that matches the most recent token provided to the service. 176 StopOnDuplicateToken bool 177} 178 179// ListFirewallRulesPaginator is a paginator for ListFirewallRules 180type ListFirewallRulesPaginator struct { 181 options ListFirewallRulesPaginatorOptions 182 client ListFirewallRulesAPIClient 183 params *ListFirewallRulesInput 184 nextToken *string 185 firstPage bool 186} 187 188// NewListFirewallRulesPaginator returns a new ListFirewallRulesPaginator 189func NewListFirewallRulesPaginator(client ListFirewallRulesAPIClient, params *ListFirewallRulesInput, optFns ...func(*ListFirewallRulesPaginatorOptions)) *ListFirewallRulesPaginator { 190 if params == nil { 191 params = &ListFirewallRulesInput{} 192 } 193 194 options := ListFirewallRulesPaginatorOptions{} 195 if params.MaxResults != nil { 196 options.Limit = *params.MaxResults 197 } 198 199 for _, fn := range optFns { 200 fn(&options) 201 } 202 203 return &ListFirewallRulesPaginator{ 204 options: options, 205 client: client, 206 params: params, 207 firstPage: true, 208 } 209} 210 211// HasMorePages returns a boolean indicating whether more pages are available 212func (p *ListFirewallRulesPaginator) HasMorePages() bool { 213 return p.firstPage || p.nextToken != nil 214} 215 216// NextPage retrieves the next ListFirewallRules page. 217func (p *ListFirewallRulesPaginator) NextPage(ctx context.Context, optFns ...func(*Options)) (*ListFirewallRulesOutput, error) { 218 if !p.HasMorePages() { 219 return nil, fmt.Errorf("no more pages available") 220 } 221 222 params := *p.params 223 params.NextToken = p.nextToken 224 225 var limit *int32 226 if p.options.Limit > 0 { 227 limit = &p.options.Limit 228 } 229 params.MaxResults = limit 230 231 result, err := p.client.ListFirewallRules(ctx, ¶ms, optFns...) 232 if err != nil { 233 return nil, err 234 } 235 p.firstPage = false 236 237 prevToken := p.nextToken 238 p.nextToken = result.NextToken 239 240 if p.options.StopOnDuplicateToken && prevToken != nil && p.nextToken != nil && *prevToken == *p.nextToken { 241 p.nextToken = nil 242 } 243 244 return result, nil 245} 246 247func newServiceMetadataMiddleware_opListFirewallRules(region string) *awsmiddleware.RegisterServiceMetadata { 248 return &awsmiddleware.RegisterServiceMetadata{ 249 Region: region, 250 ServiceID: ServiceID, 251 SigningName: "route53resolver", 252 OperationName: "ListFirewallRules", 253 } 254} 255