cdn.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package service
  2. import (
  3. "context"
  4. "encoding/json"
  5. "fmt"
  6. v1 "github.com/go-nunu/nunu-layout-advanced/api/v1"
  7. "github.com/spf13/viper"
  8. )
  9. type CdnService interface {
  10. GetToken(ctx context.Context) (string, error)
  11. }
  12. func NewCdnService(
  13. service *Service,
  14. conf *viper.Viper,
  15. request RequestService,
  16. ) CdnService {
  17. return &cdnService{
  18. Service: service,
  19. Url: conf.GetString("flexCdn.Url"),
  20. AccessKeyID: conf.GetString("flexCdn.AccessKeyID"),
  21. AccessKeySecret: conf.GetString("flexCdn.AccessKeySecret"),
  22. request: request,
  23. }
  24. }
  25. type cdnService struct {
  26. *Service
  27. Url string
  28. AccessKeyID string
  29. AccessKeySecret string
  30. request RequestService
  31. }
  32. func (s *cdnService) GetToken(ctx context.Context) (string, error) {
  33. formData := map[string]interface{}{
  34. "type": "admin",
  35. "accessKeyId": s.AccessKeyID,
  36. "accessKey": s.AccessKeySecret,
  37. }
  38. apiUrl := s.Url + "APIAccessTokenService/getAPIAccessToken"
  39. resBody, err := s.request.Request(ctx, formData, apiUrl, "\"X-Cloud-Access-Token\"", "")
  40. if err != nil {
  41. return "", err
  42. }
  43. var res v1.GeneralResponse[v1.FlexCdnTokenResponse]
  44. if err := json.Unmarshal(resBody, &res); err != nil {
  45. return "", fmt.Errorf("反序列化响应 JSON 失败 (内容: %s): %w", string(resBody), err)
  46. }
  47. if res.Code != 200 {
  48. return "", fmt.Errorf("API 错误: code %d, msg '%s'", res.Code, res.Message)
  49. }
  50. return res.Data.Token, nil
  51. }