auths_cli/adapters/
ssh_agent.rs1use auths_core::ports::ssh_agent::{SshAgentError, SshAgentPort};
4use std::path::Path;
5use std::process::Command;
6
7pub struct MacOsSshAgentAdapter;
15
16impl SshAgentPort for MacOsSshAgentAdapter {
17 fn register_key(&self, key_path: &Path) -> Result<(), SshAgentError> {
18 let output = Command::new("ssh-add")
19 .arg(key_path)
20 .output()
21 .map_err(|e| SshAgentError::IoError(e.to_string()))?;
22
23 if output.status.success() {
24 return Ok(());
25 }
26
27 let stderr = String::from_utf8_lossy(&output.stderr).to_lowercase();
28 if stderr.contains("could not open a connection")
29 || stderr.contains("connection refused")
30 || stderr.contains("communication with agent failed")
31 {
32 Err(SshAgentError::NotAvailable(
33 String::from_utf8_lossy(&output.stderr).trim().to_string(),
34 ))
35 } else {
36 Err(SshAgentError::CommandFailed(
37 String::from_utf8_lossy(&output.stderr).trim().to_string(),
38 ))
39 }
40 }
41}