11use axum:: {
22 extract:: { Path , Request , State } ,
3- http:: HeaderMap ,
43 middleware:: Next ,
54 response:: Response ,
65} ;
@@ -14,7 +13,7 @@ pub async fn validate_headers(
1413 next : Next ,
1514) -> Result < Response , HeaderValidationError > {
1615 let headers = request. headers ( ) ;
17- let origin = determine_origin ( headers) ?;
16+ let origin = Origin :: try_from ( headers) ?;
1817 origin. validate_headers ( headers) ?;
1918 Ok ( next. run ( request) . await )
2019}
@@ -27,6 +26,7 @@ pub async fn validate_signature_middleware(
2726) -> Result < Response , HeaderValidationError > {
2827 let config = config. read ( ) . await ;
2928 let headers = request. headers ( ) . clone ( ) ;
29+ let origin = Origin :: try_from ( & headers) ?;
3030
3131 let webhook_config = config
3232 . webhooks
@@ -44,21 +44,11 @@ pub async fn validate_signature_middleware(
4444 . await
4545 . map_err ( HeaderValidationError :: AxumError ) ?;
4646
47- validator . validate_signature ( & headers, & secret, & bytes) ?;
47+ origin . validate_signature ( & headers, & secret, & bytes) ?;
4848
4949 let request = Request :: from_parts ( parts, axum:: body:: Body :: from ( bytes) ) ;
5050 Ok ( next. run ( request) . await )
5151 } else {
5252 Ok ( next. run ( request) . await )
5353 }
5454}
55-
56- fn determine_origin ( headers : & HeaderMap ) -> Result < Origin , OriginError > {
57- if headers. contains_key ( "X-GitHub-Event" ) {
58- Ok ( Origin :: GitHub )
59- } else if headers. contains_key ( "X-Gitlab-Event" ) {
60- Ok ( Origin :: GitLab )
61- } else {
62- Err ( OriginError :: MissingHeader ( "X-*-Event" ) )
63- }
64- }
0 commit comments