|
|
package apiThird
|
|
|
|
|
|
import (
|
|
|
"Open_IM/pkg/common/config"
|
|
|
"Open_IM/pkg/common/constant"
|
|
|
log2 "Open_IM/pkg/common/log"
|
|
|
"github.com/gin-gonic/gin"
|
|
|
sts "github.com/tencentyun/qcloud-cos-sts-sdk/go"
|
|
|
"net/http"
|
|
|
"time"
|
|
|
)
|
|
|
|
|
|
type paramsTencentCloudStorageCredential struct {
|
|
|
Token string `json:"token"`
|
|
|
OperationID string `json:"operationID"`
|
|
|
}
|
|
|
|
|
|
var lastTime int64
|
|
|
var lastRes *sts.CredentialResult
|
|
|
|
|
|
func TencentCloudStorageCredential(c *gin.Context) {
|
|
|
params := paramsTencentCloudStorageCredential{}
|
|
|
if err := c.BindJSON(¶ms); err != nil {
|
|
|
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "Parameter parsing error,please check the parameters and request service again"})
|
|
|
return
|
|
|
}
|
|
|
|
|
|
log2.Info(params.Token, params.OperationID, "api TencentUpLoadCredential call start...")
|
|
|
|
|
|
if time.Now().Unix()-lastTime < 10 && lastRes != nil {
|
|
|
c.JSON(http.StatusOK, gin.H{
|
|
|
"errCode": 0,
|
|
|
"errMsg": "",
|
|
|
"region": config.Config.Credential.Tencent.Region,
|
|
|
"bucket": config.Config.Credential.Tencent.Bucket,
|
|
|
"data": lastRes,
|
|
|
})
|
|
|
return
|
|
|
}
|
|
|
|
|
|
lastTime = time.Now().Unix()
|
|
|
|
|
|
cli := sts.NewClient(
|
|
|
config.Config.Credential.Tencent.SecretID,
|
|
|
config.Config.Credential.Tencent.SecretKey,
|
|
|
nil,
|
|
|
)
|
|
|
log2.Info(c.Request.Header.Get("token"), c.PostForm("optionID"), "api TencentUpLoadCredential sts.NewClient cli = %v", cli)
|
|
|
|
|
|
opt := &sts.CredentialOptions{
|
|
|
DurationSeconds: int64(time.Hour.Seconds()),
|
|
|
Region: config.Config.Credential.Tencent.Region,
|
|
|
Policy: &sts.CredentialPolicy{
|
|
|
Statement: []sts.CredentialPolicyStatement{
|
|
|
{
|
|
|
Action: []string{
|
|
|
"name/cos:PostObject",
|
|
|
"name/cos:PutObject",
|
|
|
},
|
|
|
Effect: "allow",
|
|
|
Resource: []string{
|
|
|
"qcs::cos:" + config.Config.Credential.Tencent.Region + ":uid/" + config.Config.Credential.Tencent.AppID + ":" + config.Config.Credential.Tencent.Bucket + "/*",
|
|
|
},
|
|
|
},
|
|
|
},
|
|
|
},
|
|
|
}
|
|
|
log2.Info(c.Request.Header.Get("token"), c.PostForm("optionID"), "api TencentUpLoadCredential sts.CredentialOptions opt = %v", opt)
|
|
|
|
|
|
res, err := cli.GetCredential(opt)
|
|
|
if err != nil {
|
|
|
log2.Error(c.Request.Header.Get("token"), c.PostForm("optionID"), "api TencentUpLoadCredential cli.GetCredential err = %s", err.Error())
|
|
|
c.JSON(http.StatusOK, gin.H{
|
|
|
"errCode": constant.ErrTencentCredential.ErrCode,
|
|
|
"errMsg": err.Error(),
|
|
|
"bucket": "",
|
|
|
"region": "",
|
|
|
"data": res,
|
|
|
})
|
|
|
return
|
|
|
}
|
|
|
log2.Info(c.Request.Header.Get("token"), c.PostForm("optionID"), "api TencentUpLoadCredential cli.GetCredential success res = %v, res.Credentials = %v", res, res.Credentials)
|
|
|
|
|
|
lastRes = res
|
|
|
|
|
|
c.JSON(http.StatusOK, gin.H{
|
|
|
"errCode": 0,
|
|
|
"errMsg": "",
|
|
|
"region": config.Config.Credential.Tencent.Region,
|
|
|
"bucket": config.Config.Credential.Tencent.Bucket,
|
|
|
"data": res,
|
|
|
})
|
|
|
}
|