@@ -90,15 +90,38 @@ func (pdi *PagerDutyInterceptor) executeInterceptor(r *http.Request) ([]byte, er
90
90
}
91
91
r .Body = io .NopCloser (bytes .NewReader (body .Bytes ()))
92
92
93
+ // originalReq is the original request that was sent to the interceptor,
94
+ // due to be unwrapped into a new header and body for signature verification.
95
+ var originalReq struct {
96
+ Body string `json:"body"`
97
+ Header map [string ][]string `json:"header"`
98
+ }
99
+ if err := json .Unmarshal (body .Bytes (), & originalReq ); err != nil {
100
+ return nil , badRequest (fmt .Errorf ("failed to parse request body: %w" , err ))
101
+ }
102
+
103
+ extractedRequest , err := http .NewRequestWithContext (ctx , r .Method , r .URL .String (), bytes .NewReader ([]byte (originalReq .Body )))
104
+ if err != nil {
105
+ return nil , internal (fmt .Errorf ("malformed body/header in unwrapped request: %w" , err ))
106
+ }
107
+
108
+ for k , v := range originalReq .Header {
109
+ for _ , v := range v {
110
+ extractedRequest .Header .Add (k , v )
111
+ }
112
+ }
113
+
93
114
var ireq triggersv1.InterceptorRequest
94
115
95
116
// logging request
96
- pdi .Logger .Info ("Request header: %v" , r .Header )
97
- pdi .Logger .Info ("Request body: " , body .String ())
117
+ pdi .Logger .Info ("Wrapped Request header: %v" , r .Header )
118
+ pdi .Logger .Info ("Wrapped Request body: " , body .String ())
119
+ pdi .Logger .Info ("Unwrapped Request header: %v" , extractedRequest .Header )
120
+ pdi .Logger .Info ("Unwrapped Request body: " , originalReq .Body )
98
121
99
122
token , _ := os .LookupEnv ("PD_SIGNATURE" )
100
123
101
- err : = webhookv3 .VerifySignature (r , token )
124
+ err = webhookv3 .VerifySignature (extractedRequest , token )
102
125
if err != nil {
103
126
return nil , badRequest (fmt .Errorf ("failed to verify signature: %w" , err ))
104
127
}
0 commit comments