This commit is contained in:
2023-07-06 11:01:47 +08:00
parent 2944d42281
commit 1c108f8a1f
27 changed files with 1034 additions and 222 deletions
+69
View File
@@ -0,0 +1,69 @@
package aliyun
import (
"crypto/hmac"
"crypto/sha1"
"encoding/base64"
"encoding/json"
"hospital-admin-api/config"
"strings"
"time"
)
// GetOssSignResponse 获取oss签名返回值
type GetOssSignResponse struct {
AccessId string `json:"access_id"` // 主键id
Host string `json:"host"`
Policy string `json:"policy"`
Signature string `json:"signature"`
Expire int64 `json:"expire"`
Callback string `json:"callback"`
Dir string `json:"dir"`
}
// GetOssSign 获取oss签名
func GetOssSign(dir string) (*GetOssSignResponse, error) {
// Endpoint := config.C.Oss.OssEndpoint
// accessKey := config.C.Oss.OssAccessKey
// accessSecret := config.C.Oss.OssAccessKeySecret
// client, err := oss.New(Endpoint, accessKey, accessSecret)
// if err != nil {
// return nil, err
// }
//
// bucket, err := client.Bucket(viper.GetString("aliyun.Bucket"))
// if err != nil {
// return "", err
// }
now := time.Now()
expire := 30 // 设置该policy超时时间是30s,即这个policy过了这个有效时间,将不能访问。
end := now.Add(time.Second * time.Duration(expire))
expiration := strings.Replace(end.Format("2006-01-02T15:04:05.000Z"), "+00:00", ".000Z", 1)
start := []interface{}{"starts-with", "$key", dir}
conditions := [][]interface{}{start}
arr := map[string]interface{}{
"expiration": expiration,
"conditions": conditions,
}
policy, _ := json.Marshal(arr)
base64Policy := base64.StdEncoding.EncodeToString(policy)
stringToSign := base64Policy
h := hmac.New(sha1.New, []byte(config.C.Oss.OssAccessKeySecret))
h.Write([]byte(stringToSign))
signature := base64.StdEncoding.EncodeToString(h.Sum(nil))
response := &GetOssSignResponse{
AccessId: config.C.Oss.OssAccessKey,
Host: config.C.Oss.OssCustomDomainName,
Policy: base64Policy,
Signature: signature,
Expire: end.Unix(),
Callback: "",
Dir: dir,
}
return response, nil
}
+36
View File
@@ -0,0 +1,36 @@
package ca
import (
"crypto/hmac"
"crypto/sha1"
"encoding/hex"
"hospital-admin-api/config"
"sort"
"strings"
)
// GenerateSignature 生成签名
func GenerateSignature(paramMap map[string]string) string {
keys := make([]string, 0, len(paramMap))
for k := range paramMap {
if k == "pdfFile" {
continue
}
keys = append(keys, k)
}
sort.Strings(keys)
var toSign string
for _, k := range keys {
v := paramMap[k]
toSign += v + "&"
}
toSign = strings.TrimSuffix(toSign, "&")
// Step 3: Calculate HMAC-SHA1 and convert to hex format
h := hmac.New(sha1.New, []byte(config.C.CaOnline.CaOnlineAppSecret))
h.Write([]byte(toSign))
signature := hex.EncodeToString(h.Sum(nil))
return signature
}
+5
View File
@@ -0,0 +1,5 @@
package ca
// func GenerateSi1gnature(paramMap map[string]string, secret string) string {
//
// }