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()
+}

Reply via email to