@@ -305,3 +305,224 @@ func postRequest(mac *auth.Credentials, path string, body interface{}) (resData
305
305
306
306
return
307
307
}
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