mirror of https://github.com/Xhofe/alist
31 lines
735 B
Go
31 lines
735 B
Go
package _123Link
|
|
|
|
import (
|
|
"crypto/md5"
|
|
"fmt"
|
|
"math/rand"
|
|
"net/url"
|
|
"time"
|
|
)
|
|
|
|
func SignURL(originURL, privateKey string, uid uint64, validDuration time.Duration) (newURL string, err error) {
|
|
if privateKey == "" {
|
|
return originURL, nil
|
|
}
|
|
var (
|
|
ts = time.Now().Add(validDuration).Unix() // 有效时间戳
|
|
rInt = rand.Int() // 随机正整数
|
|
objURL *url.URL
|
|
)
|
|
objURL, err = url.Parse(originURL)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
authKey := fmt.Sprintf("%d-%d-%d-%x", ts, rInt, uid, md5.Sum([]byte(fmt.Sprintf("%s-%d-%d-%d-%s",
|
|
objURL.Path, ts, rInt, uid, privateKey))))
|
|
v := objURL.Query()
|
|
v.Add("auth_key", authKey)
|
|
objURL.RawQuery = v.Encode()
|
|
return objURL.String(), nil
|
|
}
|