get_acs_response_logic.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package avatar
  2. import (
  3. "context"
  4. openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
  5. util "github.com/alibabacloud-go/tea-utils/v2/service"
  6. "github.com/alibabacloud-go/tea/tea"
  7. "github.com/suyuan32/simple-admin-common/msg/errormsg"
  8. "wechat-api/internal/svc"
  9. "wechat-api/internal/types"
  10. "github.com/zeromicro/go-zero/core/logx"
  11. sts20150401 "github.com/alibabacloud-go/sts-20150401/v2/client"
  12. )
  13. type GetAcsResponseLogic struct {
  14. logx.Logger
  15. ctx context.Context
  16. svcCtx *svc.ServiceContext
  17. }
  18. func NewGetAcsResponseLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetAcsResponseLogic {
  19. return &GetAcsResponseLogic{
  20. Logger: logx.WithContext(ctx),
  21. ctx: ctx,
  22. svcCtx: svcCtx}
  23. }
  24. func (l *GetAcsResponseLogic) GetAcsResponse() (resp *types.AvatarStsResp, err error) {
  25. client, _err := CreateClient(l.svcCtx.Config.Aliyun.ACCESS_KEY_ID, l.svcCtx.Config.Aliyun.ACCESS_KEY_SECRET, l.svcCtx.Config.Aliyun.OSS_ENDPOINT)
  26. if _err != nil {
  27. return nil, _err
  28. }
  29. assumeRoleRequest := &sts20150401.AssumeRoleRequest{
  30. RoleArn: tea.String(l.svcCtx.Config.Aliyun.OSS_ROLEARN),
  31. RoleSessionName: tea.String("mini_program"),
  32. }
  33. runtime := &util.RuntimeOptions{}
  34. r, _err := client.AssumeRoleWithOptions(assumeRoleRequest, runtime)
  35. if _err != nil {
  36. return nil, _err
  37. }
  38. return &types.AvatarStsResp{
  39. BaseDataInfo: types.BaseDataInfo{
  40. Code: 0,
  41. Msg: errormsg.Success,
  42. },
  43. Data: types.StsInfo{
  44. Expiration: r.Body.Credentials.Expiration,
  45. AccessKeyId: r.Body.Credentials.AccessKeyId,
  46. AccessKeySecret: r.Body.Credentials.AccessKeySecret,
  47. SecurityToken: r.Body.Credentials.SecurityToken,
  48. RequestId: r.Body.RequestId,
  49. },
  50. }, nil
  51. }
  52. func CreateClient(AccessKeyId string, AccessKeySecret string, Endpoint string) (_result *sts20150401.Client, _err error) {
  53. // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
  54. // 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378661.html。
  55. config := &openapi.Config{
  56. // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
  57. AccessKeyId: tea.String(AccessKeyId),
  58. // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
  59. AccessKeySecret: tea.String(AccessKeySecret),
  60. }
  61. // Endpoint 请参考 https://api.aliyun.com/product/Sts
  62. config.Endpoint = tea.String(Endpoint)
  63. _result = &sts20150401.Client{}
  64. _result, _err = sts20150401.NewClient(config)
  65. return _result, _err
  66. }