1
+ use hyper:: HeaderMap ;
1
2
use reqwest:: Response ;
2
3
use serde:: Serialize ;
4
+ use uuid:: Uuid ;
3
5
4
6
use crate :: common:: http:: { Query , QueryParam , ReqwestQuery } ;
5
7
use crate :: servers:: api:: connection_info:: ConnectionInfo ;
@@ -18,90 +20,102 @@ impl Client {
18
20
}
19
21
}
20
22
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
23
25
}
24
26
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
27
29
}
28
30
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
31
33
}
32
34
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
35
37
}
36
38
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
39
41
}
40
42
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
43
45
}
44
46
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
47
49
}
48
50
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
51
53
}
52
54
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
55
57
}
56
58
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
59
61
}
60
62
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 {
62
64
let mut query: Query = params;
63
65
64
66
if let Some ( token) = & self . connection_info . api_token {
65
67
query. add_param ( QueryParam :: new ( "token" , token) ) ;
66
68
} ;
67
69
68
- self . get_request_with_query ( path, query) . await
70
+ self . get_request_with_query ( path, query, headers ) . await
69
71
}
70
72
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 ( )
73
75
. 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 ( )
78
84
}
79
85
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 ( )
82
88
. post ( self . base_url ( path) . clone ( ) )
83
89
. 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 ( )
88
98
}
89
99
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 ( )
92
102
. 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 ( )
97
111
}
98
112
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
101
115
}
102
116
103
117
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
105
119
}
106
120
107
121
fn query_with_token ( & self ) -> Query {
@@ -116,18 +130,27 @@ impl Client {
116
130
}
117
131
}
118
132
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
131
154
}
132
155
133
156
#[ derive( Serialize , Debug ) ]
0 commit comments