1
1
use async_trait:: async_trait;
2
- use reqwest:: { self , StatusCode } ;
2
+ use reqwest:: { self , Client , RequestBuilder , StatusCode } ;
3
3
use slog_scope:: debug;
4
4
use std:: io;
5
5
use thiserror:: Error ;
6
6
use tokio:: sync:: RwLock ;
7
7
8
8
use mithril_common:: {
9
9
entities:: { CertificatePending , EpochSettings , Signer , SingleSignatures } ,
10
- fake_data,
10
+ fake_data, MITHRIL_API_VERSION ,
11
11
} ;
12
12
13
13
#[ cfg( test) ]
@@ -74,6 +74,11 @@ impl CertificateHandlerHTTPClient {
74
74
aggregator_endpoint,
75
75
}
76
76
}
77
+
78
+ /// Forge a client request adding protocol version in the headers.
79
+ pub fn prepare_request_builder ( & self , request_builder : RequestBuilder ) -> RequestBuilder {
80
+ request_builder. header ( "API_VERSION" , MITHRIL_API_VERSION )
81
+ }
77
82
}
78
83
79
84
#[ async_trait]
@@ -83,7 +88,11 @@ impl CertificateHandler for CertificateHandlerHTTPClient {
83
88
) -> Result < Option < EpochSettings > , CertificateHandlerError > {
84
89
debug ! ( "Retrieve epoch settings" ) ;
85
90
let url = format ! ( "{}/epoch-settings" , self . aggregator_endpoint) ;
86
- let response = reqwest:: get ( url. clone ( ) ) . await ;
91
+ let response = self
92
+ . prepare_request_builder ( Client :: new ( ) . get ( url. clone ( ) ) )
93
+ . send ( )
94
+ . await ;
95
+
87
96
match response {
88
97
Ok ( response) => match response. status ( ) {
89
98
StatusCode :: OK => match response. json :: < EpochSettings > ( ) . await {
@@ -105,7 +114,11 @@ impl CertificateHandler for CertificateHandlerHTTPClient {
105
114
) -> Result < Option < CertificatePending > , CertificateHandlerError > {
106
115
debug ! ( "Retrieve pending certificate" ) ;
107
116
let url = format ! ( "{}/certificate-pending" , self . aggregator_endpoint) ;
108
- let response = reqwest:: get ( url. clone ( ) ) . await ;
117
+ let response = self
118
+ . prepare_request_builder ( Client :: new ( ) . get ( url. clone ( ) ) )
119
+ . send ( )
120
+ . await ;
121
+
109
122
match response {
110
123
Ok ( response) => match response. status ( ) {
111
124
StatusCode :: OK => match response. json :: < CertificatePending > ( ) . await {
@@ -126,8 +139,12 @@ impl CertificateHandler for CertificateHandlerHTTPClient {
126
139
async fn register_signer ( & self , signer : & Signer ) -> Result < ( ) , CertificateHandlerError > {
127
140
debug ! ( "Register signer" ) ;
128
141
let url = format ! ( "{}/register-signer" , self . aggregator_endpoint) ;
129
- let client = reqwest:: Client :: new ( ) ;
130
- let response = client. post ( url. clone ( ) ) . json ( signer) . send ( ) . await ;
142
+ let response = self
143
+ . prepare_request_builder ( Client :: new ( ) . post ( url. clone ( ) ) )
144
+ . json ( signer)
145
+ . send ( )
146
+ . await ;
147
+
131
148
match response {
132
149
Ok ( response) => match response. status ( ) {
133
150
StatusCode :: CREATED => Ok ( ( ) ) ,
@@ -150,8 +167,12 @@ impl CertificateHandler for CertificateHandlerHTTPClient {
150
167
) -> Result < ( ) , CertificateHandlerError > {
151
168
debug ! ( "Register signatures" ) ;
152
169
let url = format ! ( "{}/register-signatures" , self . aggregator_endpoint) ;
153
- let client = reqwest:: Client :: new ( ) ;
154
- let response = client. post ( url. clone ( ) ) . json ( signatures) . send ( ) . await ;
170
+ let response = self
171
+ . prepare_request_builder ( Client :: new ( ) . post ( url. clone ( ) ) )
172
+ . json ( signatures)
173
+ . send ( )
174
+ . await ;
175
+
155
176
match response {
156
177
Ok ( response) => match response. status ( ) {
157
178
StatusCode :: CREATED => Ok ( ( ) ) ,
0 commit comments