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 "github.com/aws/aws-sdk-go-v2/service/ecr/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
21
22
23 func (c *Client) StartImageScan(ctx context.Context, params *StartImageScanInput, optFns ...func(*Options)) (*StartImageScanOutput, error) {
24 if params == nil {
25 params = &StartImageScanInput{}
26 }
27
28 result, metadata, err := c.invokeOperation(ctx, "StartImageScan", params, optFns, c.addOperationStartImageScanMiddlewares)
29 if err != nil {
30 return nil, err
31 }
32
33 out := result.(*StartImageScanOutput)
34 out.ResultMetadata = metadata
35 return out, nil
36 }
37
38 type StartImageScanInput struct {
39
40
41
42
43 ImageId *types.ImageIdentifier
44
45
46
47
48 RepositoryName *string
49
50
51
52
53 RegistryId *string
54
55 noSmithyDocumentSerde
56 }
57
58 type StartImageScanOutput struct {
59
60
61 ImageId *types.ImageIdentifier
62
63
64 ImageScanStatus *types.ImageScanStatus
65
66
67 RegistryId *string
68
69
70 RepositoryName *string
71
72
73 ResultMetadata middleware.Metadata
74
75 noSmithyDocumentSerde
76 }
77
78 func (c *Client) addOperationStartImageScanMiddlewares(stack *middleware.Stack, options Options) (err error) {
79 err = stack.Serialize.Add(&awsAwsjson11_serializeOpStartImageScan{}, middleware.After)
80 if err != nil {
81 return err
82 }
83 err = stack.Deserialize.Add(&awsAwsjson11_deserializeOpStartImageScan{}, 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 = addStartImageScanResolveEndpointMiddleware(stack, options); err != nil {
127 return err
128 }
129 if err = addOpStartImageScanValidationMiddleware(stack); err != nil {
130 return err
131 }
132 if err = stack.Initialize.Add(newServiceMetadataMiddleware_opStartImageScan(options.Region), middleware.Before); err != nil {
133 return err
134 }
135 if err = awsmiddleware.AddRecursionDetection(stack); err != nil {
136 return err
137 }
138 if err = addRequestIDRetrieverMiddleware(stack); err != nil {
139 return err
140 }
141 if err = addResponseErrorMiddleware(stack); err != nil {
142 return err
143 }
144 if err = addRequestResponseLogging(stack, options); err != nil {
145 return err
146 }
147 if err = addendpointDisableHTTPSMiddleware(stack, options); err != nil {
148 return err
149 }
150 return nil
151 }
152
153 func newServiceMetadataMiddleware_opStartImageScan(region string) *awsmiddleware.RegisterServiceMetadata {
154 return &awsmiddleware.RegisterServiceMetadata{
155 Region: region,
156 ServiceID: ServiceID,
157 SigningName: "ecr",
158 OperationName: "StartImageScan",
159 }
160 }
161
162 type opStartImageScanResolveEndpointMiddleware struct {
163 EndpointResolver EndpointResolverV2
164 BuiltInResolver builtInParameterResolver
165 }
166
167 func (*opStartImageScanResolveEndpointMiddleware) ID() string {
168 return "ResolveEndpointV2"
169 }
170
171 func (m *opStartImageScanResolveEndpointMiddleware) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) (
172 out middleware.SerializeOutput, metadata middleware.Metadata, err error,
173 ) {
174 if awsmiddleware.GetRequiresLegacyEndpoints(ctx) {
175 return next.HandleSerialize(ctx, in)
176 }
177
178 req, ok := in.Request.(*smithyhttp.Request)
179 if !ok {
180 return out, metadata, fmt.Errorf("unknown transport type %T", in.Request)
181 }
182
183 if m.EndpointResolver == nil {
184 return out, metadata, fmt.Errorf("expected endpoint resolver to not be nil")
185 }
186
187 params := EndpointParameters{}
188
189 m.BuiltInResolver.ResolveBuiltIns(¶ms)
190
191 var resolvedEndpoint smithyendpoints.Endpoint
192 resolvedEndpoint, err = m.EndpointResolver.ResolveEndpoint(ctx, params)
193 if err != nil {
194 return out, metadata, fmt.Errorf("failed to resolve service endpoint, %w", err)
195 }
196
197 req.URL = &resolvedEndpoint.URI
198
199 for k := range resolvedEndpoint.Headers {
200 req.Header.Set(
201 k,
202 resolvedEndpoint.Headers.Get(k),
203 )
204 }
205
206 authSchemes, err := internalauth.GetAuthenticationSchemes(&resolvedEndpoint.Properties)
207 if err != nil {
208 var nfe *internalauth.NoAuthenticationSchemesFoundError
209 if errors.As(err, &nfe) {
210
211 signingName := "ecr"
212 signingRegion := m.BuiltInResolver.(*builtInResolver).Region
213 ctx = awsmiddleware.SetSigningName(ctx, signingName)
214 ctx = awsmiddleware.SetSigningRegion(ctx, signingRegion)
215
216 }
217 var ue *internalauth.UnSupportedAuthenticationSchemeSpecifiedError
218 if errors.As(err, &ue) {
219 return out, metadata, fmt.Errorf(
220 "This operation requests signer version(s) %v but the client only supports %v",
221 ue.UnsupportedSchemes,
222 internalauth.SupportedSchemes,
223 )
224 }
225 }
226
227 for _, authScheme := range authSchemes {
228 switch authScheme.(type) {
229 case *internalauth.AuthenticationSchemeV4:
230 v4Scheme, _ := authScheme.(*internalauth.AuthenticationSchemeV4)
231 var signingName, signingRegion string
232 if v4Scheme.SigningName == nil {
233 signingName = "ecr"
234 } else {
235 signingName = *v4Scheme.SigningName
236 }
237 if v4Scheme.SigningRegion == nil {
238 signingRegion = m.BuiltInResolver.(*builtInResolver).Region
239 } else {
240 signingRegion = *v4Scheme.SigningRegion
241 }
242 if v4Scheme.DisableDoubleEncoding != nil {
243
244
245
246 ctx = internalauth.SetDisableDoubleEncoding(ctx, *v4Scheme.DisableDoubleEncoding)
247 }
248 ctx = awsmiddleware.SetSigningName(ctx, signingName)
249 ctx = awsmiddleware.SetSigningRegion(ctx, signingRegion)
250 break
251 case *internalauth.AuthenticationSchemeV4A:
252 v4aScheme, _ := authScheme.(*internalauth.AuthenticationSchemeV4A)
253 if v4aScheme.SigningName == nil {
254 v4aScheme.SigningName = aws.String("ecr")
255 }
256 if v4aScheme.DisableDoubleEncoding != nil {
257
258
259
260 ctx = internalauth.SetDisableDoubleEncoding(ctx, *v4aScheme.DisableDoubleEncoding)
261 }
262 ctx = awsmiddleware.SetSigningName(ctx, *v4aScheme.SigningName)
263 ctx = awsmiddleware.SetSigningRegion(ctx, v4aScheme.SigningRegionSet[0])
264 break
265 case *internalauth.AuthenticationSchemeNone:
266 break
267 }
268 }
269
270 return next.HandleSerialize(ctx, in)
271 }
272
273 func addStartImageScanResolveEndpointMiddleware(stack *middleware.Stack, options Options) error {
274 return stack.Serialize.Insert(&opStartImageScanResolveEndpointMiddleware{
275 EndpointResolver: options.EndpointResolverV2,
276 BuiltInResolver: &builtInResolver{
277 Region: options.Region,
278 UseDualStack: options.EndpointOptions.UseDualStackEndpoint,
279 UseFIPS: options.EndpointOptions.UseFIPSEndpoint,
280 Endpoint: options.BaseEndpoint,
281 },
282 }, "ResolveEndpoint", middleware.After)
283 }
284
View as plain text