Fix axum route params: use :param syntax (not {param}) for axum 0.7
Axum 0.7 uses :param for path parameters. {param} is axum 0.8+ syntax.
Routes were silently not matching, causing 404 on all key lookups.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -11,7 +11,7 @@ pub fn routes() -> Router<AppState> {
|
|||||||
Router::new()
|
Router::new()
|
||||||
.route("/keys/register", post(register_keys))
|
.route("/keys/register", post(register_keys))
|
||||||
.route("/keys/list", get(list_keys))
|
.route("/keys/list", get(list_keys))
|
||||||
.route("/keys/{fingerprint}", get(get_bundle))
|
.route("/keys/:fingerprint", get(get_bundle))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Debug endpoint: list all registered fingerprints.
|
/// Debug endpoint: list all registered fingerprints.
|
||||||
@@ -63,15 +63,29 @@ async fn get_bundle(
|
|||||||
Path(fingerprint): Path<String>,
|
Path(fingerprint): Path<String>,
|
||||||
) -> Result<Json<serde_json::Value>, axum::http::StatusCode> {
|
) -> Result<Json<serde_json::Value>, axum::http::StatusCode> {
|
||||||
let key = normalize_fp(&fingerprint);
|
let key = normalize_fp(&fingerprint);
|
||||||
tracing::info!("Looking up bundle for {}", key);
|
tracing::info!("get_bundle: raw path='{}', normalized='{}'", fingerprint, key);
|
||||||
|
|
||||||
|
// Debug: list what's in the DB
|
||||||
|
let all_keys: Vec<String> = state.db.keys.iter()
|
||||||
|
.filter_map(|r| r.ok().and_then(|(k, _)| String::from_utf8(k.to_vec()).ok()))
|
||||||
|
.collect();
|
||||||
|
tracing::info!("get_bundle: DB contains {} keys: {:?}", all_keys.len(), all_keys);
|
||||||
|
|
||||||
match state.db.keys.get(key.as_bytes()) {
|
match state.db.keys.get(key.as_bytes()) {
|
||||||
Ok(Some(data)) => Ok(Json(serde_json::json!({
|
Ok(Some(data)) => {
|
||||||
"fingerprint": fingerprint,
|
tracing::info!("get_bundle: FOUND {} bytes for {}", data.len(), key);
|
||||||
"bundle": base64::Engine::encode(&base64::engine::general_purpose::STANDARD, &data),
|
Ok(Json(serde_json::json!({
|
||||||
}))),
|
"fingerprint": fingerprint,
|
||||||
_ => {
|
"bundle": base64::Engine::encode(&base64::engine::general_purpose::STANDARD, &data),
|
||||||
tracing::warn!("Bundle not found for {}", key);
|
})))
|
||||||
|
}
|
||||||
|
Ok(None) => {
|
||||||
|
tracing::warn!("get_bundle: NOT FOUND for key '{}'", key);
|
||||||
Err(axum::http::StatusCode::NOT_FOUND)
|
Err(axum::http::StatusCode::NOT_FOUND)
|
||||||
}
|
}
|
||||||
|
Err(e) => {
|
||||||
|
tracing::error!("get_bundle: DB error: {}", e);
|
||||||
|
Err(axum::http::StatusCode::INTERNAL_SERVER_ERROR)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ use crate::state::AppState;
|
|||||||
pub fn routes() -> Router<AppState> {
|
pub fn routes() -> Router<AppState> {
|
||||||
Router::new()
|
Router::new()
|
||||||
.route("/messages/send", post(send_message))
|
.route("/messages/send", post(send_message))
|
||||||
.route("/messages/poll/{fingerprint}", get(poll_messages))
|
.route("/messages/poll/:fingerprint", get(poll_messages))
|
||||||
.route("/messages/{id}/ack", delete(ack_message))
|
.route("/messages/:id/ack", delete(ack_message))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Deserialize)]
|
#[derive(Deserialize)]
|
||||||
|
|||||||
Reference in New Issue
Block a user