Skip to content

Commit 21fcf3d

Browse files
eust-wmiclle
authored andcommitted
feat(ssl): Add API interfaces for managing SSL certificates
- Add CertListReq and CertListResp for retrieving SSL certificate lists - Add CertDetailResp and RealCertDetailResp for retrieving SSL certificate details - Implement GetCertList and GetCertDetail methods for fetching SSL certificate lists and details - Add UploadCertReq and UploadCertResp for uploading SSL certificates - Implement UploadCert method for uploading SSL certificates - Implement DeleteCert method for deleting SSL certificates Refs #136
1 parent 01628b8 commit 21fcf3d

File tree

1 file changed

+221
-0
lines changed

1 file changed

+221
-0
lines changed

cdn/api.go

+221
Original file line numberDiff line numberDiff line change
@@ -352,3 +352,224 @@ func postRequest(mac *auth.Credentials, path string, body interface{}) (resData
352352

353353
return
354354
}
355+
356+
// CertListReq 获取ssl证书列表请求内容
357+
type CertListReq struct {
358+
Marker string `json:"marker"`
359+
Limit int `json:"limit"`
360+
}
361+
362+
// CertListResp 获取ssl证书列表响应内容
363+
type CertListResp struct {
364+
Marker string `json:"marker"`
365+
Certs []struct {
366+
CertID string `json:"certid"`
367+
Name string `json:"name"`
368+
CommonName string `json:"common_name"`
369+
DNSNames []string `json:"dnsnames"`
370+
NotBefore int `json:"not_before"`
371+
NotAfter int `json:"not_after"`
372+
CreateTime int `json:"create_time"`
373+
} `json:"certs"`
374+
}
375+
376+
// GetCertList 获取ssl证书列表
377+
func (m *CdnManager) GetCertList(marker string, limit int) (certList CertListResp, err error) {
378+
reqParams := fmt.Sprintf("marker=%s&limit=%d", marker, limit)
379+
urlStr := fmt.Sprintf("%s/sslcert?%s", FusionHost, reqParams)
380+
req, reqErr := http.NewRequest("GET", urlStr, nil)
381+
if reqErr != nil {
382+
err = reqErr
383+
return
384+
}
385+
accessToken, signErr := m.mac.SignRequest(req)
386+
if signErr != nil {
387+
err = signErr
388+
return
389+
}
390+
req.Header.Add("Authorization", "QBox "+accessToken)
391+
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
392+
resp, respErr := http.DefaultClient.Do(req)
393+
if respErr != nil {
394+
err = respErr
395+
return
396+
}
397+
defer resp.Body.Close()
398+
resData, ioErr := ioutil.ReadAll(resp.Body)
399+
if ioErr != nil {
400+
err = ioErr
401+
return
402+
}
403+
umErr := json.Unmarshal(resData, &certList)
404+
if umErr != nil {
405+
err = umErr
406+
return
407+
}
408+
409+
return
410+
}
411+
412+
// CertDetailResp 获取单个ssl证书响应内容
413+
type CertDetailResp struct {
414+
Name string `json:"name"`
415+
CommonName string `json:"common_name"`
416+
DNSNames []string `json:"dnsnames"`
417+
NotBefore int `json:"not_before"`
418+
NotAfter int `json:"not_after"`
419+
Pri string `json:"pri"`
420+
Ca string `json:"ca"`
421+
CreateTime int `json:"create_time"`
422+
}
423+
424+
// RealCertDetailResp 当前的api返回与官方文档有差异
425+
type RealCertDetailResp struct {
426+
CertID string `json:"certid"`
427+
Name string `json:"name"`
428+
UID int `json:"uid"`
429+
CommonName string `json:"common_name"`
430+
DNSNames []string `json:"dnsnames"`
431+
CreateTime int `json:"create_time"`
432+
NotBefore int `json:"not_before"`
433+
NotAfter int `json:"not_after"`
434+
OrderID string `json:"orderid"`
435+
ProductShortName string `json:"product_short_name"`
436+
ProductType string `json:"product_type"`
437+
CertType string `json:"cert_type"`
438+
Encrypt string `json:"encrypt"`
439+
EncryptParameter string `json:"encryptParameter"`
440+
Enable bool `json:"enable"`
441+
ChildOrderID string `json:"child_order_id"`
442+
State string `json:"state"`
443+
AutoRenew bool `json:"auto_renew"`
444+
Renewable bool `json:"renewable"`
445+
CA string `json:"ca"`
446+
}
447+
448+
// GetCertDetail 获取单个ssl证书的详细信息
449+
func (m *CdnManager) GetCertDetail(certID string) (certDetail CertDetailResp, err error) {
450+
urlStr := fmt.Sprintf("%s/sslcert/%s", FusionHost, certID)
451+
req, reqErr := http.NewRequest("GET", urlStr, nil)
452+
if reqErr != nil {
453+
err = reqErr
454+
return
455+
}
456+
accessToken, signErr := m.mac.SignRequest(req)
457+
if signErr != nil {
458+
err = signErr
459+
return
460+
}
461+
req.Header.Add("Authorization", "QBox "+accessToken)
462+
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
463+
resp, respErr := http.DefaultClient.Do(req)
464+
if respErr != nil {
465+
err = respErr
466+
return
467+
}
468+
defer resp.Body.Close()
469+
resData, ioErr := ioutil.ReadAll(resp.Body)
470+
if ioErr != nil {
471+
err = ioErr
472+
return
473+
}
474+
var resJson = struct {
475+
Code int
476+
Error string
477+
Cert RealCertDetailResp
478+
}{}
479+
umErr := json.Unmarshal(resData, &resJson)
480+
certDetail.Ca = resJson.Cert.CA
481+
certDetail.CommonName = resJson.Cert.Name
482+
certDetail.DNSNames = resJson.Cert.DNSNames
483+
certDetail.Name = resJson.Cert.Name
484+
certDetail.NotAfter = resJson.Cert.NotAfter
485+
certDetail.NotBefore = resJson.Cert.NotBefore
486+
certDetail.CreateTime = resJson.Cert.CreateTime
487+
if umErr != nil {
488+
err = umErr
489+
return
490+
}
491+
492+
return
493+
}
494+
495+
// UploadCertReq 上传ssl证书请求内容
496+
type UploadCertReq struct {
497+
Name string `json:"name"`
498+
CommonName string `json:"common_name"`
499+
Pri string `json:"pri"`
500+
Ca string `json:"ca"`
501+
}
502+
503+
// UploadCertResp 上传ssl证书响应内容
504+
type UploadCertResp struct {
505+
CertID string `json:"certID"`
506+
}
507+
508+
// UploadCert 上传ssl证书
509+
func (m *CdnManager) UploadCert(name, commonName, pri, ca string) (resp UploadCertResp, err error) {
510+
reqBody := UploadCertReq{
511+
Name: name,
512+
CommonName: commonName,
513+
Pri: pri,
514+
Ca: ca,
515+
}
516+
urlStr := fmt.Sprintf("%s/sslcert", FusionHost)
517+
reqData, _ := json.Marshal(reqBody)
518+
req, reqErr := http.NewRequest("POST", urlStr, bytes.NewReader(reqData))
519+
if reqErr != nil {
520+
err = reqErr
521+
return
522+
}
523+
accessToken, signErr := m.mac.SignRequest(req)
524+
if signErr != nil {
525+
err = signErr
526+
return
527+
}
528+
req.Header.Add("Authorization", "QBox "+accessToken)
529+
req.Header.Add("Content-Type", "application/json")
530+
httpResp, respErr := http.DefaultClient.Do(req)
531+
if respErr != nil {
532+
err = respErr
533+
return
534+
}
535+
defer httpResp.Body.Close()
536+
resData, ioErr := ioutil.ReadAll(httpResp.Body)
537+
if ioErr != nil {
538+
err = ioErr
539+
return
540+
}
541+
umErr := json.Unmarshal(resData, &resp)
542+
if umErr != nil {
543+
err = umErr
544+
return
545+
}
546+
return
547+
}
548+
549+
// DeleteCert 删除ssl证书
550+
func (m *CdnManager) DeleteCert(certID string) (err error) {
551+
urlStr := fmt.Sprintf("%s/sslcert/%s", FusionHost, certID)
552+
req, reqErr := http.NewRequest("DELETE", urlStr, nil)
553+
if reqErr != nil {
554+
err = reqErr
555+
return
556+
}
557+
accessToken, signErr := m.mac.SignRequest(req)
558+
if signErr != nil {
559+
err = signErr
560+
return
561+
}
562+
req.Header.Add("Authorization", "QBox "+accessToken)
563+
req.Header.Add("Content-Type", "application/json")
564+
resp, respErr := http.DefaultClient.Do(req)
565+
if respErr != nil {
566+
err = respErr
567+
return
568+
}
569+
defer resp.Body.Close()
570+
if resp.StatusCode != http.StatusOK {
571+
err = fmt.Errorf("unexpected status code: %d", resp.StatusCode)
572+
return
573+
}
574+
return
575+
}

0 commit comments

Comments
 (0)