Add authorized remote pipe listen

This commit is contained in:
Eric Wendland 2026-05-19 19:21:42 +02:00
commit 3382899628
8 changed files with 322 additions and 21 deletions

View file

@ -280,6 +280,8 @@ pub enum ControlRequest {
},
PipeListen {
name: String,
node: Option<String>,
bearer_secret: Option<String>,
},
PipeConnect {
target: String,
@ -579,6 +581,15 @@ pub enum ControlResponse {
PipeListening {
listener: PipeListener,
},
PipeRemoteListening {
peer_node_id: String,
peer_agent_id: String,
endpoint_id: String,
listener: Option<PipeListener>,
allowed: bool,
reason: String,
note: String,
},
PipeConnected {
connection: PipeConnection,
},
@ -716,6 +727,12 @@ pub enum PeerControlRequest {
nonce: String,
bearer_proof: Option<BearerProof>,
},
PipeListen {
peer_card: PeerCard,
name: String,
nonce: String,
bearer_proof: Option<BearerProof>,
},
SshProxyConnect {
peer_card: PeerCard,
nonce: String,
@ -864,6 +881,18 @@ pub enum PeerControlResponse {
nonce: String,
note: String,
},
PipeListening {
node_id: String,
agent_id: String,
endpoint_id: String,
remote_endpoint_id: String,
listener: Option<PipeListener>,
allowed: bool,
reason: String,
evaluated_ops: usize,
nonce: String,
note: String,
},
SshProxyConnected {
node_id: String,
agent_id: String,
@ -1163,6 +1192,8 @@ mod tests {
let request = ControlRequest::PipeListen {
name: "inbox".to_owned(),
node: Some("node:peer".to_owned()),
bearer_secret: Some("bearer:test".to_owned()),
};
assert_eq!(
decode_request(&encode_request(&request).expect("encode")).expect("decode"),
@ -1256,6 +1287,25 @@ mod tests {
response
);
let response = ControlResponse::PipeRemoteListening {
peer_node_id: "node:peer".to_owned(),
peer_agent_id: "agent:peer".to_owned(),
endpoint_id: "endpoint:peer".to_owned(),
listener: Some(PipeListener {
id: "pipe:inbox".into(),
name: "inbox".to_owned(),
listened_at: geth_types::UnixMillis(1),
note: "remote".to_owned(),
}),
allowed: true,
reason: "direct grant".to_owned(),
note: "pipe listen".to_owned(),
};
assert_eq!(
decode_response(&encode_response(&response).expect("encode")).expect("decode"),
response
);
let request = ControlRequest::SshProxyConnect {
node: "node:peer".to_owned(),
bearer_secret: None,
@ -1662,6 +1712,28 @@ mod tests {
request
);
let request = PeerControlRequest::PipeListen {
peer_card: PeerCard {
node_id: "node:caller".into(),
agent_id: "agent:caller".into(),
endpoints: Vec::new(),
issued_at: geth_types::UnixMillis(1),
signature: geth_discovery::SignatureMetadata {
namespace: "geth.peer-card.v1@geth.local".to_owned(),
signer: "agent:caller".to_owned(),
public_key: "key".to_owned(),
signature: "sig".to_owned(),
},
},
name: "inbox".to_owned(),
nonce: "nonce".to_owned(),
bearer_proof: None,
};
assert_eq!(
decode_peer_request(&encode_peer_request(&request).expect("encode")).expect("decode"),
request
);
let response = PeerControlResponse::SshProxyConnected {
node_id: "node:peer".to_owned(),
agent_id: "agent:peer".to_owned(),