fix(core): restore credential broker integration scope

Co-authored-by: Codex noreply@openai.com
This commit is contained in:
viyatb-oai
2026-07-07 11:04:25 -07:00
committed by Winston Howes
co-authored by github
parent d4e3f91062
commit 336612bc25
8 changed files with 0 additions and 169 deletions
@@ -359,7 +359,6 @@ pub struct NetworkRequirementsToml {
pub allow_upstream_proxy: Option<bool>,
pub dangerously_allow_non_loopback_proxy: Option<bool>,
pub dangerously_allow_all_unix_sockets: Option<bool>,
pub dangerously_allow_plaintext_credential_injection: Option<bool>,
pub domains: Option<NetworkDomainPermissionsToml>,
/// When true, only managed `allowed_domains` are respected while managed
/// network enforcement is active. User allowlist entries are ignored.
@@ -376,7 +375,6 @@ struct RawNetworkRequirementsToml {
allow_upstream_proxy: Option<bool>,
dangerously_allow_non_loopback_proxy: Option<bool>,
dangerously_allow_all_unix_sockets: Option<bool>,
dangerously_allow_plaintext_credential_injection: Option<bool>,
domains: Option<NetworkDomainPermissionsToml>,
#[serde(default)]
allowed_domains: Option<Vec<String>>,
@@ -404,7 +402,6 @@ impl<'de> Deserialize<'de> for NetworkRequirementsToml {
allow_upstream_proxy,
dangerously_allow_non_loopback_proxy,
dangerously_allow_all_unix_sockets,
dangerously_allow_plaintext_credential_injection,
domains,
allowed_domains,
managed_allowed_domains_only,
@@ -433,7 +430,6 @@ impl<'de> Deserialize<'de> for NetworkRequirementsToml {
allow_upstream_proxy,
dangerously_allow_non_loopback_proxy,
dangerously_allow_all_unix_sockets,
dangerously_allow_plaintext_credential_injection,
domains: domains
.or_else(|| legacy_domain_permissions_from_lists(allowed_domains, denied_domains)),
managed_allowed_domains_only,
@@ -485,7 +481,6 @@ pub struct NetworkConstraints {
pub allow_upstream_proxy: Option<bool>,
pub dangerously_allow_non_loopback_proxy: Option<bool>,
pub dangerously_allow_all_unix_sockets: Option<bool>,
pub dangerously_allow_plaintext_credential_injection: Option<bool>,
pub domains: Option<NetworkDomainPermissionsToml>,
/// When true, only managed `allowed_domains` are respected while managed
/// network enforcement is active. User allowlist entries are ignored.
@@ -513,7 +508,6 @@ impl From<NetworkRequirementsToml> for NetworkConstraints {
allow_upstream_proxy,
dangerously_allow_non_loopback_proxy,
dangerously_allow_all_unix_sockets,
dangerously_allow_plaintext_credential_injection,
domains,
managed_allowed_domains_only,
unix_sockets,
@@ -526,7 +520,6 @@ impl From<NetworkRequirementsToml> for NetworkConstraints {
allow_upstream_proxy,
dangerously_allow_non_loopback_proxy,
dangerously_allow_all_unix_sockets,
dangerously_allow_plaintext_credential_injection,
domains,
managed_allowed_domains_only,
unix_sockets,
@@ -3331,7 +3324,6 @@ command = "python3 /enterprise/hooks/pre.py"
enabled = true
allow_upstream_proxy = false
dangerously_allow_all_unix_sockets = true
dangerously_allow_plaintext_credential_injection = false
managed_allowed_domains_only = true
allow_local_binding = false
@@ -3361,12 +3353,6 @@ command = "python3 /enterprise/hooks/pre.py"
sourced_network.value.dangerously_allow_all_unix_sockets,
Some(true)
);
assert_eq!(
sourced_network
.value
.dangerously_allow_plaintext_credential_injection,
Some(false)
);
assert_eq!(
sourced_network.value.domains.as_ref(),
Some(&NetworkDomainPermissionsToml {
@@ -249,16 +249,6 @@ impl NetworkProxySpec {
constraints.dangerously_allow_all_unix_sockets =
Some(dangerously_allow_all_unix_sockets);
}
if let Some(dangerously_allow_plaintext_credential_injection) =
requirements.dangerously_allow_plaintext_credential_injection
{
config
.network
.dangerously_allow_plaintext_credential_injection =
dangerously_allow_plaintext_credential_injection;
constraints.dangerously_allow_plaintext_credential_injection =
Some(dangerously_allow_plaintext_credential_injection);
}
let managed_allowed_domains = if hard_deny_allowlist_misses {
Some(
requirements
@@ -40,48 +40,6 @@ fn build_state_with_audit_metadata_threads_metadata_to_state() {
assert_eq!(state.audit_metadata(), &metadata);
}
#[test]
fn managed_requirement_disables_plaintext_credential_injection() {
let mut config = NetworkProxyConfig::default();
config
.network
.dangerously_allow_plaintext_credential_injection = true;
let requirements = NetworkConstraints {
dangerously_allow_plaintext_credential_injection: Some(false),
..Default::default()
};
let spec = NetworkProxySpec::from_config_and_constraints(
config,
Some(requirements),
&PermissionProfile::workspace_write(),
)
.expect("managed requirement should override the user setting");
assert!(
!spec
.config
.network
.dangerously_allow_plaintext_credential_injection
);
assert_eq!(
spec.constraints
.dangerously_allow_plaintext_credential_injection,
Some(false)
);
let mut candidate = spec.config.clone();
candidate
.network
.dangerously_allow_plaintext_credential_injection = true;
let err = validate_policy_against_constraints(&candidate, &spec.constraints)
.expect_err("managed constraint should reject re-enabling plaintext injection");
assert_eq!(
err.to_string(),
"invalid value for network.dangerously_allow_plaintext_credential_injection: true (allowed false (disabled by managed config))"
);
}
#[test]
fn requirements_allowed_domains_are_a_baseline_for_user_allowlist() {
let mut config = NetworkProxyConfig::default();
@@ -159,14 +159,6 @@ fn apply_network_constraints(network: NetworkToml, constraints: &mut NetworkProx
if let Some(dangerously_allow_all_unix_sockets) = network.dangerously_allow_all_unix_sockets {
constraints.dangerously_allow_all_unix_sockets = Some(dangerously_allow_all_unix_sockets);
}
if let Some(dangerously_allow_plaintext_credential_injection) = network
.mitm
.as_ref()
.and_then(|mitm| mitm.dangerously_allow_plaintext_credential_injection)
{
constraints.dangerously_allow_plaintext_credential_injection =
Some(dangerously_allow_plaintext_credential_injection);
}
if let Some(domains) = network.domains.as_ref() {
let mut config = NetworkProxyConfig::default();
if let Some(allowed_domains) = constraints.allowed_domains.take() {
@@ -325,32 +325,6 @@ dangerously_allow_all_unix_sockets = true
assert_eq!(constraints.dangerously_allow_all_unix_sockets, Some(true));
}
#[test]
fn apply_network_constraints_includes_plaintext_credential_injection_flag() {
let config: toml::Value = toml::from_str(
r#"
default_permissions = "dev"
[permissions.dev.network.mitm]
dangerously_allow_plaintext_credential_injection = false
"#,
)
.expect("permissions profile should parse");
let network = selected_network_from_tables(
network_tables_from_toml(&config).expect("permissions profile should deserialize"),
)
.expect("permissions profile should select a network table")
.expect("network table should be present");
let mut constraints = NetworkProxyConstraints::default();
apply_network_constraints(network, &mut constraints);
assert_eq!(
constraints.dangerously_allow_plaintext_credential_injection,
Some(false)
);
}
#[test]
fn selected_network_from_tables_ignores_builtin_profile_without_permissions_table() {
let config: toml::Value = toml::from_str(
-38
View File
@@ -1883,44 +1883,6 @@ mod tests {
assert!(validate_policy_against_constraints(&config, &constraints).is_err());
}
#[test]
fn validate_policy_against_constraints_disallows_plaintext_credential_injection_without_managed_opt_in()
{
let constraints = NetworkProxyConstraints {
dangerously_allow_plaintext_credential_injection: Some(false),
..NetworkProxyConstraints::default()
};
let config = NetworkProxyConfig {
network: NetworkProxySettings {
enabled: true,
dangerously_allow_plaintext_credential_injection: true,
..NetworkProxySettings::default()
},
};
assert!(validate_policy_against_constraints(&config, &constraints).is_err());
}
#[test]
fn validate_policy_against_constraints_allows_plaintext_credential_injection_with_managed_opt_in()
{
let constraints = NetworkProxyConstraints {
dangerously_allow_plaintext_credential_injection: Some(true),
..NetworkProxyConstraints::default()
};
let config = NetworkProxyConfig {
network: NetworkProxySettings {
enabled: true,
dangerously_allow_plaintext_credential_injection: true,
..NetworkProxySettings::default()
},
};
assert!(validate_policy_against_constraints(&config, &constraints).is_ok());
}
#[test]
fn validate_policy_against_constraints_disallows_allow_all_unix_sockets_when_allowlist_is_managed()
{
-23
View File
@@ -30,7 +30,6 @@ pub struct NetworkProxyConstraints {
pub allow_upstream_proxy: Option<bool>,
pub dangerously_allow_non_loopback_proxy: Option<bool>,
pub dangerously_allow_all_unix_sockets: Option<bool>,
pub dangerously_allow_plaintext_credential_injection: Option<bool>,
pub allowed_domains: Option<Vec<String>>,
pub allowlist_expansion_enabled: Option<bool>,
pub denied_domains: Option<Vec<String>>,
@@ -217,28 +216,6 @@ pub fn validate_policy_against_constraints(
},
)?;
let allow_plaintext_credential_injection =
constraints.dangerously_allow_plaintext_credential_injection;
validate(
config
.network
.dangerously_allow_plaintext_credential_injection,
move |candidate| match allow_plaintext_credential_injection {
Some(true) | None => Ok(()),
Some(false) => {
if *candidate {
Err(invalid_value(
"network.dangerously_allow_plaintext_credential_injection",
"true",
"false (disabled by managed config)",
))
} else {
Ok(())
}
}
},
)?;
if let Some(allow_local_binding) = constraints.allow_local_binding {
validate(config.network.allow_local_binding, move |candidate| {
if *candidate && !allow_local_binding {
-8
View File
@@ -468,7 +468,6 @@ fn format_network_constraints(network: &NetworkConstraints) -> String {
allow_upstream_proxy,
dangerously_allow_non_loopback_proxy,
dangerously_allow_all_unix_sockets,
dangerously_allow_plaintext_credential_injection,
domains,
managed_allowed_domains_only,
unix_sockets,
@@ -497,13 +496,6 @@ fn format_network_constraints(network: &NetworkConstraints) -> String {
"dangerously_allow_all_unix_sockets={dangerously_allow_all_unix_sockets}"
));
}
if let Some(dangerously_allow_plaintext_credential_injection) =
dangerously_allow_plaintext_credential_injection
{
parts.push(format!(
"dangerously_allow_plaintext_credential_injection={dangerously_allow_plaintext_credential_injection}"
));
}
if let Some(domains) = domains {
parts.push(format!(
"domains={}",