add content-type octet stream helper fn (#5062)
This commit is contained in:
parent
00af017582
commit
72bcf47dd0
@ -45,6 +45,7 @@ use eth2::types::{
|
|||||||
PublishBlockRequest, ValidatorBalancesRequestBody, ValidatorId, ValidatorStatus,
|
PublishBlockRequest, ValidatorBalancesRequestBody, ValidatorId, ValidatorStatus,
|
||||||
ValidatorsRequestBody,
|
ValidatorsRequestBody,
|
||||||
};
|
};
|
||||||
|
use eth2::{CONTENT_TYPE_HEADER, SSZ_CONTENT_TYPE_HEADER};
|
||||||
use lighthouse_network::{types::SyncState, EnrExt, NetworkGlobals, PeerId, PubsubMessage};
|
use lighthouse_network::{types::SyncState, EnrExt, NetworkGlobals, PeerId, PubsubMessage};
|
||||||
use lighthouse_version::version_with_platform;
|
use lighthouse_version::version_with_platform;
|
||||||
use logging::SSELoggingComponents;
|
use logging::SSELoggingComponents;
|
||||||
@ -86,10 +87,12 @@ use types::{
|
|||||||
};
|
};
|
||||||
use validator::pubkey_to_validator_index;
|
use validator::pubkey_to_validator_index;
|
||||||
use version::{
|
use version::{
|
||||||
add_consensus_version_header, execution_optimistic_finalized_fork_versioned_response,
|
add_consensus_version_header, add_ssz_content_type_header,
|
||||||
inconsistent_fork_rejection, unsupported_version_rejection, V1, V2, V3,
|
execution_optimistic_finalized_fork_versioned_response, inconsistent_fork_rejection,
|
||||||
|
unsupported_version_rejection, V1, V2, V3,
|
||||||
};
|
};
|
||||||
use warp::http::StatusCode;
|
use warp::http::StatusCode;
|
||||||
|
use warp::hyper::Body;
|
||||||
use warp::sse::Event;
|
use warp::sse::Event;
|
||||||
use warp::Reply;
|
use warp::Reply;
|
||||||
use warp::{http::Response, Filter};
|
use warp::{http::Response, Filter};
|
||||||
@ -1567,8 +1570,8 @@ pub fn serve<T: BeaconChainTypes>(
|
|||||||
match accept_header {
|
match accept_header {
|
||||||
Some(api_types::Accept::Ssz) => Response::builder()
|
Some(api_types::Accept::Ssz) => Response::builder()
|
||||||
.status(200)
|
.status(200)
|
||||||
.header("Content-Type", "application/octet-stream")
|
|
||||||
.body(block.as_ssz_bytes().into())
|
.body(block.as_ssz_bytes().into())
|
||||||
|
.map(|res: Response<Body>| add_ssz_content_type_header(res))
|
||||||
.map_err(|e| {
|
.map_err(|e| {
|
||||||
warp_utils::reject::custom_server_error(format!(
|
warp_utils::reject::custom_server_error(format!(
|
||||||
"failed to create response: {}",
|
"failed to create response: {}",
|
||||||
@ -1659,8 +1662,8 @@ pub fn serve<T: BeaconChainTypes>(
|
|||||||
match accept_header {
|
match accept_header {
|
||||||
Some(api_types::Accept::Ssz) => Response::builder()
|
Some(api_types::Accept::Ssz) => Response::builder()
|
||||||
.status(200)
|
.status(200)
|
||||||
.header("Content-Type", "application/octet-stream")
|
|
||||||
.body(block.as_ssz_bytes().into())
|
.body(block.as_ssz_bytes().into())
|
||||||
|
.map(|res: Response<Body>| add_ssz_content_type_header(res))
|
||||||
.map_err(|e| {
|
.map_err(|e| {
|
||||||
warp_utils::reject::custom_server_error(format!(
|
warp_utils::reject::custom_server_error(format!(
|
||||||
"failed to create response: {}",
|
"failed to create response: {}",
|
||||||
@ -1710,8 +1713,8 @@ pub fn serve<T: BeaconChainTypes>(
|
|||||||
match accept_header {
|
match accept_header {
|
||||||
Some(api_types::Accept::Ssz) => Response::builder()
|
Some(api_types::Accept::Ssz) => Response::builder()
|
||||||
.status(200)
|
.status(200)
|
||||||
.header("Content-Type", "application/octet-stream")
|
|
||||||
.body(blob_sidecar_list_filtered.as_ssz_bytes().into())
|
.body(blob_sidecar_list_filtered.as_ssz_bytes().into())
|
||||||
|
.map(|res: Response<Body>| add_ssz_content_type_header(res))
|
||||||
.map_err(|e| {
|
.map_err(|e| {
|
||||||
warp_utils::reject::custom_server_error(format!(
|
warp_utils::reject::custom_server_error(format!(
|
||||||
"failed to create response: {}",
|
"failed to create response: {}",
|
||||||
@ -2239,8 +2242,8 @@ pub fn serve<T: BeaconChainTypes>(
|
|||||||
.map(|snapshot| {
|
.map(|snapshot| {
|
||||||
Response::builder()
|
Response::builder()
|
||||||
.status(200)
|
.status(200)
|
||||||
.header("Content-Type", "application/octet-stream")
|
|
||||||
.body(snapshot.as_ssz_bytes().into())
|
.body(snapshot.as_ssz_bytes().into())
|
||||||
|
.map(|res: Response<Body>| add_ssz_content_type_header(res))
|
||||||
.map_err(|e| {
|
.map_err(|e| {
|
||||||
warp_utils::reject::custom_server_error(format!(
|
warp_utils::reject::custom_server_error(format!(
|
||||||
"failed to create response: {}",
|
"failed to create response: {}",
|
||||||
@ -2251,8 +2254,8 @@ pub fn serve<T: BeaconChainTypes>(
|
|||||||
.unwrap_or_else(|| {
|
.unwrap_or_else(|| {
|
||||||
Response::builder()
|
Response::builder()
|
||||||
.status(503)
|
.status(503)
|
||||||
.header("Content-Type", "application/octet-stream")
|
|
||||||
.body(Vec::new().into())
|
.body(Vec::new().into())
|
||||||
|
.map(|res: Response<Body>| add_ssz_content_type_header(res))
|
||||||
.map_err(|e| {
|
.map_err(|e| {
|
||||||
warp_utils::reject::custom_server_error(format!(
|
warp_utils::reject::custom_server_error(format!(
|
||||||
"failed to create response: {}",
|
"failed to create response: {}",
|
||||||
@ -2323,8 +2326,8 @@ pub fn serve<T: BeaconChainTypes>(
|
|||||||
match accept_header {
|
match accept_header {
|
||||||
Some(api_types::Accept::Ssz) => Response::builder()
|
Some(api_types::Accept::Ssz) => Response::builder()
|
||||||
.status(200)
|
.status(200)
|
||||||
.header("Content-Type", "application/octet-stream")
|
|
||||||
.body(withdrawals.as_ssz_bytes().into())
|
.body(withdrawals.as_ssz_bytes().into())
|
||||||
|
.map(|res: Response<Body>| add_ssz_content_type_header(res))
|
||||||
.map_err(|e| {
|
.map_err(|e| {
|
||||||
warp_utils::reject::custom_server_error(format!(
|
warp_utils::reject::custom_server_error(format!(
|
||||||
"failed to create response: {}",
|
"failed to create response: {}",
|
||||||
@ -2389,8 +2392,8 @@ pub fn serve<T: BeaconChainTypes>(
|
|||||||
match accept_header {
|
match accept_header {
|
||||||
Some(api_types::Accept::Ssz) => Response::builder()
|
Some(api_types::Accept::Ssz) => Response::builder()
|
||||||
.status(200)
|
.status(200)
|
||||||
.header("Content-Type", "application/octet-stream")
|
|
||||||
.body(bootstrap.as_ssz_bytes().into())
|
.body(bootstrap.as_ssz_bytes().into())
|
||||||
|
.map(|res: Response<Body>| add_ssz_content_type_header(res))
|
||||||
.map_err(|e| {
|
.map_err(|e| {
|
||||||
warp_utils::reject::custom_server_error(format!(
|
warp_utils::reject::custom_server_error(format!(
|
||||||
"failed to create response: {}",
|
"failed to create response: {}",
|
||||||
@ -2437,8 +2440,8 @@ pub fn serve<T: BeaconChainTypes>(
|
|||||||
match accept_header {
|
match accept_header {
|
||||||
Some(api_types::Accept::Ssz) => Response::builder()
|
Some(api_types::Accept::Ssz) => Response::builder()
|
||||||
.status(200)
|
.status(200)
|
||||||
.header("Content-Type", "application/octet-stream")
|
|
||||||
.body(update.as_ssz_bytes().into())
|
.body(update.as_ssz_bytes().into())
|
||||||
|
.map(|res: Response<Body>| add_ssz_content_type_header(res))
|
||||||
.map_err(|e| {
|
.map_err(|e| {
|
||||||
warp_utils::reject::custom_server_error(format!(
|
warp_utils::reject::custom_server_error(format!(
|
||||||
"failed to create response: {}",
|
"failed to create response: {}",
|
||||||
@ -2485,8 +2488,8 @@ pub fn serve<T: BeaconChainTypes>(
|
|||||||
match accept_header {
|
match accept_header {
|
||||||
Some(api_types::Accept::Ssz) => Response::builder()
|
Some(api_types::Accept::Ssz) => Response::builder()
|
||||||
.status(200)
|
.status(200)
|
||||||
.header("Content-Type", "application/octet-stream")
|
|
||||||
.body(update.as_ssz_bytes().into())
|
.body(update.as_ssz_bytes().into())
|
||||||
|
.map(|res: Response<Body>| add_ssz_content_type_header(res))
|
||||||
.map_err(|e| {
|
.map_err(|e| {
|
||||||
warp_utils::reject::custom_server_error(format!(
|
warp_utils::reject::custom_server_error(format!(
|
||||||
"failed to create response: {}",
|
"failed to create response: {}",
|
||||||
@ -2687,8 +2690,8 @@ pub fn serve<T: BeaconChainTypes>(
|
|||||||
.map_err(inconsistent_fork_rejection)?;
|
.map_err(inconsistent_fork_rejection)?;
|
||||||
Response::builder()
|
Response::builder()
|
||||||
.status(200)
|
.status(200)
|
||||||
.header("Content-Type", "application/octet-stream")
|
|
||||||
.body(state.as_ssz_bytes().into())
|
.body(state.as_ssz_bytes().into())
|
||||||
|
.map(|res: Response<Body>| add_ssz_content_type_header(res))
|
||||||
.map(|resp: warp::reply::Response| {
|
.map(|resp: warp::reply::Response| {
|
||||||
add_consensus_version_header(resp, fork_name)
|
add_consensus_version_header(resp, fork_name)
|
||||||
})
|
})
|
||||||
@ -4273,8 +4276,8 @@ pub fn serve<T: BeaconChainTypes>(
|
|||||||
let (state, _execution_optimistic, _finalized) = state_id.state(&chain)?;
|
let (state, _execution_optimistic, _finalized) = state_id.state(&chain)?;
|
||||||
Response::builder()
|
Response::builder()
|
||||||
.status(200)
|
.status(200)
|
||||||
.header("Content-Type", "application/ssz")
|
.body(state.as_ssz_bytes().into())
|
||||||
.body(state.as_ssz_bytes())
|
.map(|res: Response<Body>| add_ssz_content_type_header(res))
|
||||||
.map_err(|e| {
|
.map_err(|e| {
|
||||||
warp_utils::reject::custom_server_error(format!(
|
warp_utils::reject::custom_server_error(format!(
|
||||||
"failed to create response: {}",
|
"failed to create response: {}",
|
||||||
@ -4646,7 +4649,7 @@ pub fn serve<T: BeaconChainTypes>(
|
|||||||
.boxed()
|
.boxed()
|
||||||
.uor(
|
.uor(
|
||||||
warp::post().and(
|
warp::post().and(
|
||||||
warp::header::exact("Content-Type", "application/octet-stream")
|
warp::header::exact(CONTENT_TYPE_HEADER, SSZ_CONTENT_TYPE_HEADER)
|
||||||
// Routes which expect `application/octet-stream` go within this `and`.
|
// Routes which expect `application/octet-stream` go within this `and`.
|
||||||
.and(
|
.and(
|
||||||
post_beacon_blocks_ssz
|
post_beacon_blocks_ssz
|
||||||
|
@ -3,13 +3,12 @@ use crate::{
|
|||||||
version::{
|
version::{
|
||||||
add_consensus_block_value_header, add_consensus_version_header,
|
add_consensus_block_value_header, add_consensus_version_header,
|
||||||
add_execution_payload_blinded_header, add_execution_payload_value_header,
|
add_execution_payload_blinded_header, add_execution_payload_value_header,
|
||||||
fork_versioned_response, inconsistent_fork_rejection,
|
add_ssz_content_type_header, fork_versioned_response, inconsistent_fork_rejection,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
use beacon_chain::{
|
use beacon_chain::{
|
||||||
BeaconBlockResponseWrapper, BeaconChain, BeaconChainTypes, ProduceBlockVerification,
|
BeaconBlockResponseWrapper, BeaconChain, BeaconChainTypes, ProduceBlockVerification,
|
||||||
};
|
};
|
||||||
use bytes::Bytes;
|
|
||||||
use eth2::types::{
|
use eth2::types::{
|
||||||
self as api_types, EndpointVersion, ProduceBlockV3Metadata, SkipRandaoVerification,
|
self as api_types, EndpointVersion, ProduceBlockV3Metadata, SkipRandaoVerification,
|
||||||
};
|
};
|
||||||
@ -95,8 +94,8 @@ pub fn build_response_v3<T: BeaconChainTypes>(
|
|||||||
match accept_header {
|
match accept_header {
|
||||||
Some(api_types::Accept::Ssz) => Response::builder()
|
Some(api_types::Accept::Ssz) => Response::builder()
|
||||||
.status(200)
|
.status(200)
|
||||||
.header("Content-Type", "application/ssz")
|
|
||||||
.body(block_contents.as_ssz_bytes().into())
|
.body(block_contents.as_ssz_bytes().into())
|
||||||
|
.map(|res: Response<Body>| add_ssz_content_type_header(res))
|
||||||
.map(|res: Response<Body>| add_consensus_version_header(res, fork_name))
|
.map(|res: Response<Body>| add_consensus_version_header(res, fork_name))
|
||||||
.map(|res| add_execution_payload_blinded_header(res, execution_payload_blinded))
|
.map(|res| add_execution_payload_blinded_header(res, execution_payload_blinded))
|
||||||
.map(|res: Response<Body>| {
|
.map(|res: Response<Body>| {
|
||||||
@ -196,9 +195,9 @@ pub fn build_response_v2<T: BeaconChainTypes>(
|
|||||||
match accept_header {
|
match accept_header {
|
||||||
Some(api_types::Accept::Ssz) => Response::builder()
|
Some(api_types::Accept::Ssz) => Response::builder()
|
||||||
.status(200)
|
.status(200)
|
||||||
.header("Content-Type", "application/octet-stream")
|
|
||||||
.body(block_contents.as_ssz_bytes().into())
|
.body(block_contents.as_ssz_bytes().into())
|
||||||
.map(|res: Response<Bytes>| add_consensus_version_header(res, fork_name))
|
.map(|res: Response<Body>| add_ssz_content_type_header(res))
|
||||||
|
.map(|res: Response<Body>| add_consensus_version_header(res, fork_name))
|
||||||
.map_err(|e| {
|
.map_err(|e| {
|
||||||
warp_utils::reject::custom_server_error(format!("failed to create response: {}", e))
|
warp_utils::reject::custom_server_error(format!("failed to create response: {}", e))
|
||||||
}),
|
}),
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
use crate::api_types::EndpointVersion;
|
use crate::api_types::EndpointVersion;
|
||||||
use eth2::{
|
use eth2::{
|
||||||
CONSENSUS_BLOCK_VALUE_HEADER, CONSENSUS_VERSION_HEADER, EXECUTION_PAYLOAD_BLINDED_HEADER,
|
CONSENSUS_BLOCK_VALUE_HEADER, CONSENSUS_VERSION_HEADER, CONTENT_TYPE_HEADER,
|
||||||
EXECUTION_PAYLOAD_VALUE_HEADER,
|
EXECUTION_PAYLOAD_BLINDED_HEADER, EXECUTION_PAYLOAD_VALUE_HEADER, SSZ_CONTENT_TYPE_HEADER,
|
||||||
};
|
};
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
use types::{
|
use types::{
|
||||||
@ -59,6 +59,11 @@ pub fn execution_optimistic_finalized_fork_versioned_response<T: Serialize>(
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Add the 'Content-Type application/octet-stream` header to a response.
|
||||||
|
pub fn add_ssz_content_type_header<T: Reply>(reply: T) -> Response {
|
||||||
|
reply::with_header(reply, CONTENT_TYPE_HEADER, SSZ_CONTENT_TYPE_HEADER).into_response()
|
||||||
|
}
|
||||||
|
|
||||||
/// Add the `Eth-Consensus-Version` header to a response.
|
/// Add the `Eth-Consensus-Version` header to a response.
|
||||||
pub fn add_consensus_version_header<T: Reply>(reply: T, fork_name: ForkName) -> Response {
|
pub fn add_consensus_version_header<T: Reply>(reply: T, fork_name: ForkName) -> Response {
|
||||||
reply::with_header(reply, CONSENSUS_VERSION_HEADER, fork_name.to_string()).into_response()
|
reply::with_header(reply, CONSENSUS_VERSION_HEADER, fork_name.to_string()).into_response()
|
||||||
|
@ -46,6 +46,9 @@ pub const EXECUTION_PAYLOAD_BLINDED_HEADER: &str = "Eth-Execution-Payload-Blinde
|
|||||||
pub const EXECUTION_PAYLOAD_VALUE_HEADER: &str = "Eth-Execution-Payload-Value";
|
pub const EXECUTION_PAYLOAD_VALUE_HEADER: &str = "Eth-Execution-Payload-Value";
|
||||||
pub const CONSENSUS_BLOCK_VALUE_HEADER: &str = "Eth-Consensus-Block-Value";
|
pub const CONSENSUS_BLOCK_VALUE_HEADER: &str = "Eth-Consensus-Block-Value";
|
||||||
|
|
||||||
|
pub const CONTENT_TYPE_HEADER: &str = "Content-Type";
|
||||||
|
pub const SSZ_CONTENT_TYPE_HEADER: &str = "application/octet-stream";
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub enum Error {
|
pub enum Error {
|
||||||
/// The `reqwest` client raised an error.
|
/// The `reqwest` client raised an error.
|
||||||
|
Loading…
Reference in New Issue
Block a user