Browse Source
			
			
			Merge pull request #72 from agin719/fixup
			
				
		Merge pull request #72 from agin719/fixup
	
		
	
			
				add policy and IsNoSuchKeyError functiontags/v0.7.3
							committed by
							
								
								GitHub
							
						
					
				
				
				  
				  No known key found for this signature in database
				  
				  	
						GPG Key ID: 4AEE18F83AFDEB23
				  	
				  
				
			
		
		
		
	
				 5 changed files with 222 additions and 0 deletions
			
			
		- 
					71bucket_policy.go
 - 
					14error.go
 - 
					35example/bucket/delPolicy.go
 - 
					39example/bucket/getPolicy.go
 - 
					63example/bucket/putPolicy.go
 
@ -0,0 +1,71 @@ | 
				
			|||
package cos | 
				
			|||
 | 
				
			|||
import ( | 
				
			|||
	"bytes" | 
				
			|||
	"context" | 
				
			|||
	"encoding/json" | 
				
			|||
	"net/http" | 
				
			|||
	"strings" | 
				
			|||
) | 
				
			|||
 | 
				
			|||
type BucketStatement struct { | 
				
			|||
	Principal map[string][]string               `json:"principal,omitempty"` | 
				
			|||
	Action    []string                          `json:"action,omitempty"` | 
				
			|||
	Effect    string                            `json:"effect,omitempty"` | 
				
			|||
	Resource  []string                          `json:"resource,omitempty"` | 
				
			|||
	Condition map[string]map[string]interface{} `json:"condition,omitempty"` | 
				
			|||
} | 
				
			|||
 | 
				
			|||
type BucketPutPolicyOptions struct { | 
				
			|||
	Statement []BucketStatement   `json:"statement,omitempty"` | 
				
			|||
	Version   string              `json:"version,omitempty"` | 
				
			|||
	Principal map[string][]string `json:"principal,omitempty"` | 
				
			|||
} | 
				
			|||
 | 
				
			|||
type BucketGetPolicyResult BucketPutPolicyOptions | 
				
			|||
 | 
				
			|||
func (s *BucketService) PutPolicy(ctx context.Context, opt *BucketPutPolicyOptions) (*Response, error) { | 
				
			|||
	var f *strings.Reader | 
				
			|||
	if opt != nil { | 
				
			|||
		bs, err := json.Marshal(opt) | 
				
			|||
		if err != nil { | 
				
			|||
			return nil, err | 
				
			|||
		} | 
				
			|||
		body := string(bs) | 
				
			|||
		f = strings.NewReader(body) | 
				
			|||
	} | 
				
			|||
	sendOpt := &sendOptions{ | 
				
			|||
		baseURL: s.client.BaseURL.BucketURL, | 
				
			|||
		uri:     "/?policy", | 
				
			|||
		method:  http.MethodPut, | 
				
			|||
		body:    f, | 
				
			|||
	} | 
				
			|||
	resp, err := s.client.send(ctx, sendOpt) | 
				
			|||
	return resp, err | 
				
			|||
} | 
				
			|||
 | 
				
			|||
func (s *BucketService) GetPolicy(ctx context.Context) (*BucketGetPolicyResult, *Response, error) { | 
				
			|||
	var bs bytes.Buffer | 
				
			|||
	var res BucketGetPolicyResult | 
				
			|||
	sendOpt := &sendOptions{ | 
				
			|||
		baseURL: s.client.BaseURL.BucketURL, | 
				
			|||
		uri:     "/?policy", | 
				
			|||
		method:  http.MethodGet, | 
				
			|||
		result:  &bs, | 
				
			|||
	} | 
				
			|||
	resp, err := s.client.send(ctx, sendOpt) | 
				
			|||
	if err == nil { | 
				
			|||
		err = json.Unmarshal(bs.Bytes(), &res) | 
				
			|||
	} | 
				
			|||
	return &res, resp, err | 
				
			|||
} | 
				
			|||
 | 
				
			|||
func (s *BucketService) DeletePolicy(ctx context.Context) (*Response, error) { | 
				
			|||
	sendOpt := &sendOptions{ | 
				
			|||
		baseURL: s.client.BaseURL.BucketURL, | 
				
			|||
		uri:     "/?policy", | 
				
			|||
		method:  http.MethodDelete, | 
				
			|||
	} | 
				
			|||
	resp, err := s.client.send(ctx, sendOpt) | 
				
			|||
	return resp, err | 
				
			|||
} | 
				
			|||
@ -0,0 +1,35 @@ | 
				
			|||
package main | 
				
			|||
 | 
				
			|||
import ( | 
				
			|||
	"context" | 
				
			|||
	"net/http" | 
				
			|||
	"net/url" | 
				
			|||
	"os" | 
				
			|||
 | 
				
			|||
	"github.com/tencentyun/cos-go-sdk-v5" | 
				
			|||
	"github.com/tencentyun/cos-go-sdk-v5/debug" | 
				
			|||
) | 
				
			|||
 | 
				
			|||
func main() { | 
				
			|||
	u, _ := url.Parse("https://test-1259654469.cos.ap-guangzhou.myqcloud.com") | 
				
			|||
	b := &cos.BaseURL{ | 
				
			|||
		BucketURL: u, | 
				
			|||
	} | 
				
			|||
	c := cos.NewClient(b, &http.Client{ | 
				
			|||
		Transport: &cos.AuthorizationTransport{ | 
				
			|||
			SecretID:  os.Getenv("COS_SECRETID"), | 
				
			|||
			SecretKey: os.Getenv("COS_SECRETKEY"), | 
				
			|||
			Transport: &debug.DebugRequestTransport{ | 
				
			|||
				RequestHeader:  true, | 
				
			|||
				RequestBody:    true, | 
				
			|||
				ResponseHeader: true, | 
				
			|||
				ResponseBody:   true, | 
				
			|||
			}, | 
				
			|||
		}, | 
				
			|||
	}) | 
				
			|||
 | 
				
			|||
	_, err := c.Bucket.DeletePolicy(context.Background()) | 
				
			|||
	if err != nil { | 
				
			|||
		panic(err) | 
				
			|||
	} | 
				
			|||
} | 
				
			|||
@ -0,0 +1,39 @@ | 
				
			|||
package main | 
				
			|||
 | 
				
			|||
import ( | 
				
			|||
	"context" | 
				
			|||
	"encoding/json" | 
				
			|||
	"fmt" | 
				
			|||
	"net/http" | 
				
			|||
	"net/url" | 
				
			|||
	"os" | 
				
			|||
 | 
				
			|||
	"github.com/tencentyun/cos-go-sdk-v5" | 
				
			|||
	"github.com/tencentyun/cos-go-sdk-v5/debug" | 
				
			|||
) | 
				
			|||
 | 
				
			|||
func main() { | 
				
			|||
	u, _ := url.Parse("https://test-1259654469.cos.ap-guangzhou.myqcloud.com") | 
				
			|||
	b := &cos.BaseURL{ | 
				
			|||
		BucketURL: u, | 
				
			|||
	} | 
				
			|||
	c := cos.NewClient(b, &http.Client{ | 
				
			|||
		Transport: &cos.AuthorizationTransport{ | 
				
			|||
			SecretID:  os.Getenv("COS_SECRETID"), | 
				
			|||
			SecretKey: os.Getenv("COS_SECRETKEY"), | 
				
			|||
			Transport: &debug.DebugRequestTransport{ | 
				
			|||
				RequestHeader:  true, | 
				
			|||
				RequestBody:    true, | 
				
			|||
				ResponseHeader: true, | 
				
			|||
				ResponseBody:   true, | 
				
			|||
			}, | 
				
			|||
		}, | 
				
			|||
	}) | 
				
			|||
 | 
				
			|||
	res, _, err := c.Bucket.GetPolicy(context.Background()) | 
				
			|||
	if err != nil { | 
				
			|||
		panic(err) | 
				
			|||
	} | 
				
			|||
	bs, err := json.Marshal(res) | 
				
			|||
	fmt.Println(string(bs)) | 
				
			|||
} | 
				
			|||
@ -0,0 +1,63 @@ | 
				
			|||
package main | 
				
			|||
 | 
				
			|||
import ( | 
				
			|||
	"context" | 
				
			|||
	"net/http" | 
				
			|||
	"net/url" | 
				
			|||
	"os" | 
				
			|||
 | 
				
			|||
	"github.com/tencentyun/cos-go-sdk-v5" | 
				
			|||
	"github.com/tencentyun/cos-go-sdk-v5/debug" | 
				
			|||
) | 
				
			|||
 | 
				
			|||
func main() { | 
				
			|||
	u, _ := url.Parse("https://test-1259654469.cos.ap-guangzhou.myqcloud.com") | 
				
			|||
	b := &cos.BaseURL{ | 
				
			|||
		BucketURL: u, | 
				
			|||
	} | 
				
			|||
	c := cos.NewClient(b, &http.Client{ | 
				
			|||
		Transport: &cos.AuthorizationTransport{ | 
				
			|||
			SecretID:  os.Getenv("COS_SECRETID"), | 
				
			|||
			SecretKey: os.Getenv("COS_SECRETKEY"), | 
				
			|||
			Transport: &debug.DebugRequestTransport{ | 
				
			|||
				RequestHeader:  true, | 
				
			|||
				RequestBody:    true, | 
				
			|||
				ResponseHeader: true, | 
				
			|||
				ResponseBody:   true, | 
				
			|||
			}, | 
				
			|||
		}, | 
				
			|||
	}) | 
				
			|||
 | 
				
			|||
	opt := &cos.BucketPutPolicyOptions{ | 
				
			|||
		Version: "2.0", | 
				
			|||
		Statement: []cos.BucketStatement{ | 
				
			|||
			{ | 
				
			|||
				Principal: map[string][]string{ | 
				
			|||
					"qcs": []string{ | 
				
			|||
						"qcs::cam::uin/100000000001:uin/100000000011", //替换成您想授予权限的账户uin
 | 
				
			|||
					}, | 
				
			|||
				}, | 
				
			|||
				Action: []string{ | 
				
			|||
					"name/cos:GetObject", | 
				
			|||
				}, | 
				
			|||
				Effect: "allow", | 
				
			|||
				Resource: []string{ | 
				
			|||
					//这里改成允许的路径前缀,可以根据自己网站的用户登录态判断允许上传的具体路径,例子: a.jpg 或者 a/* 或者 * (使用通配符*存在重大安全风险, 请谨慎评估使用)
 | 
				
			|||
					"qcs::cos:ap-guangzhou:uid/1259654469:test-1259654469/exampleobject", | 
				
			|||
				}, | 
				
			|||
				Condition: map[string]map[string]interface{}{ | 
				
			|||
					"ip_not_equal": map[string]interface{}{ | 
				
			|||
						"qcs:ip": []string{ | 
				
			|||
							"192.168.1.1", | 
				
			|||
						}, | 
				
			|||
					}, | 
				
			|||
				}, | 
				
			|||
			}, | 
				
			|||
		}, | 
				
			|||
	} | 
				
			|||
 | 
				
			|||
	_, err := c.Bucket.PutPolicy(context.Background(), opt) | 
				
			|||
	if err != nil { | 
				
			|||
		panic(err) | 
				
			|||
	} | 
				
			|||
} | 
				
			|||
						Write
						Preview
					
					
					Loading…
					
					Cancel
						Save
					
		Reference in new issue