Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
alist-org
GitHub Repository: alist-org/alist
Path: blob/main/drivers/123_open/sign.go
1986 views
1
package _123Open
2
3
import (
4
"crypto/md5"
5
"fmt"
6
"math/rand"
7
"net/url"
8
"time"
9
)
10
11
func SignURL(originURL, privateKey string, uid uint64, validDuration time.Duration) (string, error) {
12
if privateKey == "" {
13
return originURL, nil
14
}
15
parsed, err := url.Parse(originURL)
16
if err != nil {
17
return "", err
18
}
19
ts := time.Now().Add(validDuration).Unix()
20
randInt := rand.Int()
21
signature := fmt.Sprintf("%d-%d-%d-%x", ts, randInt, uid, md5.Sum([]byte(fmt.Sprintf("%s-%d-%d-%d-%s",
22
parsed.Path, ts, randInt, uid, privateKey))))
23
query := parsed.Query()
24
query.Add("auth_key", signature)
25
parsed.RawQuery = query.Encode()
26
return parsed.String(), nil
27
}
28
29