Skip to content

Commit 8e45da1

Browse files
committed
add API version to client headers
1 parent 9cfe357 commit 8e45da1

File tree

5 files changed

+69
-20
lines changed

5 files changed

+69
-20
lines changed

mithril-aggregator/src/http_server/mod.rs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,3 @@ mod routes;
22
mod server;
33

44
pub use server::{Server, SERVER_BASE_PATH};
5-
6-
/// Mithril API protocol version
7-
/// this is the same as the one in openapi.yml file.
8-
/// If you want to update this version to reflect changes in the protocol,
9-
/// please also update the entry in the openapi.yml
10-
pub const MITHRIL_API_VERSION: &str = "0.0.1";

mithril-aggregator/src/http_server/routes/router.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
use crate::http_server::routes::{
22
certificate_routes, epoch_routes, signatures_routes, signer_routes, snapshot_routes,
33
};
4-
use crate::http_server::{MITHRIL_API_VERSION, SERVER_BASE_PATH};
4+
use crate::http_server::SERVER_BASE_PATH;
55
use crate::DependencyManager;
6+
7+
use mithril_common::MITHRIL_API_VERSION;
8+
69
use reqwest::header::{HeaderMap, HeaderValue};
710
use std::sync::Arc;
811
use warp::http::Method;

mithril-client/src/aggregator.rs

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ use async_trait::async_trait;
22
use flate2::read::GzDecoder;
33
use futures::StreamExt;
44
use reqwest::{self, StatusCode};
5+
use reqwest::{Client, RequestBuilder};
56
use slog_scope::debug;
67
use std::env;
78
use std::fs;
@@ -12,7 +13,10 @@ use std::sync::Arc;
1213
use tar::Archive;
1314
use thiserror::Error;
1415

15-
use mithril_common::entities::{Certificate, Snapshot};
16+
use mithril_common::{
17+
entities::{Certificate, Snapshot},
18+
MITHRIL_API_VERSION,
19+
};
1620

1721
use mithril_common::certificate_chain::CertificateRetriever;
1822
use mithril_common::certificate_chain::CertificateRetrieverError;
@@ -86,6 +90,11 @@ impl AggregatorHTTPClient {
8690
}
8791
}
8892

93+
/// Forge a client request adding protocol version in the headers.
94+
pub fn prepare_request_builder(&self, request_builder: RequestBuilder) -> RequestBuilder {
95+
request_builder.header("API_VERSION", MITHRIL_API_VERSION)
96+
}
97+
8998
/// Download certificate details
9099
async fn download_certificate_details(
91100
&self,
@@ -96,7 +105,11 @@ impl AggregatorHTTPClient {
96105
"{}/certificate/{}",
97106
self.aggregator_endpoint, certificate_hash
98107
);
99-
let response = reqwest::get(url.clone()).await;
108+
let response = self
109+
.prepare_request_builder(Client::new().get(url.clone()))
110+
.send()
111+
.await;
112+
100113
match response {
101114
Ok(response) => match response.status() {
102115
StatusCode::OK => match response.json::<Certificate>().await {
@@ -123,7 +136,11 @@ impl AggregatorHandler for AggregatorHTTPClient {
123136
async fn list_snapshots(&self) -> Result<Vec<Snapshot>, AggregatorHandlerError> {
124137
debug!("List snapshots");
125138
let url = format!("{}/snapshots", self.aggregator_endpoint);
126-
let response = reqwest::get(url.clone()).await;
139+
let response = self
140+
.prepare_request_builder(Client::new().get(url.clone()))
141+
.send()
142+
.await;
143+
127144
match response {
128145
Ok(response) => match response.status() {
129146
StatusCode::OK => match response.json::<Vec<Snapshot>>().await {
@@ -144,7 +161,11 @@ impl AggregatorHandler for AggregatorHTTPClient {
144161
async fn get_snapshot_details(&self, digest: &str) -> Result<Snapshot, AggregatorHandlerError> {
145162
debug!("Details snapshot {}", digest);
146163
let url = format!("{}/snapshot/{}", self.aggregator_endpoint, digest);
147-
let response = reqwest::get(url.clone()).await;
164+
let response = self
165+
.prepare_request_builder(Client::new().get(url.clone()))
166+
.send()
167+
.await;
168+
148169
match response {
149170
Ok(response) => match response.status() {
150171
StatusCode::OK => match response.json::<Snapshot>().await {
@@ -171,7 +192,11 @@ impl AggregatorHandler for AggregatorHTTPClient {
171192
location: &str,
172193
) -> Result<String, AggregatorHandlerError> {
173194
debug!("Download snapshot {} from {}", digest, location);
174-
let response = reqwest::get(location).await;
195+
let response = self
196+
.prepare_request_builder(Client::new().get(location.to_owned()))
197+
.send()
198+
.await;
199+
175200
match response {
176201
Ok(response) => match response.status() {
177202
StatusCode::OK => {

mithril-common/src/lib.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,3 +35,9 @@ pub const NEXT_SIGNER_EPOCH_RETRIEVAL_OFFSET: i64 = 0;
3535

3636
/// The epoch offset used for signers stake distribution and verification keys recording.
3737
pub const SIGNER_EPOCH_RECORDING_OFFSET: i64 = 1;
38+
39+
/// Mithril API protocol version
40+
/// this is the same as the one in openapi.yml file.
41+
/// If you want to update this version to reflect changes in the protocol,
42+
/// please also update the entry in the openapi.yml
43+
pub const MITHRIL_API_VERSION: &str = "0.0.1";

mithril-signer/src/certificate_handler.rs

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
use async_trait::async_trait;
2-
use reqwest::{self, StatusCode};
2+
use reqwest::{self, Client, RequestBuilder, StatusCode};
33
use slog_scope::debug;
44
use std::io;
55
use thiserror::Error;
66
use tokio::sync::RwLock;
77

88
use mithril_common::{
99
entities::{CertificatePending, EpochSettings, Signer, SingleSignatures},
10-
fake_data,
10+
fake_data, MITHRIL_API_VERSION,
1111
};
1212

1313
#[cfg(test)]
@@ -74,6 +74,11 @@ impl CertificateHandlerHTTPClient {
7474
aggregator_endpoint,
7575
}
7676
}
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+
}
7782
}
7883

7984
#[async_trait]
@@ -83,7 +88,11 @@ impl CertificateHandler for CertificateHandlerHTTPClient {
8388
) -> Result<Option<EpochSettings>, CertificateHandlerError> {
8489
debug!("Retrieve epoch settings");
8590
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+
8796
match response {
8897
Ok(response) => match response.status() {
8998
StatusCode::OK => match response.json::<EpochSettings>().await {
@@ -105,7 +114,11 @@ impl CertificateHandler for CertificateHandlerHTTPClient {
105114
) -> Result<Option<CertificatePending>, CertificateHandlerError> {
106115
debug!("Retrieve pending certificate");
107116
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+
109122
match response {
110123
Ok(response) => match response.status() {
111124
StatusCode::OK => match response.json::<CertificatePending>().await {
@@ -126,8 +139,12 @@ impl CertificateHandler for CertificateHandlerHTTPClient {
126139
async fn register_signer(&self, signer: &Signer) -> Result<(), CertificateHandlerError> {
127140
debug!("Register signer");
128141
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+
131148
match response {
132149
Ok(response) => match response.status() {
133150
StatusCode::CREATED => Ok(()),
@@ -150,8 +167,12 @@ impl CertificateHandler for CertificateHandlerHTTPClient {
150167
) -> Result<(), CertificateHandlerError> {
151168
debug!("Register signatures");
152169
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+
155176
match response {
156177
Ok(response) => match response.status() {
157178
StatusCode::CREATED => Ok(()),

0 commit comments

Comments
 (0)