1
2
3 package ecr
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 smithyendpoints "github.com/aws/smithy-go/endpoints"
14 "github.com/aws/smithy-go/middleware"
15 smithyhttp "github.com/aws/smithy-go/transport/http"
16 )
17
18
19
20
21
22
23 func (c *Client) PutRegistryPolicy(ctx context.Context, params *PutRegistryPolicyInput, optFns ...func(*Options)) (*PutRegistryPolicyOutput, error) {
24 if params == nil {
25 params = &PutRegistryPolicyInput{}
26 }
27
28 result, metadata, err := c.invokeOperation(ctx, "PutRegistryPolicy", params, optFns, c.addOperationPutRegistryPolicyMiddlewares)
29 if err != nil {
30 return nil, err
31 }
32
33 out := result.(*PutRegistryPolicyOutput)
34 out.ResultMetadata = metadata
35 return out, nil
36 }
37
38 type PutRegistryPolicyInput struct {
39
40
41
42
43
44
45 PolicyText *string
46
47 noSmithyDocumentSerde
48 }
49
50 type PutRegistryPolicyOutput struct {
51
52
53 PolicyText *string
54
55
56 RegistryId *string
57
58
59 ResultMetadata middleware.Metadata
60
61 noSmithyDocumentSerde
62 }
63
64 func (c *Client) addOperationPutRegistryPolicyMiddlewares(stack *middleware.Stack, options Options) (err error) {
65 err = stack.Serialize.Add(&awsAwsjson11_serializeOpPutRegistryPolicy{}, middleware.After)
66 if err != nil {
67 return err
68 }
69 err = stack.Deserialize.Add(&awsAwsjson11_deserializeOpPutRegistryPolicy{}, middleware.After)
70 if err != nil {
71 return err
72 }
73 if err = addlegacyEndpointContextSetter(stack, options); err != nil {
74 return err
75 }
76 if err = addSetLoggerMiddleware(stack, options); err != nil {
77 return err
78 }
79 if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil {
80 return err
81 }
82 if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil {
83 return err
84 }
85 if err = addResolveEndpointMiddleware(stack, options); err != nil {
86 return err
87 }
88 if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil {
89 return err
90 }
91 if err = addRetryMiddlewares(stack, options); err != nil {
92 return err
93 }
94 if err = addHTTPSignerV4Middleware(stack, options); err != nil {
95 return err
96 }
97 if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil {
98 return err
99 }
100 if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil {
101 return err
102 }
103 if err = addClientUserAgent(stack, options); err != nil {
104 return err
105 }
106 if err = smithyhttp.AddErrorCloseResponseBodyMiddleware(stack); err != nil {
107 return err
108 }
109 if err = smithyhttp.AddCloseResponseBodyMiddleware(stack); err != nil {
110 return err
111 }
112 if err = addPutRegistryPolicyResolveEndpointMiddleware(stack, options); err != nil {
113 return err
114 }
115 if err = addOpPutRegistryPolicyValidationMiddleware(stack); err != nil {
116 return err
117 }
118 if err = stack.Initialize.Add(newServiceMetadataMiddleware_opPutRegistryPolicy(options.Region), middleware.Before); err != nil {
119 return err
120 }
121 if err = awsmiddleware.AddRecursionDetection(stack); err != nil {
122 return err
123 }
124 if err = addRequestIDRetrieverMiddleware(stack); err != nil {
125 return err
126 }
127 if err = addResponseErrorMiddleware(stack); err != nil {
128 return err
129 }
130 if err = addRequestResponseLogging(stack, options); err != nil {
131 return err
132 }
133 if err = addendpointDisableHTTPSMiddleware(stack, options); err != nil {
134 return err
135 }
136 return nil
137 }
138
139 func newServiceMetadataMiddleware_opPutRegistryPolicy(region string) *awsmiddleware.RegisterServiceMetadata {
140 return &awsmiddleware.RegisterServiceMetadata{
141 Region: region,
142 ServiceID: ServiceID,
143 SigningName: "ecr",
144 OperationName: "PutRegistryPolicy",
145 }
146 }
147
148 type opPutRegistryPolicyResolveEndpointMiddleware struct {
149 EndpointResolver EndpointResolverV2
150 BuiltInResolver builtInParameterResolver
151 }
152
153 func (*opPutRegistryPolicyResolveEndpointMiddleware) ID() string {
154 return "ResolveEndpointV2"
155 }
156
157 func (m *opPutRegistryPolicyResolveEndpointMiddleware) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) (
158 out middleware.SerializeOutput, metadata middleware.Metadata, err error,
159 ) {
160 if awsmiddleware.GetRequiresLegacyEndpoints(ctx) {
161 return next.HandleSerialize(ctx, in)
162 }
163
164 req, ok := in.Request.(*smithyhttp.Request)
165 if !ok {
166 return out, metadata, fmt.Errorf("unknown transport type %T", in.Request)
167 }
168
169 if m.EndpointResolver == nil {
170 return out, metadata, fmt.Errorf("expected endpoint resolver to not be nil")
171 }
172
173 params := EndpointParameters{}
174
175 m.BuiltInResolver.ResolveBuiltIns(¶ms)
176
177 var resolvedEndpoint smithyendpoints.Endpoint
178 resolvedEndpoint, err = m.EndpointResolver.ResolveEndpoint(ctx, params)
179 if err != nil {
180 return out, metadata, fmt.Errorf("failed to resolve service endpoint, %w", err)
181 }
182
183 req.URL = &resolvedEndpoint.URI
184
185 for k := range resolvedEndpoint.Headers {
186 req.Header.Set(
187 k,
188 resolvedEndpoint.Headers.Get(k),
189 )
190 }
191
192 authSchemes, err := internalauth.GetAuthenticationSchemes(&resolvedEndpoint.Properties)
193 if err != nil {
194 var nfe *internalauth.NoAuthenticationSchemesFoundError
195 if errors.As(err, &nfe) {
196
197 signingName := "ecr"
198 signingRegion := m.BuiltInResolver.(*builtInResolver).Region
199 ctx = awsmiddleware.SetSigningName(ctx, signingName)
200 ctx = awsmiddleware.SetSigningRegion(ctx, signingRegion)
201
202 }
203 var ue *internalauth.UnSupportedAuthenticationSchemeSpecifiedError
204 if errors.As(err, &ue) {
205 return out, metadata, fmt.Errorf(
206 "This operation requests signer version(s) %v but the client only supports %v",
207 ue.UnsupportedSchemes,
208 internalauth.SupportedSchemes,
209 )
210 }
211 }
212
213 for _, authScheme := range authSchemes {
214 switch authScheme.(type) {
215 case *internalauth.AuthenticationSchemeV4:
216 v4Scheme, _ := authScheme.(*internalauth.AuthenticationSchemeV4)
217 var signingName, signingRegion string
218 if v4Scheme.SigningName == nil {
219 signingName = "ecr"
220 } else {
221 signingName = *v4Scheme.SigningName
222 }
223 if v4Scheme.SigningRegion == nil {
224 signingRegion = m.BuiltInResolver.(*builtInResolver).Region
225 } else {
226 signingRegion = *v4Scheme.SigningRegion
227 }
228 if v4Scheme.DisableDoubleEncoding != nil {
229
230
231
232 ctx = internalauth.SetDisableDoubleEncoding(ctx, *v4Scheme.DisableDoubleEncoding)
233 }
234 ctx = awsmiddleware.SetSigningName(ctx, signingName)
235 ctx = awsmiddleware.SetSigningRegion(ctx, signingRegion)
236 break
237 case *internalauth.AuthenticationSchemeV4A:
238 v4aScheme, _ := authScheme.(*internalauth.AuthenticationSchemeV4A)
239 if v4aScheme.SigningName == nil {
240 v4aScheme.SigningName = aws.String("ecr")
241 }
242 if v4aScheme.DisableDoubleEncoding != nil {
243
244
245
246 ctx = internalauth.SetDisableDoubleEncoding(ctx, *v4aScheme.DisableDoubleEncoding)
247 }
248 ctx = awsmiddleware.SetSigningName(ctx, *v4aScheme.SigningName)
249 ctx = awsmiddleware.SetSigningRegion(ctx, v4aScheme.SigningRegionSet[0])
250 break
251 case *internalauth.AuthenticationSchemeNone:
252 break
253 }
254 }
255
256 return next.HandleSerialize(ctx, in)
257 }
258
259 func addPutRegistryPolicyResolveEndpointMiddleware(stack *middleware.Stack, options Options) error {
260 return stack.Serialize.Insert(&opPutRegistryPolicyResolveEndpointMiddleware{
261 EndpointResolver: options.EndpointResolverV2,
262 BuiltInResolver: &builtInResolver{
263 Region: options.Region,
264 UseDualStack: options.EndpointOptions.UseDualStackEndpoint,
265 UseFIPS: options.EndpointOptions.UseFIPSEndpoint,
266 Endpoint: options.BaseEndpoint,
267 },
268 }, "ResolveEndpoint", middleware.After)
269 }
270
View as plain text