oss/api_op_bucket_cors.go (172 lines of code) (raw):

package oss import ( "context" "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/signer" ) type CORSConfiguration struct { // The container that stores CORS rules. Up to 10 rules can be configured for a bucket. CORSRules []CORSRule `xml:"CORSRule"` // Indicates whether the Vary: Origin header was returned. Default value: false.- true: The Vary: Origin header is returned regardless whether the request is a cross-origin request or whether the cross-origin request succeeds.- false: The Vary: Origin header is not returned. ResponseVary *bool `xml:"ResponseVary"` } type CORSRule struct { // The origins from which cross-origin requests are allowed. AllowedOrigins []string `xml:"AllowedOrigin"` // The methods that you can use in cross-origin requests. AllowedMethods []string `xml:"AllowedMethod"` // Specifies whether the headers specified by Access-Control-Request-Headers in the OPTIONS preflight request are allowed. Each header specified by Access-Control-Request-Headers must match the value of an AllowedHeader element. You can use only one asterisk (\*) as the wildcard character. AllowedHeaders []string `xml:"AllowedHeader"` // The response headers for allowed access requests from applications, such as an XMLHttpRequest object in JavaScript. The asterisk (\*) wildcard character is not supported. ExposeHeaders []string `xml:"ExposeHeader"` // The period of time within which the browser can cache the response to an OPTIONS preflight request for the specified resource. Unit: seconds.You can specify only one MaxAgeSeconds element in a CORS rule. MaxAgeSeconds *int64 `xml:"MaxAgeSeconds"` } type PutBucketCorsRequest struct { // The name of the bucket. Bucket *string `input:"host,bucket,required"` // The request body schema. CORSConfiguration *CORSConfiguration `input:"body,CORSConfiguration,xml,required"` RequestCommon } type PutBucketCorsResult struct { ResultCommon } // PutBucketCors Configures cross-origin resource sharing (CORS) rules for a bucket. func (c *Client) PutBucketCors(ctx context.Context, request *PutBucketCorsRequest, optFns ...func(*Options)) (*PutBucketCorsResult, error) { var err error if request == nil { request = &PutBucketCorsRequest{} } input := &OperationInput{ OpName: "PutBucketCors", Method: "PUT", Headers: map[string]string{ HTTPHeaderContentType: contentTypeXML, }, Parameters: map[string]string{ "cors": "", }, Bucket: request.Bucket, } input.OpMetadata.Set(signer.SubResource, []string{"cors"}) if err = c.marshalInput(request, input, updateContentMd5); err != nil { return nil, err } output, err := c.invokeOperation(ctx, input, optFns) if err != nil { return nil, err } result := &PutBucketCorsResult{} if err = c.unmarshalOutput(result, output, unmarshalBodyXmlMix); err != nil { return nil, c.toClientError(err, "UnmarshalOutputFail", output) } return result, err } type GetBucketCorsRequest struct { // The name of the bucket. Bucket *string `input:"host,bucket,required"` RequestCommon } type GetBucketCorsResult struct { // The container that stores CORS configuration. CORSConfiguration *CORSConfiguration `output:"body,CORSConfiguration,xml"` ResultCommon } // GetBucketCors Queries the cross-origin resource sharing (CORS) rules that are configured for a bucket. func (c *Client) GetBucketCors(ctx context.Context, request *GetBucketCorsRequest, optFns ...func(*Options)) (*GetBucketCorsResult, error) { var err error if request == nil { request = &GetBucketCorsRequest{} } input := &OperationInput{ OpName: "GetBucketCors", Method: "GET", Headers: map[string]string{ HTTPHeaderContentType: contentTypeXML, }, Parameters: map[string]string{ "cors": "", }, Bucket: request.Bucket, } input.OpMetadata.Set(signer.SubResource, []string{"cors"}) if err = c.marshalInput(request, input, updateContentMd5); err != nil { return nil, err } output, err := c.invokeOperation(ctx, input, optFns) if err != nil { return nil, err } result := &GetBucketCorsResult{} if err = c.unmarshalOutput(result, output, unmarshalBodyXmlMix); err != nil { return nil, c.toClientError(err, "UnmarshalOutputFail", output) } return result, err } type DeleteBucketCorsRequest struct { // The name of the bucket. Bucket *string `input:"host,bucket,required"` RequestCommon } type DeleteBucketCorsResult struct { ResultCommon } // DeleteBucketCors Disables the cross-origin resource sharing (CORS) feature and deletes all CORS rules for a bucket. func (c *Client) DeleteBucketCors(ctx context.Context, request *DeleteBucketCorsRequest, optFns ...func(*Options)) (*DeleteBucketCorsResult, error) { var err error if request == nil { request = &DeleteBucketCorsRequest{} } input := &OperationInput{ OpName: "DeleteBucketCors", Method: "DELETE", Headers: map[string]string{ HTTPHeaderContentType: contentTypeXML, }, Parameters: map[string]string{ "cors": "", }, Bucket: request.Bucket, } input.OpMetadata.Set(signer.SubResource, []string{"cors"}) if err = c.marshalInput(request, input, updateContentMd5); err != nil { return nil, err } output, err := c.invokeOperation(ctx, input, optFns) if err != nil { return nil, err } result := &DeleteBucketCorsResult{} if err = c.unmarshalOutput(result, output, unmarshalBodyXmlMix); err != nil { return nil, c.toClientError(err, "UnmarshalOutputFail", output) } return result, err } type OptionObjectRequest struct { // The name of the bucket. Bucket *string `input:"host,bucket,required"` // The full path of the object. Key *string `input:"path,key,required"` // The origin of the request. It is used to identify a cross-origin request. You can specify only one Origin header in a cross-origin request. By default, this header is left empty. Origin *string `input:"header,Origin,required"` // The method to be used in the actual cross-origin request. You can specify only one Access-Control-Request-Method header in a cross-origin request. By default, this header is left empty. AccessControlRequestMethod *string `input:"header,Access-Control-Request-Method,required"` // The custom headers to be sent in the actual cross-origin request. You can configure multiple custom headers in a cross-origin request. Custom headers are separated by commas (,). By default, this header is left empty. AccessControlRequestHeaders *string `input:"header,Access-Control-Request-Headers"` RequestCommon } type OptionObjectResult struct { // The HTTP method of the request. If the request is denied, the response does not contain the header. AccessControlAllowMethods *string `output:"header,Access-Control-Allow-Methods"` // The list of headers included in the request. If the request includes headers that are not allowed, the response does not contain the headers and the request is denied. AccessControlAllowHeaders *string `output:"header,Access-Control-Allow-Headers"` // The list of headers that can be accessed by JavaScript applications on a client. AccessControlExposeHeaders *string `output:"header,Access-Control-Expose-Headers"` // The maximum duration for the browser to cache preflight results. Unit: seconds. AccessControlMaxAge *int64 `output:"header,Access-Control-Max-Age"` // The origin that is included in the request. If the request is denied, the response does not contain the header. AccessControlAllowOrigin *string `output:"header,Access-Control-Allow-Origin"` ResultCommon } // OptionObject Determines whether to send a cross-origin request. Before a cross-origin request is sent, the browser sends a preflight OPTIONS request that includes a specific origin, HTTP method, and header information to Object Storage Service (OSS) to determine whether to send the cross-origin request. func (c *Client) OptionObject(ctx context.Context, request *OptionObjectRequest, optFns ...func(*Options)) (*OptionObjectResult, error) { var err error if request == nil { request = &OptionObjectRequest{} } input := &OperationInput{ OpName: "OptionObject", Method: "OPTIONS", Headers: map[string]string{ HTTPHeaderContentType: contentTypeXML, }, Bucket: request.Bucket, Key: request.Key, } if err = c.marshalInput(request, input, updateContentMd5); err != nil { return nil, err } output, err := c.invokeOperation(ctx, input, optFns) if err != nil { return nil, err } result := &OptionObjectResult{} if err = c.unmarshalOutput(result, output, unmarshalHeader, unmarshalBodyXmlMix); err != nil { return nil, c.toClientError(err, "UnmarshalOutputFail", output) } return result, err }