Watch
0
0
Fork
You've already forked hyperhive
0

add a per-agent egress log mode

This commit is contained in:
atlas 2026-10-30 02:18:39 +01:00 • committed by mara
commit e46ad07226

View file

@ -77,6 +77,14 @@ pub struct AgentPermissions {
/// it through `swarm_queue_client::agent_permissions::unrestricted`.
#[serde(default, skip_serializing_if = "Option::is_none")]
pub unrestricted_internet: Option<bool>,
/// With `unrestricted_internet` `false`: the agent's requests to names its
/// lists do not allow go through, and squid logs each as `would_deny`
/// instead of refusing it. Absent is off. It is only ever `true` beside an
/// explicit `false`, so a hive that does not read this field keeps
/// enforcing. Read it through
/// `swarm_queue_client::agent_permissions::internet_mode`.
#[serde(default, skip_serializing_if = "Option::is_none")]
pub internet_log: Option<bool>,
}
/// What a hive sends once: the permissions its meta repo held, by agent.
@ -161,4 +169,30 @@ mod tests {
let unset: AgentPermissions = serde_json::from_str("{}").unwrap();
assert_eq!(unset.unrestricted_internet, None);
}
/// The log flag rides beside the old flag, which stays `false`, so a
/// reader without the field takes the record as a restricted agent.
#[test]
fn the_log_flag_keeps_the_old_flag_off_and_old_readers_enforce() {
// A reader built before the field existed.
#[derive(serde::Deserialize)]
struct Old {
unrestricted_internet: Option<bool>,
}
let log = AgentPermissions {
unrestricted_internet: Some(false),
internet_log: Some(true),
..AgentPermissions::default()
};
let wire = r#"{"unrestricted_internet":false,"internet_log":true}"#;
assert_eq!(serde_json::to_string(&log).unwrap(), wire);
assert_eq!(serde_json::from_str::<AgentPermissions>(wire).unwrap(), log);
let old: Old = serde_json::from_str(wire).unwrap();
assert_eq!(old.unrestricted_internet, Some(false));
// A record from before the field decodes with it off.
let before: AgentPermissions =
serde_json::from_str(r#"{"unrestricted_internet":false}"#).unwrap();
assert_eq!(before.internet_log, None);
}
}