feat: 🤪 cdn配置
parent
791c4fdd82
commit
fcf1c23b6f
@ -0,0 +1,104 @@
|
|||||||
|
package upyun
|
||||||
|
|
||||||
|
import (
|
||||||
|
"crypto/hmac"
|
||||||
|
"crypto/md5"
|
||||||
|
"crypto/sha1"
|
||||||
|
"encoding/base64"
|
||||||
|
"encoding/hex"
|
||||||
|
"fmt"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
bucket = "pychr"
|
||||||
|
op = "root"
|
||||||
|
password = "MRnhPT4VlGXAuDEWe4l7JTxrdxbXjZFE"
|
||||||
|
token = "2cb96a90-b787-43a4-91ec-54d796c069da"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
effectiveDuration = time.Minute * 60
|
||||||
|
)
|
||||||
|
|
||||||
|
type RestAPIToken struct {
|
||||||
|
Authorization string
|
||||||
|
XUpYunUriPrefix string
|
||||||
|
XUpYunExpire int64
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetUpYunRestAPIUploadToken(method string) (r RestAPIToken) {
|
||||||
|
now := time.Now()
|
||||||
|
expire := now.Add(effectiveDuration).Unix()
|
||||||
|
|
||||||
|
elem := FilterNoneString([]string{"PUT", "/" + bucket, strconv.FormatInt(expire, 10)})
|
||||||
|
p := strings.Join(elem, "&")
|
||||||
|
key := []byte(StringMD5(password))
|
||||||
|
mac := hmac.New(sha1.New, key)
|
||||||
|
mac.Write([]byte(p))
|
||||||
|
hash := mac.Sum(nil)
|
||||||
|
sign := base64.StdEncoding.EncodeToString(hash)
|
||||||
|
authorization := "UPYUN " + op + ":" + sign
|
||||||
|
|
||||||
|
r.XUpYunExpire = expire
|
||||||
|
r.Authorization = authorization
|
||||||
|
r.XUpYunUriPrefix = "/" + bucket
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
type FormAPIToken struct {
|
||||||
|
Bucket string
|
||||||
|
Method string
|
||||||
|
Authorization string
|
||||||
|
XUpYunExpire int64
|
||||||
|
Policy string
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetUpYunFormAPIToken(method, saveKey string) (r FormAPIToken, err error) {
|
||||||
|
method = strings.ToUpper(method)
|
||||||
|
now := time.Now()
|
||||||
|
expiration := now.Add(effectiveDuration).Unix()
|
||||||
|
|
||||||
|
paramsFormat := `{"bucket": "%v", "expiration": %v, "save-key": "%v"}`
|
||||||
|
params := fmt.Sprintf(paramsFormat, bucket, expiration, saveKey)
|
||||||
|
|
||||||
|
policy := StringBase64(params)
|
||||||
|
|
||||||
|
elem := FilterNoneString([]string{method, "/" + bucket, policy})
|
||||||
|
p := strings.Join(elem, "&")
|
||||||
|
key := []byte(StringMD5(password))
|
||||||
|
mac := hmac.New(sha1.New, key)
|
||||||
|
mac.Write([]byte(p))
|
||||||
|
hash := mac.Sum(nil)
|
||||||
|
sign := base64.StdEncoding.EncodeToString(hash)
|
||||||
|
authorization := "UPYUN " + op + ":" + sign
|
||||||
|
|
||||||
|
r.Bucket = bucket
|
||||||
|
r.Method = method
|
||||||
|
r.XUpYunExpire = expiration
|
||||||
|
r.Authorization = authorization
|
||||||
|
r.Policy = policy
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func FilterNoneString(list []string) (r []string) {
|
||||||
|
for _, t := range list {
|
||||||
|
if t != "" {
|
||||||
|
r = append(r, t)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 生成字符串MD5
|
||||||
|
func StringMD5(s string) string {
|
||||||
|
h := md5.New()
|
||||||
|
h.Write([]byte(s))
|
||||||
|
return hex.EncodeToString(h.Sum(nil))
|
||||||
|
}
|
||||||
|
|
||||||
|
func StringBase64(s string) (r string) {
|
||||||
|
return base64.StdEncoding.EncodeToString([]byte(s))
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue