Add TO Go Whole-Content-SHA512 MIC header Adds Message Integrity Check header needed by ORT.
Fixes TC-513 Project: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/commit/bd0e6a32 Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/tree/bd0e6a32 Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/diff/bd0e6a32 Branch: refs/heads/master Commit: bd0e6a32d6a528556468990032996fed6d46eb4e Parents: cb138de Author: Robert Butts <robert.o.bu...@gmail.com> Authored: Sat Aug 12 13:00:55 2017 -0600 Committer: Dewayne Richardson <dewr...@apache.org> Committed: Mon Aug 14 13:21:16 2017 -0600 ---------------------------------------------------------------------- traffic_ops/traffic_ops_golang/wrappers.go | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/bd0e6a32/traffic_ops/traffic_ops_golang/wrappers.go ---------------------------------------------------------------------- diff --git a/traffic_ops/traffic_ops_golang/wrappers.go b/traffic_ops/traffic_ops_golang/wrappers.go index 66af5d9..9969777 100644 --- a/traffic_ops/traffic_ops_golang/wrappers.go +++ b/traffic_ops/traffic_ops_golang/wrappers.go @@ -20,7 +20,9 @@ package main */ import ( + "crypto/sha512" "database/sql" + "encoding/base64" "fmt" "github.com/apache/incubator-trafficcontrol/traffic_monitor_golang/common/log" "github.com/apache/incubator-trafficcontrol/traffic_ops/tocookie" @@ -37,7 +39,11 @@ func wrapHeaders(h RegexHandlerFunc) RegexHandlerFunc { w.Header().Set("Access-Control-Allow-Methods", "POST,GET,OPTIONS,PUT,DELETE") w.Header().Set("Access-Control-Allow-Origin", "*") w.Header().Set("X-Server-Name", ServerName) + iw := &BodyInterceptor{w: w} + w = iw h(w, r, p) + sha := sha512.Sum512(iw.body) + w.Header().Set("Whole-Content-SHA512", base64.StdEncoding.EncodeToString(sha[:])) } } @@ -136,3 +142,22 @@ func (i *Interceptor) Write(b []byte) (int, error) { func (i *Interceptor) Header() http.Header { return i.w.Header() } + +type BodyInterceptor struct { + w http.ResponseWriter + body []byte +} + +func (i *BodyInterceptor) WriteHeader(rc int) { + i.w.WriteHeader(rc) +} + +func (i *BodyInterceptor) Write(b []byte) (int, error) { + i.body = append(i.body, b...) + wi, werr := i.w.Write(b) + return wi, werr +} + +func (i *BodyInterceptor) Header() http.Header { + return i.w.Header() +}