1
2
3 package ecrpublic
4
5 import (
6 "context"
7 "errors"
8 "fmt"
9 "github.com/aws/aws-sdk-go-v2/aws"
10 awsmiddleware "github.com/aws/aws-sdk-go-v2/aws/middleware"
11 "github.com/aws/aws-sdk-go-v2/aws/signer/v4"
12 internalauth "github.com/aws/aws-sdk-go-v2/internal/auth"
13 "github.com/aws/aws-sdk-go-v2/service/ecrpublic/types"
14 smithyendpoints "github.com/aws/smithy-go/endpoints"
15 "github.com/aws/smithy-go/middleware"
16 smithyhttp "github.com/aws/smithy-go/transport/http"
17 )
18
19
20 func (c *Client) DescribeRegistries(ctx context.Context, params *DescribeRegistriesInput, optFns ...func(*Options)) (*DescribeRegistriesOutput, error) {
21 if params == nil {
22 params = &DescribeRegistriesInput{}
23 }
24
25 result, metadata, err := c.invokeOperation(ctx, "DescribeRegistries", params, optFns, c.addOperationDescribeRegistriesMiddlewares)
26 if err != nil {
27 return nil, err
28 }
29
30 out := result.(*DescribeRegistriesOutput)
31 out.ResultMetadata = metadata
32 return out, nil
33 }
34
35 type DescribeRegistriesInput struct {
36
37
38
39
40
41
42
43
44
45 MaxResults *int32
46
47
48
49
50
51
52
53
54 NextToken *string
55
56 noSmithyDocumentSerde
57 }
58
59 type DescribeRegistriesOutput struct {
60
61
62
63
64 Registries []types.Registry
65
66
67
68
69
70 NextToken *string
71
72
73 ResultMetadata middleware.Metadata
74
75 noSmithyDocumentSerde
76 }
77
78 func (c *Client) addOperationDescribeRegistriesMiddlewares(stack *middleware.Stack, options Options) (err error) {
79 err = stack.Serialize.Add(&awsAwsjson11_serializeOpDescribeRegistries{}, middleware.After)
80 if err != nil {
81 return err
82 }
83 err = stack.Deserialize.Add(&awsAwsjson11_deserializeOpDescribeRegistries{}, middleware.After)
84 if err != nil {
85 return err
86 }
87 if err = addlegacyEndpointContextSetter(stack, options); err != nil {
88 return err
89 }
90 if err = addSetLoggerMiddleware(stack, options); err != nil {
91 return err
92 }
93 if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil {
94 return err
95 }
96 if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil {
97 return err
98 }
99 if err = addResolveEndpointMiddleware(stack, options); err != nil {
100 return err
101 }
102 if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil {
103 return err
104 }
105 if err = addRetryMiddlewares(stack, options); err != nil {
106 return err
107 }
108 if err = addHTTPSignerV4Middleware(stack, options); err != nil {
109 return err
110 }
111 if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil {
112 return err
113 }
114 if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil {
115 return err
116 }
117 if err = addClientUserAgent(stack, options); err != nil {
118 return err
119 }
120 if err = smithyhttp.AddErrorCloseResponseBodyMiddleware(stack); err != nil {
121 return err
122 }
123 if err = smithyhttp.AddCloseResponseBodyMiddleware(stack); err != nil {
124 return err
125 }
126 if err = addDescribeRegistriesResolveEndpointMiddleware(stack, options); err != nil {
127 return err
128 }
129 if err = stack.Initialize.Add(newServiceMetadataMiddleware_opDescribeRegistries(options.Region), middleware.Before); err != nil {
130 return err
131 }
132 if err = awsmiddleware.AddRecursionDetection(stack); err != nil {
133 return err
134 }
135 if err = addRequestIDRetrieverMiddleware(stack); err != nil {
136 return err
137 }
138 if err = addResponseErrorMiddleware(stack); err != nil {
139 return err
140 }
141 if err = addRequestResponseLogging(stack, options); err != nil {
142 return err
143 }
144 if err = addendpointDisableHTTPSMiddleware(stack, options); err != nil {
145 return err
146 }
147 return nil
148 }
149
150
151
152 type DescribeRegistriesAPIClient interface {
153 DescribeRegistries(context.Context, *DescribeRegistriesInput, ...func(*Options)) (*DescribeRegistriesOutput, error)
154 }
155
156 var _ DescribeRegistriesAPIClient = (*Client)(nil)
157
158
159
160 type DescribeRegistriesPaginatorOptions struct {
161
162
163
164
165
166
167
168
169 Limit int32
170
171
172
173 StopOnDuplicateToken bool
174 }
175
176
177 type DescribeRegistriesPaginator struct {
178 options DescribeRegistriesPaginatorOptions
179 client DescribeRegistriesAPIClient
180 params *DescribeRegistriesInput
181 nextToken *string
182 firstPage bool
183 }
184
185
186 func NewDescribeRegistriesPaginator(client DescribeRegistriesAPIClient, params *DescribeRegistriesInput, optFns ...func(*DescribeRegistriesPaginatorOptions)) *DescribeRegistriesPaginator {
187 if params == nil {
188 params = &DescribeRegistriesInput{}
189 }
190
191 options := DescribeRegistriesPaginatorOptions{}
192 if params.MaxResults != nil {
193 options.Limit = *params.MaxResults
194 }
195
196 for _, fn := range optFns {
197 fn(&options)
198 }
199
200 return &DescribeRegistriesPaginator{
201 options: options,
202 client: client,
203 params: params,
204 firstPage: true,
205 nextToken: params.NextToken,
206 }
207 }
208
209
210 func (p *DescribeRegistriesPaginator) HasMorePages() bool {
211 return p.firstPage || (p.nextToken != nil && len(*p.nextToken) != 0)
212 }
213
214
215 func (p *DescribeRegistriesPaginator) NextPage(ctx context.Context, optFns ...func(*Options)) (*DescribeRegistriesOutput, error) {
216 if !p.HasMorePages() {
217 return nil, fmt.Errorf("no more pages available")
218 }
219
220 params := *p.params
221 params.NextToken = p.nextToken
222
223 var limit *int32
224 if p.options.Limit > 0 {
225 limit = &p.options.Limit
226 }
227 params.MaxResults = limit
228
229 result, err := p.client.DescribeRegistries(ctx, ¶ms, optFns...)
230 if err != nil {
231 return nil, err
232 }
233 p.firstPage = false
234
235 prevToken := p.nextToken
236 p.nextToken = result.NextToken
237
238 if p.options.StopOnDuplicateToken &&
239 prevToken != nil &&
240 p.nextToken != nil &&
241 *prevToken == *p.nextToken {
242 p.nextToken = nil
243 }
244
245 return result, nil
246 }
247
248 func newServiceMetadataMiddleware_opDescribeRegistries(region string) *awsmiddleware.RegisterServiceMetadata {
249 return &awsmiddleware.RegisterServiceMetadata{
250 Region: region,
251 ServiceID: ServiceID,
252 SigningName: "ecr-public",
253 OperationName: "DescribeRegistries",
254 }
255 }
256
257 type opDescribeRegistriesResolveEndpointMiddleware struct {
258 EndpointResolver EndpointResolverV2
259 BuiltInResolver builtInParameterResolver
260 }
261
262 func (*opDescribeRegistriesResolveEndpointMiddleware) ID() string {
263 return "ResolveEndpointV2"
264 }
265
266 func (m *opDescribeRegistriesResolveEndpointMiddleware) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) (
267 out middleware.SerializeOutput, metadata middleware.Metadata, err error,
268 ) {
269 if awsmiddleware.GetRequiresLegacyEndpoints(ctx) {
270 return next.HandleSerialize(ctx, in)
271 }
272
273 req, ok := in.Request.(*smithyhttp.Request)
274 if !ok {
275 return out, metadata, fmt.Errorf("unknown transport type %T", in.Request)
276 }
277
278 if m.EndpointResolver == nil {
279 return out, metadata, fmt.Errorf("expected endpoint resolver to not be nil")
280 }
281
282 params := EndpointParameters{}
283
284 m.BuiltInResolver.ResolveBuiltIns(¶ms)
285
286 var resolvedEndpoint smithyendpoints.Endpoint
287 resolvedEndpoint, err = m.EndpointResolver.ResolveEndpoint(ctx, params)
288 if err != nil {
289 return out, metadata, fmt.Errorf("failed to resolve service endpoint, %w", err)
290 }
291
292 req.URL = &resolvedEndpoint.URI
293
294 for k := range resolvedEndpoint.Headers {
295 req.Header.Set(
296 k,
297 resolvedEndpoint.Headers.Get(k),
298 )
299 }
300
301 authSchemes, err := internalauth.GetAuthenticationSchemes(&resolvedEndpoint.Properties)
302 if err != nil {
303 var nfe *internalauth.NoAuthenticationSchemesFoundError
304 if errors.As(err, &nfe) {
305
306 signingName := "ecr-public"
307 signingRegion := m.BuiltInResolver.(*builtInResolver).Region
308 ctx = awsmiddleware.SetSigningName(ctx, signingName)
309 ctx = awsmiddleware.SetSigningRegion(ctx, signingRegion)
310
311 }
312 var ue *internalauth.UnSupportedAuthenticationSchemeSpecifiedError
313 if errors.As(err, &ue) {
314 return out, metadata, fmt.Errorf(
315 "This operation requests signer version(s) %v but the client only supports %v",
316 ue.UnsupportedSchemes,
317 internalauth.SupportedSchemes,
318 )
319 }
320 }
321
322 for _, authScheme := range authSchemes {
323 switch authScheme.(type) {
324 case *internalauth.AuthenticationSchemeV4:
325 v4Scheme, _ := authScheme.(*internalauth.AuthenticationSchemeV4)
326 var signingName, signingRegion string
327 if v4Scheme.SigningName == nil {
328 signingName = "ecr-public"
329 } else {
330 signingName = *v4Scheme.SigningName
331 }
332 if v4Scheme.SigningRegion == nil {
333 signingRegion = m.BuiltInResolver.(*builtInResolver).Region
334 } else {
335 signingRegion = *v4Scheme.SigningRegion
336 }
337 if v4Scheme.DisableDoubleEncoding != nil {
338
339
340
341 ctx = internalauth.SetDisableDoubleEncoding(ctx, *v4Scheme.DisableDoubleEncoding)
342 }
343 ctx = awsmiddleware.SetSigningName(ctx, signingName)
344 ctx = awsmiddleware.SetSigningRegion(ctx, signingRegion)
345 break
346 case *internalauth.AuthenticationSchemeV4A:
347 v4aScheme, _ := authScheme.(*internalauth.AuthenticationSchemeV4A)
348 if v4aScheme.SigningName == nil {
349 v4aScheme.SigningName = aws.String("ecr-public")
350 }
351 if v4aScheme.DisableDoubleEncoding != nil {
352
353
354
355 ctx = internalauth.SetDisableDoubleEncoding(ctx, *v4aScheme.DisableDoubleEncoding)
356 }
357 ctx = awsmiddleware.SetSigningName(ctx, *v4aScheme.SigningName)
358 ctx = awsmiddleware.SetSigningRegion(ctx, v4aScheme.SigningRegionSet[0])
359 break
360 case *internalauth.AuthenticationSchemeNone:
361 break
362 }
363 }
364
365 return next.HandleSerialize(ctx, in)
366 }
367
368 func addDescribeRegistriesResolveEndpointMiddleware(stack *middleware.Stack, options Options) error {
369 return stack.Serialize.Insert(&opDescribeRegistriesResolveEndpointMiddleware{
370 EndpointResolver: options.EndpointResolverV2,
371 BuiltInResolver: &builtInResolver{
372 Region: options.Region,
373 UseDualStack: options.EndpointOptions.UseDualStackEndpoint,
374 UseFIPS: options.EndpointOptions.UseFIPSEndpoint,
375 Endpoint: options.BaseEndpoint,
376 },
377 }, "ResolveEndpoint", middleware.After)
378 }
379
View as plain text