add a per-agent egress log mode
This commit is contained in:
parent
9140d063d7
commit
e46ad07226
1 changed files with 637 additions and 31 deletions
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue