forked from codeskyblue/gobuild
/
rs_api.go
80 lines (61 loc) · 2.17 KB
/
rs_api.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package rs
import (
"net/http"
"encoding/base64"
"github.com/qiniu/rpc"
"github.com/qiniu/api/auth/digest"
. "github.com/qiniu/api/conf"
)
// ----------------------------------------------------------
type Client struct {
Conn rpc.Client
}
func New(mac *digest.Mac) Client {
t := digest.NewTransport(mac, nil)
client := &http.Client{Transport: t}
return Client{rpc.Client{client}}
}
func NewEx(t http.RoundTripper) Client {
client := &http.Client{Transport: t}
return Client{rpc.Client{client}}
}
// ----------------------------------------------------------
// @gist entry
type Entry struct {
Hash string `json:"hash"`
Fsize int64 `json:"fsize"`
PutTime int64 `json:"putTime"`
MimeType string `json:"mimeType"`
Customer string `json:"customer"`
}
// @endgist
func (rs Client) Stat(l rpc.Logger, bucket, key string) (entry Entry, err error) {
err = rs.Conn.Call(l, &entry, RS_HOST + URIStat(bucket, key))
return
}
func (rs Client) Delete(l rpc.Logger, bucket, key string) (err error) {
return rs.Conn.Call(l, nil, RS_HOST + URIDelete(bucket, key))
}
func (rs Client) Move(l rpc.Logger, bucketSrc, keySrc, bucketDest, keyDest string) (err error) {
return rs.Conn.Call(l, nil, RS_HOST + URIMove(bucketSrc, keySrc, bucketDest, keyDest))
}
func (rs Client) Copy(l rpc.Logger, bucketSrc, keySrc, bucketDest, keyDest string) (err error) {
return rs.Conn.Call(l, nil, RS_HOST + URICopy(bucketSrc, keySrc, bucketDest, keyDest))
}
// ----------------------------------------------------------
func encodeURI(uri string) string {
return base64.URLEncoding.EncodeToString([]byte(uri))
}
func URIDelete(bucket, key string) string {
return "/delete/" + encodeURI(bucket + ":" + key)
}
func URIStat(bucket, key string) string {
return "/stat/" + encodeURI(bucket + ":" + key)
}
func URICopy(bucketSrc, keySrc, bucketDest, keyDest string) string {
return "/copy/" + encodeURI(bucketSrc + ":" + keySrc) + "/" + encodeURI(bucketDest + ":" + keyDest)
}
func URIMove(bucketSrc, keySrc, bucketDest, keyDest string) string {
return "/move/" + encodeURI(bucketSrc + ":" + keySrc) + "/" + encodeURI(bucketDest + ":" + keyDest)
}
// ----------------------------------------------------------