@@ -305,3 +305,224 @@ func postRequest(mac *auth.Credentials, path string, body interface{}) (resData
305305
306306 return
307307}
308+
309+ // CertListReq 获取ssl证书列表请求内容
310+ type CertListReq struct {
311+ Marker string `json:"marker"`
312+ Limit int `json:"limit"`
313+ }
314+
315+ // CertListResp 获取ssl证书列表响应内容
316+ type CertListResp struct {
317+ Marker string `json:"marker"`
318+ Certs []struct {
319+ CertID string `json:"certid"`
320+ Name string `json:"name"`
321+ CommonName string `json:"common_name"`
322+ DNSNames []string `json:"dnsnames"`
323+ NotBefore int `json:"not_before"`
324+ NotAfter int `json:"not_after"`
325+ CreateTime int `json:"create_time"`
326+ } `json:"certs"`
327+ }
328+
329+ // GetCertList 获取ssl证书列表
330+ func (m * CdnManager ) GetCertList (marker string , limit int ) (certList CertListResp , err error ) {
331+ reqParams := fmt .Sprintf ("marker=%s&limit=%d" , marker , limit )
332+ urlStr := fmt .Sprintf ("%s/sslcert?%s" , FusionHost , reqParams )
333+ req , reqErr := http .NewRequest ("GET" , urlStr , nil )
334+ if reqErr != nil {
335+ err = reqErr
336+ return
337+ }
338+ accessToken , signErr := m .mac .SignRequest (req )
339+ if signErr != nil {
340+ err = signErr
341+ return
342+ }
343+ req .Header .Add ("Authorization" , "QBox " + accessToken )
344+ req .Header .Add ("Content-Type" , "application/x-www-form-urlencoded" )
345+ resp , respErr := http .DefaultClient .Do (req )
346+ if respErr != nil {
347+ err = respErr
348+ return
349+ }
350+ defer resp .Body .Close ()
351+ resData , ioErr := ioutil .ReadAll (resp .Body )
352+ if ioErr != nil {
353+ err = ioErr
354+ return
355+ }
356+ umErr := json .Unmarshal (resData , & certList )
357+ if umErr != nil {
358+ err = umErr
359+ return
360+ }
361+
362+ return
363+ }
364+
365+ // CertDetailResp 获取单个ssl证书响应内容
366+ type CertDetailResp struct {
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+ Pri string `json:"pri"`
373+ Ca string `json:"ca"`
374+ CreateTime int `json:"create_time"`
375+ }
376+
377+ // RealCertDetailResp 当前的api返回与官方文档有差异
378+ type RealCertDetailResp struct {
379+ CertID string `json:"certid"`
380+ Name string `json:"name"`
381+ UID int `json:"uid"`
382+ CommonName string `json:"common_name"`
383+ DNSNames []string `json:"dnsnames"`
384+ CreateTime int `json:"create_time"`
385+ NotBefore int `json:"not_before"`
386+ NotAfter int `json:"not_after"`
387+ OrderID string `json:"orderid"`
388+ ProductShortName string `json:"product_short_name"`
389+ ProductType string `json:"product_type"`
390+ CertType string `json:"cert_type"`
391+ Encrypt string `json:"encrypt"`
392+ EncryptParameter string `json:"encryptParameter"`
393+ Enable bool `json:"enable"`
394+ ChildOrderID string `json:"child_order_id"`
395+ State string `json:"state"`
396+ AutoRenew bool `json:"auto_renew"`
397+ Renewable bool `json:"renewable"`
398+ CA string `json:"ca"`
399+ }
400+
401+ // GetCertDetail 获取单个ssl证书的详细信息
402+ func (m * CdnManager ) GetCertDetail (certID string ) (certDetail CertDetailResp , err error ) {
403+ urlStr := fmt .Sprintf ("%s/sslcert/%s" , FusionHost , certID )
404+ req , reqErr := http .NewRequest ("GET" , urlStr , nil )
405+ if reqErr != nil {
406+ err = reqErr
407+ return
408+ }
409+ accessToken , signErr := m .mac .SignRequest (req )
410+ if signErr != nil {
411+ err = signErr
412+ return
413+ }
414+ req .Header .Add ("Authorization" , "QBox " + accessToken )
415+ req .Header .Add ("Content-Type" , "application/x-www-form-urlencoded" )
416+ resp , respErr := http .DefaultClient .Do (req )
417+ if respErr != nil {
418+ err = respErr
419+ return
420+ }
421+ defer resp .Body .Close ()
422+ resData , ioErr := ioutil .ReadAll (resp .Body )
423+ if ioErr != nil {
424+ err = ioErr
425+ return
426+ }
427+ var resJson = struct {
428+ Code int
429+ Error string
430+ Cert RealCertDetailResp
431+ }{}
432+ umErr := json .Unmarshal (resData , & resJson )
433+ certDetail .Ca = resJson .Cert .CA
434+ certDetail .CommonName = resJson .Cert .Name
435+ certDetail .DNSNames = resJson .Cert .DNSNames
436+ certDetail .Name = resJson .Cert .Name
437+ certDetail .NotAfter = resJson .Cert .NotAfter
438+ certDetail .NotBefore = resJson .Cert .NotBefore
439+ certDetail .CreateTime = resJson .Cert .CreateTime
440+ if umErr != nil {
441+ err = umErr
442+ return
443+ }
444+
445+ return
446+ }
447+
448+ // UploadCertReq 上传ssl证书请求内容
449+ type UploadCertReq struct {
450+ Name string `json:"name"`
451+ CommonName string `json:"common_name"`
452+ Pri string `json:"pri"`
453+ Ca string `json:"ca"`
454+ }
455+
456+ // UploadCertResp 上传ssl证书响应内容
457+ type UploadCertResp struct {
458+ CertID string `json:"certID"`
459+ }
460+
461+ // UploadCert 上传ssl证书
462+ func (m * CdnManager ) UploadCert (name , commonName , pri , ca string ) (resp UploadCertResp , err error ) {
463+ reqBody := UploadCertReq {
464+ Name : name ,
465+ CommonName : commonName ,
466+ Pri : pri ,
467+ Ca : ca ,
468+ }
469+ urlStr := fmt .Sprintf ("%s/sslcert" , FusionHost )
470+ reqData , _ := json .Marshal (reqBody )
471+ req , reqErr := http .NewRequest ("POST" , urlStr , bytes .NewReader (reqData ))
472+ if reqErr != nil {
473+ err = reqErr
474+ return
475+ }
476+ accessToken , signErr := m .mac .SignRequest (req )
477+ if signErr != nil {
478+ err = signErr
479+ return
480+ }
481+ req .Header .Add ("Authorization" , "QBox " + accessToken )
482+ req .Header .Add ("Content-Type" , "application/json" )
483+ httpResp , respErr := http .DefaultClient .Do (req )
484+ if respErr != nil {
485+ err = respErr
486+ return
487+ }
488+ defer httpResp .Body .Close ()
489+ resData , ioErr := ioutil .ReadAll (httpResp .Body )
490+ if ioErr != nil {
491+ err = ioErr
492+ return
493+ }
494+ umErr := json .Unmarshal (resData , & resp )
495+ if umErr != nil {
496+ err = umErr
497+ return
498+ }
499+ return
500+ }
501+
502+ // DeleteCert 删除ssl证书
503+ func (m * CdnManager ) DeleteCert (certID string ) (err error ) {
504+ urlStr := fmt .Sprintf ("%s/sslcert/%s" , FusionHost , certID )
505+ req , reqErr := http .NewRequest ("DELETE" , urlStr , nil )
506+ if reqErr != nil {
507+ err = reqErr
508+ return
509+ }
510+ accessToken , signErr := m .mac .SignRequest (req )
511+ if signErr != nil {
512+ err = signErr
513+ return
514+ }
515+ req .Header .Add ("Authorization" , "QBox " + accessToken )
516+ req .Header .Add ("Content-Type" , "application/json" )
517+ resp , respErr := http .DefaultClient .Do (req )
518+ if respErr != nil {
519+ err = respErr
520+ return
521+ }
522+ defer resp .Body .Close ()
523+ if resp .StatusCode != http .StatusOK {
524+ err = fmt .Errorf ("unexpected status code: %d" , resp .StatusCode )
525+ return
526+ }
527+ return
528+ }
0 commit comments