mod body;
pub(super) mod diagnostics;
mod form_body;
pub(super) mod headers;
mod json_body;
mod multipart_body;
mod text_body;
mod url;
pub(in crate::formats::http) mod url_rules;
use http::HeaderMap;
use http::HeaderValue;
use super::AdmittedBody;
use super::HttpRendered;
use crate::RedactionPolicy;
use crate::formats::http::BodyCapture;
use crate::formats::http::FieldRedactor;
pub(in crate::formats::http) struct HttpPolicyExecutor<'policy> {
policy: &'policy RedactionPolicy,
}
impl HttpPolicyExecutor<'_> {
#[must_use]
#[inline(always)]
pub(super) fn header_field_redactor(&self) -> FieldRedactor<'_> {
FieldRedactor::new(
self.policy.rules(),
self.policy.http().header_rules(),
self.policy.masking(),
)
}
#[must_use]
#[inline(always)]
pub(super) fn query_field_redactor(&self) -> FieldRedactor<'_> {
FieldRedactor::new(
self.policy.rules(),
self.policy.http().query_rules(),
self.policy.masking(),
)
}
#[must_use]
#[inline(always)]
pub(super) fn body_field_redactor(&self) -> FieldRedactor<'_> {
FieldRedactor::new(
self.policy.rules(),
self.policy.http().body_rules(),
self.policy.masking(),
)
}
}
#[must_use]
#[inline(always)]
pub(crate) fn redact_url_str_with_policy(policy: &RedactionPolicy, input: &str, output_limit: usize) -> HttpRendered {
HttpPolicyExecutor { policy }.redact_url_str(input, output_limit)
}
#[must_use]
#[inline(always)]
pub(crate) fn redact_headers_with_policy(
policy: &RedactionPolicy,
headers: &HeaderMap,
output_limit: usize,
) -> HttpRendered {
HttpPolicyExecutor { policy }.redact_headers_with_limit(headers, output_limit)
}
#[must_use]
pub(in crate::formats::http) fn redact_admitted_body_with_policy(
policy: &RedactionPolicy,
capture: BodyCapture<'_>,
content_type: Option<&HeaderValue>,
admitted: AdmittedBody,
output_limit: usize,
) -> HttpRendered {
let (content_type, invalid_content_type) = match content_type {
Some(value) => match value.to_str() {
Ok(value) => (Some(value), false),
Err(_) => (None, true),
},
None => (None, false),
};
HttpPolicyExecutor { policy }.redact_body_with_content_type_and_admission(
capture,
content_type,
invalid_content_type,
admitted,
output_limit,
)
}
#[must_use]
#[inline(always)]
pub(in crate::formats::http) fn redact_admitted_body_with_content_type_text_with_policy(
policy: &RedactionPolicy,
capture: BodyCapture<'_>,
content_type: Option<&str>,
admitted: AdmittedBody,
output_limit: usize,
) -> HttpRendered {
HttpPolicyExecutor { policy }.redact_body_with_content_type_and_admission(
capture,
content_type,
false,
admitted,
output_limit,
)
}