use axum::http::{HeaderMap, StatusCode};
fn normalized_source_trust(headers: &HeaderMap) -> Result<Option<String>, StatusCode> {
let Some(source_trust) = headers.get("x-rightkit-agent-source-trust") else {
return Ok(None);
};
let source_trust = source_trust.to_str().map_err(|_| StatusCode::BAD_REQUEST)?;
Ok(Some(
source_trust
.trim()
.chars()
.filter(|ch| !matches!(ch, '-' | '_' | ' '))
.collect::<String>()
.to_ascii_lowercase(),
))
}
pub fn lower_source_trust(
headers: &HeaderMap,
) -> Result<Option<rightkit_agent_engine_protocol::ContentTrust>, StatusCode> {
let Some(normalized) = normalized_source_trust(headers)? else {
return Ok(None);
};
match normalized.as_str() {
"remoteagentuntrusted" | "untrusted" => Ok(Some(
rightkit_agent_engine_protocol::ContentTrust::RemoteAgentUntrusted,
)),
"tooluntrusted" => Ok(Some(
rightkit_agent_engine_protocol::ContentTrust::ToolUntrusted,
)),
_ => Ok(None),
}
}
pub fn enforce_trusted_source_authority(headers: &HeaderMap) -> Result<(), StatusCode> {
if lower_source_trust(headers)?.is_some() {
return Err(StatusCode::FORBIDDEN);
}
Ok(())
}
#[cfg(test)]
mod authority_decision_matrix_tests {
use super::{enforce_trusted_source_authority, lower_source_trust};
use axum::http::{HeaderMap, StatusCode};
#[test]
fn absent_header_is_trusted_by_design() {
let headers = HeaderMap::new();
assert_eq!(lower_source_trust(&headers), Ok(None));
assert!(enforce_trusted_source_authority(&headers).is_ok());
}
#[test]
fn explicit_untrusted_header_is_rejected() {
let mut headers = HeaderMap::new();
headers.insert(
"x-rightkit-agent-source-trust",
"untrusted".parse().unwrap(),
);
assert_eq!(
enforce_trusted_source_authority(&headers),
Err(StatusCode::FORBIDDEN)
);
}
#[test]
fn explicit_remote_agent_untrusted_header_is_rejected() {
let mut headers = HeaderMap::new();
headers.insert(
"x-rightkit-agent-source-trust",
"remote-agent-untrusted".parse().unwrap(),
);
assert_eq!(
enforce_trusted_source_authority(&headers),
Err(StatusCode::FORBIDDEN)
);
}
#[test]
fn unrecognized_header_value_does_not_grant_lower_trust() {
let mut headers = HeaderMap::new();
headers.insert(
"x-rightkit-agent-source-trust",
"bogus-value".parse().unwrap(),
);
assert_eq!(lower_source_trust(&headers), Ok(None));
assert!(enforce_trusted_source_authority(&headers).is_ok());
}
}