Skip to content

Commit 7d50007

Browse files
Merge pull request #368 from MateSaary/OSD-27752
Add request unwrapping to interceptor
2 parents 959ce14 + 287b892 commit 7d50007

File tree

1 file changed

+26
-3
lines changed

1 file changed

+26
-3
lines changed

interceptor/pkg/interceptor/pdinterceptor.go

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,15 +90,38 @@ func (pdi *PagerDutyInterceptor) executeInterceptor(r *http.Request) ([]byte, er
9090
}
9191
r.Body = io.NopCloser(bytes.NewReader(body.Bytes()))
9292

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+
93114
var ireq triggersv1.InterceptorRequest
94115

95116
// 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)
98121

99122
token, _ := os.LookupEnv("PD_SIGNATURE")
100123

101-
err := webhookv3.VerifySignature(r, token)
124+
err = webhookv3.VerifySignature(extractedRequest, token)
102125
if err != nil {
103126
return nil, badRequest(fmt.Errorf("failed to verify signature: %w", err))
104127
}

0 commit comments

Comments
 (0)