Skip to content

Commit

Permalink
Allow longer request body for JSON API (ordinals#3655)
Browse files Browse the repository at this point in the history
  • Loading branch information
raphjaph committed Apr 23, 2024
1 parent d862d00 commit c6fec45
Showing 1 changed file with 36 additions and 22 deletions.
58 changes: 36 additions & 22 deletions src/subcommand/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ use {
},
axum::{
body,
extract::{Extension, Json, Path, Query},
extract::{DefaultBodyLimit, Extension, Json, Path, Query},
http::{header, HeaderValue, StatusCode, Uri},
response::{IntoResponse, Redirect, Response},
routing::{get, post},
Expand Down Expand Up @@ -281,7 +281,13 @@ impl Server {
.allow_origin(Any),
)
.layer(CompressionLayer::new())
.with_state(server_config);
.with_state(server_config.clone());

let router = if server_config.json_api_enabled {
router.layer(DefaultBodyLimit::disable())
} else {
router
};

let router = if let Some((username, password)) = settings.credentials() {
router.layer(ValidateRequestHeaderLayer::basic(username, password))
Expand Down Expand Up @@ -605,19 +611,23 @@ impl Server {

async fn outputs(
Extension(index): Extension<Arc<Index>>,
_: AcceptJson,
AcceptJson(accept_json): AcceptJson,
Json(outputs): Json<Vec<OutPoint>>,
) -> ServerResult {
task::block_in_place(|| {
let mut response = Vec::new();
for outpoint in outputs {
let (output_info, _) = index
.get_output_info(outpoint)?
.ok_or_not_found(|| format!("output {outpoint}"))?;
Ok(if accept_json {
let mut response = Vec::new();
for outpoint in outputs {
let (output_info, _) = index
.get_output_info(outpoint)?
.ok_or_not_found(|| format!("output {outpoint}"))?;

response.push(output_info);
}
Ok(Json(response).into_response())
response.push(output_info);
}
Json(response).into_response()
} else {
StatusCode::NOT_FOUND.into_response()
})
})
}

Expand Down Expand Up @@ -1559,21 +1569,25 @@ impl Server {

async fn inscriptions_json(
Extension(index): Extension<Arc<Index>>,
_: AcceptJson,
AcceptJson(accept_json): AcceptJson,
Json(inscriptions): Json<Vec<InscriptionId>>,
) -> ServerResult {
task::block_in_place(|| {
let mut response = Vec::new();
for inscription in inscriptions {
let query = query::Inscription::Id(inscription);
let (info, _, _) = index
.inscription_info(query)?
.ok_or_not_found(|| format!("inscription {query}"))?;

response.push(info);
}
Ok(if accept_json {
let mut response = Vec::new();
for inscription in inscriptions {
let query = query::Inscription::Id(inscription);
let (info, _, _) = index
.inscription_info(query)?
.ok_or_not_found(|| format!("inscription {query}"))?;

response.push(info);
}

Ok(Json(response).into_response())
Json(response).into_response()
} else {
StatusCode::NOT_FOUND.into_response()
})
})
}

Expand Down

0 comments on commit c6fec45

Please sign in to comment.