fix(events,github): fixes signature validation by using raw req body

Adds raw body information (body as buffer, encoding)
to `RequestDetails` to support more request validation
use cases.

Additionally, uses the raw body to retrieve the transmitted
JSON string unparsed/raw to correctly validate the signature.

Previously, we re-stringified the parsed JSON payload
which could lead to different JSON strings.
Those differences can lead to the rejection of requests
due to a mismatch in expected signature.

Fixes: #26709
Relates-to: PR #26884
Co-authored-by: Christopher Diaz <cdiaz@rvohealth.com>
Signed-off-by: Patrick Jungermann <Patrick.Jungermann@gmail.com>
This commit is contained in:
Patrick Jungermann
2024-10-14 19:52:54 +02:00
parent b1dbdddc87
commit 9816f510dc
15 changed files with 293 additions and 46 deletions
@@ -15,6 +15,8 @@
*/
/**
* View on an incoming request that has to be validated.
*
* @public
*/
export interface RequestDetails {
@@ -26,4 +28,18 @@ export interface RequestDetails {
* Key-value pairs of header names and values. Header names are lower-cased.
*/
headers: Record<string, string | string[] | undefined>;
/**
* Raw request details.
*/
raw: {
/**
* Raw request body (buffer).
*/
body: Buffer;
/**
* Encoding of the raw request body.
* Can be used to decode the raw request body like `raw.body.toString(raw.encoding)`.
*/
encoding: BufferEncoding;
};
}