Feat: API call to slave node will carry meta data in headers

pull/1040/head
HFO4 4 years ago
parent 6610064e24
commit 8c2affaa12

@ -61,15 +61,17 @@ func CheckRequest(instance Auth, r *http.Request) error {
return instance.Check(getSignContent(r), sign[0]) return instance.Check(getSignContent(r), sign[0])
} }
// getSignContent 签名请求path、正文、以`X-`开头的header // getSignContent 签名请求 path、正文、以`X-`开头的 Header. 如果 Header 中包含 `X-Policy`
// 返回待签名/验证的字符串 // 则不对正文签名。返回待签名/验证的字符串
func getSignContent(r *http.Request) (rawSignString string) { func getSignContent(r *http.Request) (rawSignString string) {
// 读取所有body正文 // 读取所有body正文
var body = []byte{} var body = []byte{}
if r.Body != nil { if _, ok := r.Header["X-Policy"]; !ok {
body, _ = ioutil.ReadAll(r.Body) if r.Body != nil {
_ = r.Body.Close() body, _ = ioutil.ReadAll(r.Body)
r.Body = ioutil.NopCloser(bytes.NewReader(body)) _ = r.Body.Close()
r.Body = ioutil.NopCloser(bytes.NewReader(body))
}
} }
// 决定要签名的header // 决定要签名的header

@ -49,6 +49,7 @@ func (handler Driver) List(ctx context.Context, path string, recursive bool) ([]
handler.getAPIUrl("list"), handler.getAPIUrl("list"),
bodyReader, bodyReader,
request.WithCredential(handler.AuthInstance, int64(signTTL)), request.WithCredential(handler.AuthInstance, int64(signTTL)),
request.WithMasterMeta(),
).CheckHTTPResponse(200).DecodeResponse() ).CheckHTTPResponse(200).DecodeResponse()
if err != nil { if err != nil {
return res, err return res, err
@ -116,6 +117,7 @@ func (handler Driver) Get(ctx context.Context, path string) (response.RSCloser,
nil, nil,
request.WithContext(ctx), request.WithContext(ctx),
request.WithTimeout(time.Duration(0)), request.WithTimeout(time.Duration(0)),
request.WithMasterMeta(),
).CheckHTTPResponse(200).GetRSCloser() ).CheckHTTPResponse(200).GetRSCloser()
if err != nil { if err != nil {
return nil, err return nil, err
@ -175,6 +177,7 @@ func (handler Driver) Put(ctx context.Context, file io.ReadCloser, dst string, s
}), }),
request.WithContentLength(int64(size)), request.WithContentLength(int64(size)),
request.WithTimeout(time.Duration(0)), request.WithTimeout(time.Duration(0)),
request.WithMasterMeta(),
).CheckHTTPResponse(200).DecodeResponse() ).CheckHTTPResponse(200).DecodeResponse()
if err != nil { if err != nil {
return err return err
@ -206,6 +209,7 @@ func (handler Driver) Delete(ctx context.Context, files []string) ([]string, err
handler.getAPIUrl("delete"), handler.getAPIUrl("delete"),
bodyReader, bodyReader,
request.WithCredential(handler.AuthInstance, int64(signTTL)), request.WithCredential(handler.AuthInstance, int64(signTTL)),
request.WithMasterMeta(),
).CheckHTTPResponse(200).GetResponse() ).CheckHTTPResponse(200).GetResponse()
if err != nil { if err != nil {
return files, err return files, err

Loading…
Cancel
Save