1
1
use axum:: {
2
2
extract:: { Path , Request , State } ,
3
- http:: HeaderMap ,
4
3
middleware:: Next ,
5
4
response:: Response ,
6
5
} ;
@@ -14,7 +13,7 @@ pub async fn validate_headers(
14
13
next : Next ,
15
14
) -> Result < Response , HeaderValidationError > {
16
15
let headers = request. headers ( ) ;
17
- let origin = determine_origin ( headers) ?;
16
+ let origin = Origin :: try_from ( headers) ?;
18
17
origin. validate_headers ( headers) ?;
19
18
Ok ( next. run ( request) . await )
20
19
}
@@ -27,6 +26,7 @@ pub async fn validate_signature_middleware(
27
26
) -> Result < Response , HeaderValidationError > {
28
27
let config = config. read ( ) . await ;
29
28
let headers = request. headers ( ) . clone ( ) ;
29
+ let origin = Origin :: try_from ( & headers) ?;
30
30
31
31
let webhook_config = config
32
32
. webhooks
@@ -44,21 +44,11 @@ pub async fn validate_signature_middleware(
44
44
. await
45
45
. map_err ( HeaderValidationError :: AxumError ) ?;
46
46
47
- validator . validate_signature ( & headers, & secret, & bytes) ?;
47
+ origin . validate_signature ( & headers, & secret, & bytes) ?;
48
48
49
49
let request = Request :: from_parts ( parts, axum:: body:: Body :: from ( bytes) ) ;
50
50
Ok ( next. run ( request) . await )
51
51
} else {
52
52
Ok ( next. run ( request) . await )
53
53
}
54
54
}
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