@@ -10,7 +10,10 @@ use axum::{
1010 http:: { HeaderMap , StatusCode } ,
1111 response:: IntoResponse ,
1212} ;
13- use base64:: { Engine as _, engine:: { DecodePaddingMode , GeneralPurpose , GeneralPurposeConfig , general_purpose} } ;
13+ use base64:: {
14+ Engine as _,
15+ engine:: { DecodePaddingMode , GeneralPurpose , GeneralPurposeConfig , general_purpose} ,
16+ } ;
1417use ed25519_dalek:: { Signature as Ed25519Signature , Verifier as _, VerifyingKey } ;
1518use forge_core:: CircuitBreakerClient ;
1619use forge_core:: function:: JobDispatch ;
@@ -382,12 +385,12 @@ fn validate_standard_webhooks(
382385 Err ( _) => return false ,
383386 } ;
384387
385- // Build the signed content: "{id}\n {timestamp}\n {body}"
388+ // Build the signed content per Standard Webhooks spec : "{id}. {timestamp}. {body}"
386389 let mut signed = Vec :: with_capacity ( msg_id. len ( ) + msg_timestamp. len ( ) + body. len ( ) + 2 ) ;
387390 signed. extend_from_slice ( msg_id. as_bytes ( ) ) ;
388- signed. push ( b'\n ' ) ;
391+ signed. push ( b'. ' ) ;
389392 signed. extend_from_slice ( msg_timestamp. as_bytes ( ) ) ;
390- signed. push ( b'\n ' ) ;
393+ signed. push ( b'. ' ) ;
391394 signed. extend_from_slice ( body) ;
392395
393396 let mut mac =
@@ -805,9 +808,9 @@ mod tests {
805808
806809 let mut signed = Vec :: new ( ) ;
807810 signed. extend_from_slice ( msg_id. as_bytes ( ) ) ;
808- signed. push ( b'\n ' ) ;
811+ signed. push ( b'. ' ) ;
809812 signed. extend_from_slice ( msg_timestamp. as_bytes ( ) ) ;
810- signed. push ( b'\n ' ) ;
813+ signed. push ( b'. ' ) ;
811814 signed. extend_from_slice ( body) ;
812815
813816 let mut mac = Hmac :: < Sha256 > :: new_from_slice ( raw_key) . unwrap ( ) ;
0 commit comments