upleb.uk

Public git repos — served from a NIP-34 GRASP relay at git.upleb.uk

summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDanConwayDev <DanConwayDev@protonmail.com>2024-08-30 10:05:41 +0100
committerDanConwayDev <DanConwayDev@protonmail.com>2024-08-30 10:09:46 +0100
commitf735aeb69942546b4d6c2ae1156d20db2edb24f3 (patch)
tree122b060ce96394a0c2c6b81a2630bb9b77f09970 /src
parent23c5aadae9b4dc53f00e58f9b0728048c45843a8 (diff)
fix(remote): add auth for ssh `list` and `fetch`
as authentication is always required if clone url is ssh
Diffstat (limited to 'src')
-rw-r--r--src/git_remote_helper.rs19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/git_remote_helper.rs b/src/git_remote_helper.rs
index 4d34850..c624857 100644
--- a/src/git_remote_helper.rs
+++ b/src/git_remote_helper.rs
@@ -305,8 +305,14 @@ fn list_from_remote(
305 git_repo: &Repo, 305 git_repo: &Repo,
306 git_server_remote_url: &str, 306 git_server_remote_url: &str,
307) -> Result<HashMap<String, String>> { 307) -> Result<HashMap<String, String>> {
308 let git_config = git_repo.git_repo.config()?;
309
308 let mut git_server_remote = git_repo.git_repo.remote_anonymous(git_server_remote_url)?; 310 let mut git_server_remote = git_repo.git_repo.remote_anonymous(git_server_remote_url)?;
309 git_server_remote.connect(git2::Direction::Fetch)?; 311 // authentication may be required
312 let auth = GitAuthenticator::default();
313 let mut remote_callbacks = git2::RemoteCallbacks::new();
314 remote_callbacks.credentials(auth.credentials(&git_config));
315 git_server_remote.connect_auth(git2::Direction::Fetch, Some(remote_callbacks), None)?;
310 let mut state = HashMap::new(); 316 let mut state = HashMap::new();
311 for head in git_server_remote.list()? { 317 for head in git_server_remote.list()? {
312 if let Some(symbolic_reference) = head.symref_target() { 318 if let Some(symbolic_reference) = head.symref_target() {
@@ -560,9 +566,16 @@ fn fetch_from_git_server(
560 oids: &[String], 566 oids: &[String],
561 git_server_url: &str, 567 git_server_url: &str,
562) -> Result<()> { 568) -> Result<()> {
569 let git_config = git_repo.config()?;
570
563 let mut git_server_remote = git_repo.remote_anonymous(git_server_url)?; 571 let mut git_server_remote = git_repo.remote_anonymous(git_server_url)?;
564 git_server_remote.connect(git2::Direction::Fetch)?; 572 // authentication may be required (and will be requird if clone url is ssh)
565 git_server_remote.download(oids, None)?; 573 let auth = GitAuthenticator::default();
574 let mut fetch_options = git2::FetchOptions::new();
575 let mut remote_callbacks = git2::RemoteCallbacks::new();
576 remote_callbacks.credentials(auth.credentials(&git_config));
577 fetch_options.remote_callbacks(remote_callbacks);
578 git_server_remote.download(oids, Some(&mut fetch_options))?;
566 git_server_remote.disconnect()?; 579 git_server_remote.disconnect()?;
567 Ok(()) 580 Ok(())
568} 581}