Skip to content

Commit

Permalink
add certificate
Browse files Browse the repository at this point in the history
  • Loading branch information
jojoliang committed Aug 24, 2022
1 parent 44c947e commit 563f286
Show file tree
Hide file tree
Showing 3 changed files with 267 additions and 0 deletions.
61 changes: 61 additions & 0 deletions bucket_domain.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,3 +51,64 @@ func (s *BucketService) DeleteDomain(ctx context.Context) (*Response, error) {
resp, err := s.client.doRetry(ctx, sendOpt)
return resp, err
}

type BucketPutDomainCertificateOptions struct {
XMLName xml.Name `xml:"DomainCertificate"`
CertificateInfo *BucketDomainCertificateInfo `xml:"CertificateInfo"`
DomainList []string `xml:"DomainList>DomainName"`
}

type BucketDomainCertificateInfo struct {
CertType string `xml:"CertType,omitempty"`
CustomCert *BucketDomainCustomCert `xml:"CustomCert,omitempty"`
}
type BucketDomainCustomCert struct {
Cert string `xml:"Cert,omitempty"`
PrivateKey string `xml:"PrivateKey,omitempty"`
}

func (s *BucketService) PutDomainCertificate(ctx context.Context, opt *BucketPutDomainCertificateOptions) (*Response, error) {
sendOpt := &sendOptions{
baseURL: s.client.BaseURL.BucketURL,
uri: "/?domaincertificate",
method: http.MethodPut,
body: opt,
}
resp, err := s.client.doRetry(ctx, sendOpt)
return resp, err
}

type BucketGetDomainCertificateResult struct {
XMLName xml.Name `xml:"DomainCertificate"`
Status string `xml:"Status,omitempty"`
}

type BucketGetDomainCertificateOptions struct {
DomainName string `url:"domainname"`
}

type BucketDeleteDomainCertificateOptions BucketGetDomainCertificateOptions

func (s *BucketService) GetDomainCertificate(ctx context.Context, opt *BucketGetDomainCertificateOptions) (*BucketGetDomainCertificateResult, *Response, error) {
var res BucketGetDomainCertificateResult
sendOpt := &sendOptions{
baseURL: s.client.BaseURL.BucketURL,
uri: "/?domaincertificate",
method: http.MethodGet,
optQuery: opt,
result: &res,
}
resp, err := s.client.doRetry(ctx, sendOpt)
return &res, resp, err
}

func (s *BucketService) DeleteDomainCertificate(ctx context.Context, opt *BucketDeleteDomainCertificateOptions) (*Response, error) {
sendOpt := &sendOptions{
baseURL: s.client.BaseURL.BucketURL,
uri: "/?domaincertificate",
method: http.MethodDelete,
optQuery: opt,
}
resp, err := s.client.doRetry(ctx, sendOpt)
return resp, err
}
106 changes: 106 additions & 0 deletions bucket_domain_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -118,3 +118,109 @@ func TestBucketService_DeleteDomain(t *testing.T) {
}

}

func TestBucketService_GetDomainCertificate(t *testing.T) {
setup()
defer teardown()

rt := 0
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "GET")
vs := values{
"domaincertificate": "",
"domainname": "www.qq.com",
}
testFormValues(t, r, vs)
rt++
if rt < 3 {
w.WriteHeader(http.StatusGatewayTimeout)
}

fmt.Fprint(w, `<DomainCertificate>
<Status>ENABLED</Status>
</DomainCertificate>`)
})

opt := &BucketGetDomainCertificateOptions{
DomainName: "www.qq.com",
}
res, _, err := client.Bucket.GetDomainCertificate(context.Background(), opt)
if err != nil {
t.Fatalf("Bucket.GetDomainCertificate returned error %v", err)
}

want := &BucketGetDomainCertificateResult{
XMLName: xml.Name{Local: "DomainCertificate"},
Status: "ENABLED",
}

if !reflect.DeepEqual(res, want) {
t.Errorf("Bucket.GetDomainCertificate returned %+v, want %+v", res, want)
}
}

func TestBucketService_PutDomainCertificate(t *testing.T) {
setup()
defer teardown()

opt := &BucketPutDomainCertificateOptions{
XMLName: xml.Name{Local: "DomainCertificate"},
CertificateInfo: &BucketDomainCertificateInfo{
CertType: "CustomCert",
CustomCert: &BucketDomainCustomCert{
Cert: "====certificate====",
PrivateKey: "====PrivateKey====",
},
},
DomainList: []string{"www.qq.com"},
}

rt := 0
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "PUT")
vs := values{
"domaincertificate": "",
}
testFormValues(t, r, vs)
rt++
if rt < 3 {
w.WriteHeader(http.StatusGatewayTimeout)
}
body := new(BucketPutDomainCertificateOptions)
xml.NewDecoder(r.Body).Decode(body)
want := opt
want.XMLName = xml.Name{Local: "DomainCertificate"}
if !reflect.DeepEqual(body, want) {
t.Errorf("Bucket.PutDomainCertificate request\n body: %+v\n, want %+v\n", body, want)
}
})

_, err := client.Bucket.PutDomainCertificate(context.Background(), opt)
if err != nil {
t.Fatalf("Bucket.PutDomainCertificate returned error: %v", err)
}
}

func TestBucketService_DeleteDomainCertificate(t *testing.T) {
setup()
defer teardown()

mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, http.MethodDelete)
vs := values{
"domaincertificate": "",
"domainname": "www.qq.com",
}
testFormValues(t, r, vs)
w.WriteHeader(http.StatusNoContent)
})

opt := &BucketDeleteDomainCertificateOptions{
DomainName: "www.qq.com",
}
_, err := client.Bucket.DeleteDomainCertificate(context.Background(), opt)
if err != nil {
t.Fatalf("Bucket.DeleteDomainCertificate returned error: %v", err)
}

}
100 changes: 100 additions & 0 deletions example/bucket/certificate.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
package main

import (
"context"
"fmt"
"io/ioutil"
"net/http"
"net/url"
"os"

"github.com/tencentyun/cos-go-sdk-v5"
"github.com/tencentyun/cos-go-sdk-v5/debug"
)

func log_status(err error) {
if err == nil {
return
}
if cos.IsNotFoundError(err) {
// WARN
fmt.Println("WARN: Resource is not existed")
} else if e, ok := cos.IsCOSError(err); ok {
fmt.Printf("ERROR: Code: %v\n", e.Code)
fmt.Printf("ERROR: Message: %v\n", e.Message)
fmt.Printf("ERROR: Resource: %v\n", e.Resource)
fmt.Printf("ERROR: RequestId: %v\n", e.RequestID)
// ERROR
} else {
fmt.Printf("ERROR: %v\n", err)
// ERROR
}
}

func main() {
u, _ := url.Parse("https://bj-1259654469.cos.ap-beijing.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,
},
},
})

fd, err := os.Open("www.qq.com.pem")
if err != nil {
panic(err)
}
pem, err := ioutil.ReadAll(fd)
if err != nil {
panic(err)
}
fd.Close()
fd, err = os.Open("www.qq.com.key")
if err != nil {
panic(err)
}
key, err := ioutil.ReadAll(fd)
if err != nil {
panic(err)
}
fd.Close()

opt := &cos.BucketPutDomainCertificateOptions{
CertificateInfo: &cos.BucketDomainCertificateInfo{
CertType: "CustomCert",
CustomCert: &cos.BucketDomainCustomCert{
Cert: string(pem),
PrivateKey: string(key),
},
},
DomainList: []string{
"www.qq.com",
},
}

_, err = c.Bucket.PutDomainCertificate(context.Background(), opt)
log_status(err)

gopt := &cos.BucketGetDomainCertificateOptions{
DomainName: "www.qq.com",
}
res, _, err := c.Bucket.GetDomainCertificate(context.Background(), gopt)
log_status(err)
fmt.Printf("%+v\n", res)

dopt := &cos.BucketDeleteDomainCertificateOptions{
DomainName: "www.qq.com",
}
_, err = c.Bucket.DeleteDomainCertificate(context.Background(), dopt)
log_status(err)

}

0 comments on commit 563f286

Please sign in to comment.