MCPcopy Create free account
hub / github.com/NVIDIA/OpenShell / rewrite_request_line

Function rewrite_request_line

crates/openshell-core/src/secrets.rs:697–761  ·  view source on GitHub ↗
(
    line: &str,
    resolver: &SecretResolver,
)

Source from the content-addressed store, hash-verified

695// output) are intentionally distinct nouns; renaming would obscure intent.
696#[allow(clippy::similar_names)]
697fn rewrite_request_line(
698 line: &str,
699 resolver: &SecretResolver,
700) -> Result<RewriteLineResult, UnresolvedPlaceholderError> {
701 // Request line format: METHOD SP REQUEST-URI SP HTTP-VERSION
702 let mut parts = line.splitn(3, ' ');
703 let unchanged = || {
704 Ok(RewriteLineResult {
705 line: line.to_string(),
706 redacted_target: None,
707 })
708 };
709 let Some(method) = parts.next() else {
710 return unchanged();
711 };
712 let Some(uri) = parts.next() else {
713 return unchanged();
714 };
715 let Some(version) = parts.next() else {
716 return unchanged();
717 };
718
719 // Only rewrite if the URI contains a placeholder or a provider-shaped
720 // credential alias, including percent-encoded canonical placeholders.
721 if !contains_reserved_credential_marker(uri) {
722 return unchanged();
723 }
724
725 // Split URI into path and query
726 let (path, query) = match uri.split_once('?') {
727 Some((p, q)) => (p, Some(q)),
728 None => (uri, None),
729 };
730
731 // Rewrite path segments
732 let (resolved_path, redacted_path) = match rewrite_uri_path(path, resolver)? {
733 Some((resolved, redacted)) => (resolved, redacted),
734 None => (path.to_string(), path.to_string()),
735 };
736
737 // Rewrite query params
738 let (resolved_query, redacted_query) = match query {
739 Some(q) => match rewrite_uri_query_params(q, resolver)? {
740 Some((resolved, redacted)) => (Some(resolved), Some(redacted)),
741 None => (Some(q.to_string()), Some(q.to_string())),
742 },
743 None => (None, None),
744 };
745
746 // Reassemble
747 let resolved_uri = if let Some(q) = resolved_query.as_ref() {
748 format!("{resolved_path}?{q}")
749 } else {
750 resolved_path
751 };
752 let redacted_uri = match &redacted_query {
753 Some(q) => format!("{redacted_path}?{q}"),
754 None => redacted_path,

Callers 1

Calls 4

rewrite_uri_pathFunction · 0.85
rewrite_uri_query_paramsFunction · 0.85
nextMethod · 0.45

Tested by

no test coverage detected