@@ -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