1package glacier 2 3import ( 4 "encoding/hex" 5 "reflect" 6 7 "github.com/aws/aws-sdk-go/aws/awsutil" 8 "github.com/aws/aws-sdk-go/aws/request" 9) 10 11var ( 12 defaultAccountID = "-" 13) 14 15func init() { 16 initRequest = func(r *request.Request) { 17 r.Handlers.Validate.PushFront(addAccountID) 18 r.Handlers.Validate.PushFront(copyParams) // this happens first 19 r.Handlers.Build.PushBack(addChecksum) 20 r.Handlers.Build.PushBack(addAPIVersion) 21 } 22} 23 24func copyParams(r *request.Request) { 25 r.Params = awsutil.CopyOf(r.Params) 26} 27 28func addAccountID(r *request.Request) { 29 if !r.ParamsFilled() { 30 return 31 } 32 33 v := reflect.Indirect(reflect.ValueOf(r.Params)) 34 if f := v.FieldByName("AccountId"); f.IsNil() { 35 f.Set(reflect.ValueOf(&defaultAccountID)) 36 } 37} 38 39func addChecksum(r *request.Request) { 40 if r.Body == nil || r.HTTPRequest.Header.Get("X-Amz-Sha256-Tree-Hash") != "" { 41 return 42 } 43 44 h := ComputeHashes(r.Body) 45 hstr := hex.EncodeToString(h.TreeHash) 46 r.HTTPRequest.Header.Set("X-Amz-Sha256-Tree-Hash", hstr) 47 48 hLstr := hex.EncodeToString(h.LinearHash) 49 r.HTTPRequest.Header.Set("X-Amz-Content-Sha256", hLstr) 50} 51 52func addAPIVersion(r *request.Request) { 53 r.HTTPRequest.Header.Set("X-Amz-Glacier-Version", r.ClientInfo.APIVersion) 54} 55