123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- package avatar
- import (
- "context"
- "crypto/hmac"
- "crypto/sha1"
- "encoding/base64"
- "encoding/json"
- "fmt"
- "github.com/suyuan32/simple-admin-common/msg/errormsg"
- "time"
- "wechat-api/internal/svc"
- "wechat-api/internal/types"
- "github.com/zeromicro/go-zero/core/logx"
- )
- type GetSignatureResponseLogic struct {
- logx.Logger
- ctx context.Context
- svcCtx *svc.ServiceContext
- }
- func NewGetSignatureResponseLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetSignatureResponseLogic {
- return &GetSignatureResponseLogic{
- Logger: logx.WithContext(ctx),
- ctx: ctx,
- svcCtx: svcCtx}
- }
- func (l *GetSignatureResponseLogic) GetSignatureResponse() (resp *types.AvatarSignatureResp, err error) {
- userId := l.ctx.Value("userId").(uint64)
- helper := NewMpUploadOssHelper(l.svcCtx.Config.Aliyun.ACCESS_KEY_ID, l.svcCtx.Config.Aliyun.ACCESS_KEY_SECRET, 1, 10)
- params := helper.CreateUploadParams()
- OSSAccessKeyId := params["OSSAccessKeyId"]
- policy := params["policy"]
- signature := params["signature"]
- key := fmt.Sprintf("mini_program/qingmasiyuai/avatar/%d.jpg", userId)
- return &types.AvatarSignatureResp{
- BaseDataInfo: types.BaseDataInfo{
- Code: 0,
- Msg: errormsg.Success,
- },
- Data: types.SignatureInfo{
- Key: &key,
- OSSAccessKeyId: &OSSAccessKeyId,
- Policy: &policy,
- Signature: &signature,
- },
- }, nil
- }
- type MpUploadOssHelper struct {
- AccessKeyId string
- AccessKeySecret string
- Timeout int
- MaxSize int
- }
- type Policy struct {
- Expiration string `json:"expiration"`
- Conditions [][]interface{} `json:"conditions"`
- }
- func NewMpUploadOssHelper(accessKeyId, accessKeySecret string, timeout, maxSize int) *MpUploadOssHelper {
- if timeout == 0 {
- timeout = 1
- }
- if maxSize == 0 {
- maxSize = 10
- }
- return &MpUploadOssHelper{
- AccessKeyId: accessKeyId,
- AccessKeySecret: accessKeySecret,
- Timeout: timeout,
- MaxSize: maxSize,
- }
- }
- func (helper *MpUploadOssHelper) CreateUploadParams() map[string]string {
- policy := helper.getPolicyBase64()
- signature := helper.signature(policy)
- return map[string]string{
- "OSSAccessKeyId": helper.AccessKeyId,
- "policy": policy,
- "signature": signature,
- }
- }
- func (helper *MpUploadOssHelper) getPolicyBase64() string {
- expiration := time.Now().Add(time.Duration(helper.Timeout) * time.Hour).UTC().Format(time.RFC3339)
- policy := Policy{
- Expiration: expiration,
- Conditions: [][]interface{}{
- {"content-length-range", 0, helper.MaxSize * 1024 * 1024},
- },
- }
- policyBytes, _ := json.Marshal(policy)
- return base64.StdEncoding.EncodeToString(policyBytes)
- }
- func (helper *MpUploadOssHelper) signature(policy string) string {
- h := hmac.New(sha1.New, []byte(helper.AccessKeySecret))
- h.Write([]byte(policy))
- return base64.StdEncoding.EncodeToString(h.Sum(nil))
- }
|