@@ -18,7 +18,7 @@ pub fn request_hash<'a>(
18
18
19
19
let filtered_query = request
20
20
. get_query ( ) ?
21
- . map ( |query| get_filtered_query ( & query, request_certification) ) ;
21
+ . and_then ( |query| get_filtered_query ( & query, request_certification) ) ;
22
22
if let Some ( query_hash) = filtered_query {
23
23
filtered_headers. push ( ( ":ic-cert-query" . into ( ) , Value :: String ( query_hash) ) )
24
24
}
@@ -59,7 +59,10 @@ fn get_filtered_headers(
59
59
. collect ( )
60
60
}
61
61
62
- fn get_filtered_query ( query : & str , request_certification : & DefaultRequestCertification ) -> String {
62
+ fn get_filtered_query (
63
+ query : & str ,
64
+ request_certification : & DefaultRequestCertification ,
65
+ ) -> Option < String > {
63
66
let filtered_query_string = query
64
67
. split ( '&' )
65
68
. filter ( |query_fragment| {
@@ -77,10 +80,12 @@ fn get_filtered_query(query: &str, request_certification: &DefaultRequestCertifi
77
80
} )
78
81
. unwrap_or ( false )
79
82
} )
80
- . collect :: < Vec < & str > > ( )
81
- . join ( "&" ) ;
83
+ . collect :: < Vec < _ > > ( ) ;
84
+ if filtered_query_string. is_empty ( ) {
85
+ return None ;
86
+ }
82
87
83
- filtered_query_string
88
+ Some ( filtered_query_string. join ( "&" ) )
84
89
}
85
90
86
91
#[ cfg( test) ]
@@ -100,6 +105,19 @@ mod tests {
100
105
assert_eq ! ( result, expected_hash. as_slice( ) ) ;
101
106
}
102
107
108
+ #[ test]
109
+ fn request_hash_with_uncertified_query ( ) {
110
+ let request_certification = DefaultRequestCertification :: new ( vec ! [ "host" ] , vec ! [ ] ) ;
111
+ let request = create_request ( "https://ic0.app?q=search" ) ;
112
+ let expected_hash =
113
+ hex:: decode ( "10796453466efb3e333891136b8a5931269f77e40ead9d437fcee94a02fa833c" )
114
+ . unwrap ( ) ;
115
+
116
+ let result = request_hash ( & request, & request_certification) . unwrap ( ) ;
117
+
118
+ assert_eq ! ( result, expected_hash. as_slice( ) ) ;
119
+ }
120
+
103
121
#[ test]
104
122
fn request_hash_with_query ( ) {
105
123
let request_certification =
0 commit comments