1+ use hyper:: HeaderMap ;
12use reqwest:: Response ;
23use serde:: Serialize ;
4+ use uuid:: Uuid ;
35
46use crate :: common:: http:: { Query , QueryParam , ReqwestQuery } ;
57use crate :: servers:: api:: connection_info:: ConnectionInfo ;
@@ -18,90 +20,102 @@ impl Client {
1820 }
1921 }
2022
21- pub async fn generate_auth_key ( & self , seconds_valid : i32 ) -> Response {
22- self . post_empty ( & format ! ( "key/{}" , & seconds_valid) ) . await
23+ pub async fn generate_auth_key ( & self , seconds_valid : i32 , headers : Option < HeaderMap > ) -> Response {
24+ self . post_empty ( & format ! ( "key/{}" , & seconds_valid) , headers ) . await
2325 }
2426
25- pub async fn add_auth_key ( & self , add_key_form : AddKeyForm ) -> Response {
26- self . post_form ( "keys" , & add_key_form) . await
27+ pub async fn add_auth_key ( & self , add_key_form : AddKeyForm , headers : Option < HeaderMap > ) -> Response {
28+ self . post_form ( "keys" , & add_key_form, headers ) . await
2729 }
2830
29- pub async fn delete_auth_key ( & self , key : & str ) -> Response {
30- self . delete ( & format ! ( "key/{}" , & key) ) . await
31+ pub async fn delete_auth_key ( & self , key : & str , headers : Option < HeaderMap > ) -> Response {
32+ self . delete ( & format ! ( "key/{}" , & key) , headers ) . await
3133 }
3234
33- pub async fn reload_keys ( & self ) -> Response {
34- self . get ( "keys/reload" , Query :: default ( ) ) . await
35+ pub async fn reload_keys ( & self , headers : Option < HeaderMap > ) -> Response {
36+ self . get ( "keys/reload" , Query :: default ( ) , headers ) . await
3537 }
3638
37- pub async fn whitelist_a_torrent ( & self , info_hash : & str ) -> Response {
38- self . post_empty ( & format ! ( "whitelist/{}" , & info_hash) ) . await
39+ pub async fn whitelist_a_torrent ( & self , info_hash : & str , headers : Option < HeaderMap > ) -> Response {
40+ self . post_empty ( & format ! ( "whitelist/{}" , & info_hash) , headers ) . await
3941 }
4042
41- pub async fn remove_torrent_from_whitelist ( & self , info_hash : & str ) -> Response {
42- self . delete ( & format ! ( "whitelist/{}" , & info_hash) ) . await
43+ pub async fn remove_torrent_from_whitelist ( & self , info_hash : & str , headers : Option < HeaderMap > ) -> Response {
44+ self . delete ( & format ! ( "whitelist/{}" , & info_hash) , headers ) . await
4345 }
4446
45- pub async fn reload_whitelist ( & self ) -> Response {
46- self . get ( "whitelist/reload" , Query :: default ( ) ) . await
47+ pub async fn reload_whitelist ( & self , headers : Option < HeaderMap > ) -> Response {
48+ self . get ( "whitelist/reload" , Query :: default ( ) , headers ) . await
4749 }
4850
49- pub async fn get_torrent ( & self , info_hash : & str ) -> Response {
50- self . get ( & format ! ( "torrent/{}" , & info_hash) , Query :: default ( ) ) . await
51+ pub async fn get_torrent ( & self , info_hash : & str , headers : Option < HeaderMap > ) -> Response {
52+ self . get ( & format ! ( "torrent/{}" , & info_hash) , Query :: default ( ) , headers ) . await
5153 }
5254
53- pub async fn get_torrents ( & self , params : Query ) -> Response {
54- self . get ( "torrents" , params) . await
55+ pub async fn get_torrents ( & self , params : Query , headers : Option < HeaderMap > ) -> Response {
56+ self . get ( "torrents" , params, headers ) . await
5557 }
5658
57- pub async fn get_tracker_statistics ( & self ) -> Response {
58- self . get ( "stats" , Query :: default ( ) ) . await
59+ pub async fn get_tracker_statistics ( & self , headers : Option < HeaderMap > ) -> Response {
60+ self . get ( "stats" , Query :: default ( ) , headers ) . await
5961 }
6062
61- pub async fn get ( & self , path : & str , params : Query ) -> Response {
63+ pub async fn get ( & self , path : & str , params : Query , headers : Option < HeaderMap > ) -> Response {
6264 let mut query: Query = params;
6365
6466 if let Some ( token) = & self . connection_info . api_token {
6567 query. add_param ( QueryParam :: new ( "token" , token) ) ;
6668 } ;
6769
68- self . get_request_with_query ( path, query) . await
70+ self . get_request_with_query ( path, query, headers ) . await
6971 }
7072
71- pub async fn post_empty ( & self , path : & str ) -> Response {
72- reqwest:: Client :: new ( )
73+ pub async fn post_empty ( & self , path : & str , headers : Option < HeaderMap > ) -> Response {
74+ let builder = reqwest:: Client :: new ( )
7375 . post ( self . base_url ( path) . clone ( ) )
74- . query ( & ReqwestQuery :: from ( self . query_with_token ( ) ) )
75- . send ( )
76- . await
77- . unwrap ( )
76+ . query ( & ReqwestQuery :: from ( self . query_with_token ( ) ) ) ;
77+
78+ let builder = match headers {
79+ Some ( headers) => builder. headers ( headers) ,
80+ None => builder,
81+ } ;
82+
83+ builder. send ( ) . await . unwrap ( )
7884 }
7985
80- pub async fn post_form < T : Serialize + ?Sized > ( & self , path : & str , form : & T ) -> Response {
81- reqwest:: Client :: new ( )
86+ pub async fn post_form < T : Serialize + ?Sized > ( & self , path : & str , form : & T , headers : Option < HeaderMap > ) -> Response {
87+ let builder = reqwest:: Client :: new ( )
8288 . post ( self . base_url ( path) . clone ( ) )
8389 . query ( & ReqwestQuery :: from ( self . query_with_token ( ) ) )
84- . json ( & form)
85- . send ( )
86- . await
87- . unwrap ( )
90+ . json ( & form) ;
91+
92+ let builder = match headers {
93+ Some ( headers) => builder. headers ( headers) ,
94+ None => builder,
95+ } ;
96+
97+ builder. send ( ) . await . unwrap ( )
8898 }
8999
90- async fn delete ( & self , path : & str ) -> Response {
91- reqwest:: Client :: new ( )
100+ async fn delete ( & self , path : & str , headers : Option < HeaderMap > ) -> Response {
101+ let builder = reqwest:: Client :: new ( )
92102 . delete ( self . base_url ( path) . clone ( ) )
93- . query ( & ReqwestQuery :: from ( self . query_with_token ( ) ) )
94- . send ( )
95- . await
96- . unwrap ( )
103+ . query ( & ReqwestQuery :: from ( self . query_with_token ( ) ) ) ;
104+
105+ let builder = match headers {
106+ Some ( headers) => builder. headers ( headers) ,
107+ None => builder,
108+ } ;
109+
110+ builder. send ( ) . await . unwrap ( )
97111 }
98112
99- pub async fn get_request_with_query ( & self , path : & str , params : Query ) -> Response {
100- get ( & self . base_url ( path) , Some ( params) ) . await
113+ pub async fn get_request_with_query ( & self , path : & str , params : Query , headers : Option < HeaderMap > ) -> Response {
114+ get ( & self . base_url ( path) , Some ( params) , headers ) . await
101115 }
102116
103117 pub async fn get_request ( & self , path : & str ) -> Response {
104- get ( & self . base_url ( path) , None ) . await
118+ get ( & self . base_url ( path) , None , None ) . await
105119 }
106120
107121 fn query_with_token ( & self ) -> Query {
@@ -116,18 +130,27 @@ impl Client {
116130 }
117131}
118132
119- pub async fn get ( path : & str , query : Option < Query > ) -> Response {
120- match query {
121- Some ( params) => reqwest:: Client :: builder ( )
122- . build ( )
123- . unwrap ( )
124- . get ( path)
125- . query ( & ReqwestQuery :: from ( params) )
126- . send ( )
127- . await
128- . unwrap ( ) ,
129- None => reqwest:: Client :: builder ( ) . build ( ) . unwrap ( ) . get ( path) . send ( ) . await . unwrap ( ) ,
130- }
133+ pub async fn get ( path : & str , query : Option < Query > , headers : Option < HeaderMap > ) -> Response {
134+ let builder = reqwest:: Client :: builder ( ) . build ( ) . unwrap ( ) ;
135+
136+ let builder = match query {
137+ Some ( params) => builder. get ( path) . query ( & ReqwestQuery :: from ( params) ) ,
138+ None => builder. get ( path) ,
139+ } ;
140+
141+ let builder = match headers {
142+ Some ( headers) => builder. headers ( headers) ,
143+ None => builder,
144+ } ;
145+
146+ builder. send ( ) . await . unwrap ( )
147+ }
148+
149+ /// Returns a `HeaderMap` with a request id header
150+ pub fn headers_with_request_id ( request_id : Uuid ) -> HeaderMap {
151+ let mut headers = HeaderMap :: new ( ) ;
152+ headers. insert ( "x-request-id" , request_id. to_string ( ) . parse ( ) . unwrap ( ) ) ;
153+ headers
131154}
132155
133156#[ derive( Serialize , Debug ) ]
0 commit comments