1// Code generated by smithy-go-codegen DO NOT EDIT. 2 3package s3 4 5import ( 6 "context" 7 awsmiddleware "github.com/aws/aws-sdk-go-v2/aws/middleware" 8 "github.com/aws/aws-sdk-go-v2/aws/signer/v4" 9 s3cust "github.com/aws/aws-sdk-go-v2/service/s3/internal/customizations" 10 "github.com/aws/aws-sdk-go-v2/service/s3/types" 11 "github.com/aws/smithy-go/middleware" 12 smithyhttp "github.com/aws/smithy-go/transport/http" 13) 14 15// Sets the cors configuration for your bucket. If the configuration exists, Amazon 16// S3 replaces it. To use this operation, you must be allowed to perform the 17// s3:PutBucketCORS action. By default, the bucket owner has this permission and 18// can grant it to others. You set this configuration on a bucket so that the 19// bucket can service cross-origin requests. For example, you might want to enable 20// a request whose origin is http://www.example.com to access your Amazon S3 bucket 21// at my.example.bucket.com by using the browser's XMLHttpRequest capability. To 22// enable cross-origin resource sharing (CORS) on a bucket, you add the cors 23// subresource to the bucket. The cors subresource is an XML document in which you 24// configure rules that identify origins and the HTTP methods that can be executed 25// on your bucket. The document is limited to 64 KB in size. When Amazon S3 26// receives a cross-origin request (or a pre-flight OPTIONS request) against a 27// bucket, it evaluates the cors configuration on the bucket and uses the first 28// CORSRule rule that matches the incoming browser request to enable a cross-origin 29// request. For a rule to match, the following conditions must be met: 30// 31// * The 32// request's Origin header must match AllowedOrigin elements. 33// 34// * The request method 35// (for example, GET, PUT, HEAD, and so on) or the Access-Control-Request-Method 36// header in case of a pre-flight OPTIONS request must be one of the AllowedMethod 37// elements. 38// 39// * Every header specified in the Access-Control-Request-Headers 40// request header of a pre-flight request must match an AllowedHeader element. 41// 42// For 43// more information about CORS, go to Enabling Cross-Origin Resource Sharing 44// (https://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html) in the Amazon Simple 45// Storage Service Developer Guide. Related Resources 46// 47// * GetBucketCors 48// (https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketCors.html) 49// 50// * 51// DeleteBucketCors 52// (https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketCors.html) 53// 54// * 55// RESTOPTIONSobject 56// (https://docs.aws.amazon.com/AmazonS3/latest/API/RESTOPTIONSobject.html) 57func (c *Client) PutBucketCors(ctx context.Context, params *PutBucketCorsInput, optFns ...func(*Options)) (*PutBucketCorsOutput, error) { 58 if params == nil { 59 params = &PutBucketCorsInput{} 60 } 61 62 result, metadata, err := c.invokeOperation(ctx, "PutBucketCors", params, optFns, addOperationPutBucketCorsMiddlewares) 63 if err != nil { 64 return nil, err 65 } 66 67 out := result.(*PutBucketCorsOutput) 68 out.ResultMetadata = metadata 69 return out, nil 70} 71 72type PutBucketCorsInput struct { 73 74 // Specifies the bucket impacted by the corsconfiguration. 75 // 76 // This member is required. 77 Bucket *string 78 79 // Describes the cross-origin access configuration for objects in an Amazon S3 80 // bucket. For more information, see Enabling Cross-Origin Resource Sharing 81 // (https://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html) in the Amazon Simple 82 // Storage Service Developer Guide. 83 // 84 // This member is required. 85 CORSConfiguration *types.CORSConfiguration 86 87 // The base64-encoded 128-bit MD5 digest of the data. This header must be used as a 88 // message integrity check to verify that the request body was not corrupted in 89 // transit. For more information, go to RFC 1864. 90 // (http://www.ietf.org/rfc/rfc1864.txt) For requests made using the AWS Command 91 // Line Interface (CLI) or AWS SDKs, this field is calculated automatically. 92 ContentMD5 *string 93 94 // The account id of the expected bucket owner. If the bucket is owned by a 95 // different account, the request will fail with an HTTP 403 (Access Denied) error. 96 ExpectedBucketOwner *string 97} 98 99type PutBucketCorsOutput struct { 100 // Metadata pertaining to the operation's result. 101 ResultMetadata middleware.Metadata 102} 103 104func addOperationPutBucketCorsMiddlewares(stack *middleware.Stack, options Options) (err error) { 105 err = stack.Serialize.Add(&awsRestxml_serializeOpPutBucketCors{}, middleware.After) 106 if err != nil { 107 return err 108 } 109 err = stack.Deserialize.Add(&awsRestxml_deserializeOpPutBucketCors{}, middleware.After) 110 if err != nil { 111 return err 112 } 113 if err = addSetLoggerMiddleware(stack, options); err != nil { 114 return err 115 } 116 if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil { 117 return err 118 } 119 if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil { 120 return err 121 } 122 if err = addResolveEndpointMiddleware(stack, options); err != nil { 123 return err 124 } 125 if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil { 126 return err 127 } 128 if err = addRetryMiddlewares(stack, options); err != nil { 129 return err 130 } 131 if err = addHTTPSignerV4Middleware(stack, options); err != nil { 132 return err 133 } 134 if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil { 135 return err 136 } 137 if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil { 138 return err 139 } 140 if err = addClientUserAgent(stack); err != nil { 141 return err 142 } 143 if err = smithyhttp.AddErrorCloseResponseBodyMiddleware(stack); err != nil { 144 return err 145 } 146 if err = smithyhttp.AddCloseResponseBodyMiddleware(stack); err != nil { 147 return err 148 } 149 if err = addOpPutBucketCorsValidationMiddleware(stack); err != nil { 150 return err 151 } 152 if err = stack.Initialize.Add(newServiceMetadataMiddleware_opPutBucketCors(options.Region), middleware.Before); err != nil { 153 return err 154 } 155 if err = addMetadataRetrieverMiddleware(stack); err != nil { 156 return err 157 } 158 if err = addPutBucketCorsUpdateEndpoint(stack, options); err != nil { 159 return err 160 } 161 if err = addResponseErrorMiddleware(stack); err != nil { 162 return err 163 } 164 if err = v4.AddContentSHA256HeaderMiddleware(stack); err != nil { 165 return err 166 } 167 if err = disableAcceptEncodingGzip(stack); err != nil { 168 return err 169 } 170 if err = addRequestResponseLogging(stack, options); err != nil { 171 return err 172 } 173 if err = smithyhttp.AddContentChecksumMiddleware(stack); err != nil { 174 return err 175 } 176 return nil 177} 178 179func newServiceMetadataMiddleware_opPutBucketCors(region string) *awsmiddleware.RegisterServiceMetadata { 180 return &awsmiddleware.RegisterServiceMetadata{ 181 Region: region, 182 ServiceID: ServiceID, 183 SigningName: "s3", 184 OperationName: "PutBucketCors", 185 } 186} 187 188// getPutBucketCorsBucketMember returns a pointer to string denoting a provided 189// bucket member valueand a boolean indicating if the input has a modeled bucket 190// name, 191func getPutBucketCorsBucketMember(input interface{}) (*string, bool) { 192 in := input.(*PutBucketCorsInput) 193 if in.Bucket == nil { 194 return nil, false 195 } 196 return in.Bucket, true 197} 198func addPutBucketCorsUpdateEndpoint(stack *middleware.Stack, options Options) error { 199 return s3cust.UpdateEndpoint(stack, s3cust.UpdateEndpointOptions{ 200 Accessor: s3cust.UpdateEndpointParameterAccessor{ 201 GetBucketFromInput: getPutBucketCorsBucketMember, 202 }, 203 UsePathStyle: options.UsePathStyle, 204 UseAccelerate: options.UseAccelerate, 205 SupportsAccelerate: true, 206 EndpointResolver: options.EndpointResolver, 207 EndpointResolverOptions: options.EndpointOptions, 208 UseDualstack: options.UseDualstack, 209 UseARNRegion: options.UseARNRegion, 210 }) 211} 212