Skip to content

Commit 88aeef5

Browse files
authored
Merge pull request #74 from agin719/common-dev
add encryption and referer
2 parents 6bc90a9 + da7722b commit 88aeef5

File tree

8 files changed

+456
-1
lines changed

8 files changed

+456
-1
lines changed

bucket_encryption.go

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package cos
2+
3+
import (
4+
"context"
5+
"encoding/xml"
6+
"net/http"
7+
)
8+
9+
type BucketEncryptionConfiguration struct {
10+
SSEAlgorithm string `xml:"SSEAlgorithm"`
11+
}
12+
13+
type BucketPutEncryptionOptions struct {
14+
XMLName xml.Name `xml:"ServerSideEncryptionConfiguration"`
15+
Rule *BucketEncryptionConfiguration `xml:"Rule>ApplySideEncryptionConfiguration"`
16+
}
17+
18+
type BucketGetEncryptionResult BucketPutEncryptionOptions
19+
20+
func (s *BucketService) PutEncryption(ctx context.Context, opt *BucketPutEncryptionOptions) (*Response, error) {
21+
sendOpt := &sendOptions{
22+
baseURL: s.client.BaseURL.BucketURL,
23+
uri: "/?encryption",
24+
method: http.MethodPut,
25+
body: opt,
26+
}
27+
resp, err := s.client.send(ctx, sendOpt)
28+
return resp, err
29+
}
30+
31+
func (s *BucketService) GetEncryption(ctx context.Context) (*BucketGetEncryptionResult, *Response, error) {
32+
var res BucketGetEncryptionResult
33+
sendOpt := &sendOptions{
34+
baseURL: s.client.BaseURL.BucketURL,
35+
uri: "/?encryption",
36+
method: http.MethodGet,
37+
result: &res,
38+
}
39+
resp, err := s.client.send(ctx, sendOpt)
40+
return &res, resp, err
41+
}
42+
43+
func (s *BucketService) DeleteEncryption(ctx context.Context) (*Response, error) {
44+
sendOpt := &sendOptions{
45+
baseURL: s.client.BaseURL.BucketURL,
46+
uri: "/?encryption",
47+
method: http.MethodDelete,
48+
}
49+
resp, err := s.client.send(ctx, sendOpt)
50+
return resp, err
51+
}

bucket_encryption_test.go

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
package cos
2+
3+
import (
4+
"context"
5+
"encoding/xml"
6+
"fmt"
7+
"net/http"
8+
"reflect"
9+
"testing"
10+
)
11+
12+
func TestBucketService_GetEncryption(t *testing.T) {
13+
setup()
14+
defer teardown()
15+
16+
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
17+
testMethod(t, r, "GET")
18+
vs := values{
19+
"encryption": "",
20+
}
21+
testFormValues(t, r, vs)
22+
fmt.Fprint(w, `<ServerSideEncryptionConfiguration>
23+
<Rule>
24+
<ApplySideEncryptionConfiguration>
25+
<SSEAlgorithm>AES256</SSEAlgorithm>
26+
</ApplySideEncryptionConfiguration>
27+
</Rule>
28+
</ServerSideEncryptionConfiguration>`)
29+
30+
})
31+
32+
res, _, err := client.Bucket.GetEncryption(context.Background())
33+
if err != nil {
34+
t.Fatalf("Bucket.GetEncryption returned error %v", err)
35+
}
36+
37+
want := &BucketGetEncryptionResult{
38+
XMLName: xml.Name{Local: "ServerSideEncryptionConfiguration"},
39+
Rule: &BucketEncryptionConfiguration{
40+
SSEAlgorithm: "AES256",
41+
},
42+
}
43+
44+
if !reflect.DeepEqual(res, want) {
45+
t.Errorf("Bucket.GetEncryption returned %+v, want %+v", res, want)
46+
}
47+
}
48+
49+
func TestBucketService_PutEncryption(t *testing.T) {
50+
setup()
51+
defer teardown()
52+
53+
opt := &BucketPutEncryptionOptions{
54+
Rule: &BucketEncryptionConfiguration{
55+
SSEAlgorithm: "AES256",
56+
},
57+
}
58+
59+
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
60+
testMethod(t, r, "PUT")
61+
vs := values{
62+
"encryption": "",
63+
}
64+
testFormValues(t, r, vs)
65+
66+
body := new(BucketPutEncryptionOptions)
67+
xml.NewDecoder(r.Body).Decode(body)
68+
want := opt
69+
want.XMLName = xml.Name{Local: "ServerSideEncryptionConfiguration"}
70+
if !reflect.DeepEqual(body, want) {
71+
t.Errorf("Bucket.PutEncryption request\n body: %+v\n, want %+v\n", body, want)
72+
}
73+
})
74+
75+
_, err := client.Bucket.PutEncryption(context.Background(), opt)
76+
if err != nil {
77+
t.Fatalf("Bucket.PutEncryption returned error: %v", err)
78+
}
79+
}
80+
81+
func TestBucketService_DeleteEncryption(t *testing.T) {
82+
setup()
83+
defer teardown()
84+
85+
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
86+
testMethod(t, r, http.MethodDelete)
87+
vs := values{
88+
"encryption": "",
89+
}
90+
testFormValues(t, r, vs)
91+
92+
w.WriteHeader(http.StatusNoContent)
93+
})
94+
95+
_, err := client.Bucket.DeleteEncryption(context.Background())
96+
if err != nil {
97+
t.Fatalf("Bucket.DeleteEncryption returned error: %v", err)
98+
}
99+
100+
}

bucket_referer.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package cos
2+
3+
import (
4+
"context"
5+
"encoding/xml"
6+
"net/http"
7+
)
8+
9+
type BucketPutRefererOptions struct {
10+
XMLName xml.Name `xml:"RefererConfiguration"`
11+
Status string `xml:"Status"`
12+
RefererType string `xml:"RefererType"`
13+
DomainList []string `xml:"DomainList>Domain"`
14+
EmptyReferConfiguration string `xml:"EmptyReferConfiguration,omitempty"`
15+
}
16+
17+
type BucketGetRefererResult BucketPutRefererOptions
18+
19+
func (s *BucketService) PutReferer(ctx context.Context, opt *BucketPutRefererOptions) (*Response, error) {
20+
sendOpt := &sendOptions{
21+
baseURL: s.client.BaseURL.BucketURL,
22+
uri: "/?referer",
23+
method: http.MethodPut,
24+
body: opt,
25+
}
26+
resp, err := s.client.send(ctx, sendOpt)
27+
return resp, err
28+
}
29+
30+
func (s *BucketService) GetReferer(ctx context.Context) (*BucketGetRefererResult, *Response, error) {
31+
var res BucketGetRefererResult
32+
sendOpt := &sendOptions{
33+
baseURL: s.client.BaseURL.BucketURL,
34+
uri: "/?referer",
35+
method: http.MethodGet,
36+
result: &res,
37+
}
38+
resp, err := s.client.send(ctx, sendOpt)
39+
return &res, resp, err
40+
}

bucket_referer_test.go

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
package cos
2+
3+
import (
4+
"context"
5+
"encoding/xml"
6+
"fmt"
7+
"net/http"
8+
"reflect"
9+
"testing"
10+
)
11+
12+
func TestBucketService_GetReferer(t *testing.T) {
13+
setup()
14+
defer teardown()
15+
16+
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
17+
testMethod(t, r, "GET")
18+
vs := values{
19+
"referer": "",
20+
}
21+
testFormValues(t, r, vs)
22+
fmt.Fprint(w, `<RefererConfiguration>
23+
<Status>Enabled</Status>
24+
<RefererType>White-List</RefererType>
25+
<DomainList>
26+
<Domain>*.qq.com</Domain>
27+
<Domain>*.qcloud.com</Domain>
28+
</DomainList>
29+
<EmptyReferConfiguration>Allow</EmptyReferConfiguration>
30+
</RefererConfiguration>`)
31+
})
32+
33+
res, _, err := client.Bucket.GetReferer(context.Background())
34+
if err != nil {
35+
t.Fatalf("Bucket.GetReferer returned error %v", err)
36+
}
37+
38+
want := &BucketGetRefererResult{
39+
XMLName: xml.Name{Local: "RefererConfiguration"},
40+
Status: "Enabled",
41+
RefererType: "White-List",
42+
DomainList: []string{
43+
"*.qq.com",
44+
"*.qcloud.com",
45+
},
46+
EmptyReferConfiguration: "Allow",
47+
}
48+
49+
if !reflect.DeepEqual(res, want) {
50+
t.Errorf("Bucket.GetReferer returned %+v, want %+v", res, want)
51+
}
52+
}
53+
54+
func TestBucketService_PutReferer(t *testing.T) {
55+
setup()
56+
defer teardown()
57+
58+
opt := &BucketPutRefererOptions{
59+
Status: "Enabled",
60+
RefererType: "White-List",
61+
DomainList: []string{
62+
"*.qq.com",
63+
"*.qcloud.com",
64+
},
65+
EmptyReferConfiguration: "Allow",
66+
}
67+
68+
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
69+
testMethod(t, r, "PUT")
70+
vs := values{
71+
"referer": "",
72+
}
73+
testFormValues(t, r, vs)
74+
75+
body := new(BucketPutRefererOptions)
76+
xml.NewDecoder(r.Body).Decode(body)
77+
want := opt
78+
want.XMLName = xml.Name{Local: "RefererConfiguration"}
79+
if !reflect.DeepEqual(body, want) {
80+
t.Errorf("Bucket.PutReferer request\n body: %+v\nwant %+v\n", body, want)
81+
}
82+
})
83+
84+
_, err := client.Bucket.PutReferer(context.Background(), opt)
85+
if err != nil {
86+
t.Fatalf("Bucket.PutReferer returned error: %v", err)
87+
}
88+
}

cos.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import (
2121

2222
const (
2323
// Version current go sdk version
24-
Version = "0.7.3"
24+
Version = "0.7.4"
2525
userAgent = "cos-go-sdk-v5/" + Version
2626
contentTypeXML = "application/xml"
2727
defaultServiceBaseURL = "http://service.cos.myqcloud.com"

costesting/ci_test.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -802,6 +802,7 @@ func (s *CosTestSuite) TestBatch() {
802802
assert.Equal(s.T(), res3.JobId, jobid, "jobid failed")
803803
assert.Equal(s.T(), res3.Priority, 3, "priority not right")
804804

805+
// 等待状态变成Suspended
805806
for i := 0; i < 10; i = i + 1 {
806807
res, _, err := client.Batch.DescribeJob(context.Background(), jobid, headers)
807808
assert.Nil(s.T(), err, "describe job Failed")
@@ -830,6 +831,46 @@ func (s *CosTestSuite) TestBatch() {
830831
assert.Equal(s.T(), res4.StatusUpdateReason, "to test", "StatusUpdateReason failed")
831832
}
832833

834+
func (s *CosTestSuite) TestEncryption() {
835+
opt := &cos.BucketPutEncryptionOptions{
836+
Rule: &cos.BucketEncryptionConfiguration{
837+
SSEAlgorithm: "AES256",
838+
},
839+
}
840+
841+
_, err := s.Client.Bucket.PutEncryption(context.Background(), opt)
842+
assert.Nil(s.T(), err, "PutEncryption Failed")
843+
844+
res, _, err := s.Client.Bucket.GetEncryption(context.Background())
845+
assert.Nil(s.T(), err, "GetEncryption Failed")
846+
assert.Equal(s.T(), opt.Rule.SSEAlgorithm, res.Rule.SSEAlgorithm, "GetEncryption Failed")
847+
848+
_, err = s.Client.Bucket.DeleteEncryption(context.Background())
849+
assert.Nil(s.T(), err, "DeleteEncryption Failed")
850+
}
851+
852+
func (s *CosTestSuite) TestReferer() {
853+
opt := &cos.BucketPutRefererOptions{
854+
Status: "Enabled",
855+
RefererType: "White-List",
856+
DomainList: []string{
857+
"*.qq.com",
858+
"*.qcloud.com",
859+
},
860+
EmptyReferConfiguration: "Allow",
861+
}
862+
863+
_, err := s.Client.Bucket.PutReferer(context.Background(), opt)
864+
assert.Nil(s.T(), err, "PutReferer Failed")
865+
866+
res, _, err := s.Client.Bucket.GetReferer(context.Background())
867+
assert.Nil(s.T(), err, "GetReferer Failed")
868+
assert.Equal(s.T(), opt.Status, res.Status, "GetReferer Failed")
869+
assert.Equal(s.T(), opt.RefererType, res.RefererType, "GetReferer Failed")
870+
assert.Equal(s.T(), opt.DomainList, res.DomainList, "GetReferer Failed")
871+
assert.Equal(s.T(), opt.EmptyReferConfiguration, res.EmptyReferConfiguration, "GetReferer Failed")
872+
}
873+
833874
// End of api test
834875

835876
// All methods that begin with "Test" are run as tests within a

0 commit comments

Comments
 (0)