oss/api_op_bucket_policy.go (168 lines of code) (raw):
package oss
import (
"context"
"io"
"io/ioutil"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/signer"
)
type PolicyStatus struct {
// Indicates whether the current bucket policy allows public access.true false
IsPublic *bool `xml:"IsPublic"`
}
type PutBucketPolicyRequest struct {
// The name of the bucket.
Bucket *string `input:"host,bucket,required"`
// The request parameters.
Body io.Reader `input:"body,nop,required"`
RequestCommon
}
type PutBucketPolicyResult struct {
ResultCommon
}
// PutBucketPolicy Configures a policy for a bucket.
func (c *Client) PutBucketPolicy(ctx context.Context, request *PutBucketPolicyRequest, optFns ...func(*Options)) (*PutBucketPolicyResult, error) {
var err error
if request == nil {
request = &PutBucketPolicyRequest{}
}
input := &OperationInput{
OpName: "PutBucketPolicy",
Method: "PUT",
Headers: map[string]string{
HTTPHeaderContentType: contentTypeXML,
},
Parameters: map[string]string{
"policy": "",
},
Bucket: request.Bucket,
}
input.OpMetadata.Set(signer.SubResource, []string{"policy"})
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 := &PutBucketPolicyResult{}
if err = c.unmarshalOutput(result, output, unmarshalBodyXmlMix); err != nil {
return nil, c.toClientError(err, "UnmarshalOutputFail", output)
}
return result, err
}
type GetBucketPolicyRequest struct {
// The name of the bucket.
Bucket *string `input:"host,bucket,required"`
RequestCommon
}
type GetBucketPolicyResult struct {
// The configurations of the bucket policy.
Body string
ResultCommon
}
// GetBucketPolicy Queries the policies configured for a bucket.
func (c *Client) GetBucketPolicy(ctx context.Context, request *GetBucketPolicyRequest, optFns ...func(*Options)) (*GetBucketPolicyResult, error) {
var err error
if request == nil {
request = &GetBucketPolicyRequest{}
}
input := &OperationInput{
OpName: "GetBucketPolicy",
Method: "GET",
Headers: map[string]string{
HTTPHeaderContentType: contentTypeXML,
},
Parameters: map[string]string{
"policy": "",
},
Bucket: request.Bucket,
}
input.OpMetadata.Set(signer.SubResource, []string{"policy"})
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
}
body, err := ioutil.ReadAll(output.Body)
defer output.Body.Close()
if err != nil {
return nil, err
}
result := &GetBucketPolicyResult{
Body: string(body),
}
if err = c.unmarshalOutput(result, output); err != nil {
return nil, c.toClientError(err, "UnmarshalOutputFail", output)
}
return result, err
}
type DeleteBucketPolicyRequest struct {
// The name of the bucket.
Bucket *string `input:"host,bucket,required"`
RequestCommon
}
type DeleteBucketPolicyResult struct {
ResultCommon
}
// DeleteBucketPolicy Deletes a policy for a bucket.
func (c *Client) DeleteBucketPolicy(ctx context.Context, request *DeleteBucketPolicyRequest, optFns ...func(*Options)) (*DeleteBucketPolicyResult, error) {
var err error
if request == nil {
request = &DeleteBucketPolicyRequest{}
}
input := &OperationInput{
OpName: "DeleteBucketPolicy",
Method: "DELETE",
Headers: map[string]string{
HTTPHeaderContentType: contentTypeXML,
},
Parameters: map[string]string{
"policy": "",
},
Bucket: request.Bucket,
}
input.OpMetadata.Set(signer.SubResource, []string{"policy"})
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 := &DeleteBucketPolicyResult{}
if err = c.unmarshalOutput(result, output, unmarshalBodyXmlMix); err != nil {
return nil, c.toClientError(err, "UnmarshalOutputFail", output)
}
return result, err
}
type GetBucketPolicyStatusRequest struct {
// The name of the bucket.
Bucket *string `input:"host,bucket,required"`
RequestCommon
}
type GetBucketPolicyStatusResult struct {
// The container that stores public access information.
PolicyStatus *PolicyStatus `output:"body,PolicyStatus,xml"`
ResultCommon
}
// GetBucketPolicyStatus Checks whether the current bucket policy allows public access.
func (c *Client) GetBucketPolicyStatus(ctx context.Context, request *GetBucketPolicyStatusRequest, optFns ...func(*Options)) (*GetBucketPolicyStatusResult, error) {
var err error
if request == nil {
request = &GetBucketPolicyStatusRequest{}
}
input := &OperationInput{
OpName: "GetBucketPolicyStatus",
Method: "GET",
Headers: map[string]string{
HTTPHeaderContentType: contentTypeXML,
},
Parameters: map[string]string{
"policyStatus": "",
},
Bucket: request.Bucket,
}
input.OpMetadata.Set(signer.SubResource, []string{"policyStatus"})
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 := &GetBucketPolicyStatusResult{}
if err = c.unmarshalOutput(result, output, unmarshalBodyXmlMix); err != nil {
return nil, c.toClientError(err, "UnmarshalOutputFail", output)
}
return result, err
}