Skip to content

Commit 9d934d6

Browse files
committed
fix(external-ssh-signer): apply fixes
1 parent ebd8fc1 commit 9d934d6

File tree

2 files changed

+15
-9
lines changed

2 files changed

+15
-9
lines changed

Diff for: asyncgit/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,10 @@ rayon = "1.10"
3232
rayon-core = "1.12"
3333
scopetime = { path = "../scopetime", version = "0.1" }
3434
serde = { version = "1.0", features = ["derive"] }
35+
tempfile = "3"
3536
thiserror = "1.0"
3637
unicode-truncate = "1.0"
3738
url = "2.5"
38-
tempfile = "3"
3939

4040
[dev-dependencies]
4141
env_logger = "0.11"

Diff for: asyncgit/src/sync/sign.rs

+14-8
Original file line numberDiff line numberDiff line change
@@ -183,9 +183,7 @@ impl SignBuilder {
183183
signing_key: &str,
184184
) -> Result<PathBuf, SignBuilderError> {
185185
let key_path = PathBuf::from(signing_key);
186-
if key_path.is_file() {
187-
Ok(key_path)
188-
} else if signing_key.starts_with("ssh-") {
186+
if signing_key.starts_with("ssh-") {
189187
use std::io::Write;
190188
use tempfile::NamedTempFile;
191189
let mut temp_file =
@@ -200,9 +198,7 @@ impl SignBuilder {
200198
})?;
201199
Ok(temp_file.1)
202200
} else {
203-
Err(SignBuilderError::SSHSigningKey(String::from(
204-
"ssh key could not been resolved. Either the key is not a file or the key is not a valid public ssh key",
205-
)))
201+
Ok(key_path)
206202
}
207203
}
208204
}
@@ -306,6 +302,10 @@ impl Sign for SSHSign {
306302
.arg("-f")
307303
.arg(&self.signing_key);
308304

305+
if &self.program == "ssh-keygen" {
306+
cmd.arg("-P").arg("\"\"");
307+
}
308+
309309
log::trace!("signing command: {cmd:?}");
310310

311311
let mut child = cmd
@@ -319,6 +319,8 @@ impl Sign for SSHSign {
319319
.map_err(|e| SignError::WriteBuffer(e.to_string()))?;
320320
drop(stdin);
321321

322+
//hllo
323+
322324
let output = child
323325
.wait_with_output()
324326
.map_err(|e| SignError::Output(e.to_string()))?;
@@ -332,11 +334,15 @@ impl Sign for SSHSign {
332334
}
333335

334336
if !output.status.success() {
337+
let error_msg = std::str::from_utf8(&output.stderr)
338+
.unwrap_or("[error could not be read from stderr]");
339+
if error_msg.contains("passphrase") {
340+
return Err(SignError::Shellout(String::from("Currently, we only support unencrypted pairs of ssh keys in disk or ssh-agents")));
341+
}
335342
return Err(SignError::Shellout(format!(
336343
"failed to sign data, program '{}' exited non-zero: {}",
337344
&self.program,
338-
std::str::from_utf8(&output.stderr)
339-
.unwrap_or("[error could not be read from stderr]")
345+
error_msg
340346
)));
341347
}
342348

0 commit comments

Comments
 (0)