From 686604665395385600ef8f1b5238a775249552a1 Mon Sep 17 00:00:00 2001 From: DanConwayDev Date: Fri, 23 May 2025 10:01:29 +0100 Subject: feat: only try http(s) for ngit-relays otherwise it tries all the protocols and reprots on each --- src/bin/git_remote_nostr/fetch.rs | 7 +++++-- src/bin/git_remote_nostr/list.rs | 21 ++++++++++++++++----- src/bin/git_remote_nostr/push.rs | 9 +++++++-- src/bin/git_remote_nostr/utils.rs | 18 ++++++++++++++++-- 4 files changed, 44 insertions(+), 11 deletions(-) (limited to 'src/bin/git_remote_nostr') diff --git a/src/bin/git_remote_nostr/fetch.rs b/src/bin/git_remote_nostr/fetch.rs index 34a02fc..adc68b3 100644 --- a/src/bin/git_remote_nostr/fetch.rs +++ b/src/bin/git_remote_nostr/fetch.rs @@ -18,7 +18,7 @@ use ngit::{ }, git_events::tag_value, login::get_curent_user, - repo_ref::RepoRef, + repo_ref::{RepoRef, is_ngit_relay}, }; use nostr::nips::nip19; use nostr_sdk::{Event, ToBech32}; @@ -54,6 +54,7 @@ pub async fn run_fetch( git_server_url, &repo_ref.to_nostr_git_url(&None), &term, + is_ngit_relay(git_server_url, &repo_ref.ngit_relays()), ) { errors.push(error); } else { @@ -163,6 +164,7 @@ pub fn fetch_from_git_server( git_server_url: &str, decoded_nostr_url: &NostrUrlDecoded, term: &console::Term, + is_ngit_relay: bool, ) -> Result<()> { let already_have_oids = oids .iter() @@ -173,7 +175,8 @@ pub fn fetch_from_git_server( let server_url = git_server_url.parse::()?; - let protocols_to_attempt = get_read_protocols_to_try(git_repo, &server_url, decoded_nostr_url); + let protocols_to_attempt = + get_read_protocols_to_try(git_repo, &server_url, decoded_nostr_url, is_ngit_relay); let mut failed_protocols = vec![]; let mut success = false; diff --git a/src/bin/git_remote_nostr/list.rs b/src/bin/git_remote_nostr/list.rs index 2d233ae..bf16f89 100644 --- a/src/bin/git_remote_nostr/list.rs +++ b/src/bin/git_remote_nostr/list.rs @@ -13,7 +13,7 @@ use ngit::{ }, git_events::event_to_cover_letter, login::get_curent_user, - repo_ref, + repo_ref::{self, is_ngit_relay}, }; use nostr_sdk::hashes::sha1::Hash as Sha1Hash; use repo_ref::RepoRef; @@ -41,6 +41,7 @@ pub async fn run_list( git_repo, &repo_ref.git_server, &repo_ref.to_nostr_git_url(&None), + &repo_ref.ngit_relays(), ); let mut state = if let Some(nostr_state) = nostr_state { @@ -131,6 +132,7 @@ async fn get_open_and_draft_proposals_state( git_server_url, &repo_ref.to_nostr_git_url(&None), term, + is_ngit_relay(git_server_url, &repo_ref.ngit_relays()), ) .is_ok() { @@ -174,12 +176,19 @@ pub fn list_from_remotes( term: &console::Term, git_repo: &Repo, git_servers: &Vec, - decoded_nostr_url: &NostrUrlDecoded, // Add this parameter + decoded_nostr_url: &NostrUrlDecoded, + ngit_relays: &[String], ) -> HashMap> { let mut remote_states = HashMap::new(); let mut errors = HashMap::new(); for url in git_servers { - match list_from_remote(term, git_repo, url, decoded_nostr_url) { + match list_from_remote( + term, + git_repo, + url, + decoded_nostr_url, + is_ngit_relay(url, ngit_relays), + ) { Err(error) => { errors.insert(url, error); } @@ -195,10 +204,12 @@ pub fn list_from_remote( term: &console::Term, git_repo: &Repo, git_server_url: &str, - decoded_nostr_url: &NostrUrlDecoded, // Add this parameter + decoded_nostr_url: &NostrUrlDecoded, + is_ngit_relay: bool, ) -> Result> { let server_url = git_server_url.parse::()?; - let protocols_to_attempt = get_read_protocols_to_try(git_repo, &server_url, decoded_nostr_url); + let protocols_to_attempt = + get_read_protocols_to_try(git_repo, &server_url, decoded_nostr_url, is_ngit_relay); let mut failed_protocols = vec![]; let mut remote_state: Option> = None; diff --git a/src/bin/git_remote_nostr/push.rs b/src/bin/git_remote_nostr/push.rs index 4eae92f..a34d729 100644 --- a/src/bin/git_remote_nostr/push.rs +++ b/src/bin/git_remote_nostr/push.rs @@ -27,7 +27,7 @@ use ngit::{ }, git_events::{self, event_to_cover_letter, get_event_root}, login::{self, user::UserRef}, - repo_ref::{self, get_repo_config_from_yaml}, + repo_ref::{self, get_repo_config_from_yaml, is_ngit_relay}, repo_state, }; use nostr::nips::nip10::Marker; @@ -49,6 +49,7 @@ use crate::{ }, }; +#[allow(clippy::too_many_lines)] pub async fn run_push( git_repo: &Repo, repo_ref: &RepoRef, @@ -79,6 +80,7 @@ pub async fn run_push( git_repo, &repo_ref.git_server, &repo_ref.to_nostr_git_url(&None), + &repo_ref.ngit_relays(), ) }); @@ -161,6 +163,7 @@ pub async fn run_push( &repo_ref.to_nostr_git_url(&None), &remote_refspecs, &term, + is_ngit_relay(&git_server_url, &repo_ref.ngit_relays()), ); } } @@ -412,9 +415,11 @@ fn push_to_remote( decoded_nostr_url: &NostrUrlDecoded, remote_refspecs: &[String], term: &Term, + is_ngit_relay: bool, ) -> Result<()> { let server_url = git_server_url.parse::()?; - let protocols_to_attempt = get_write_protocols_to_try(git_repo, &server_url, decoded_nostr_url); + let protocols_to_attempt = + get_write_protocols_to_try(git_repo, &server_url, decoded_nostr_url, is_ngit_relay); let mut failed_protocols = vec![]; let mut success = false; diff --git a/src/bin/git_remote_nostr/utils.rs b/src/bin/git_remote_nostr/utils.rs index 3a9f07d..2c77baa 100644 --- a/src/bin/git_remote_nostr/utils.rs +++ b/src/bin/git_remote_nostr/utils.rs @@ -216,8 +216,15 @@ pub fn get_read_protocols_to_try( git_repo: &Repo, server_url: &CloneUrl, decoded_nostr_url: &NostrUrlDecoded, + is_ngit_relay: bool, ) -> Vec { - if server_url.protocol() == ServerProtocol::Filesystem { + if is_ngit_relay { + if server_url.protocol() == ServerProtocol::Http { + vec![(ServerProtocol::UnauthHttp)] + } else { + vec![(ServerProtocol::UnauthHttps)] + } + } else if server_url.protocol() == ServerProtocol::Filesystem { vec![(ServerProtocol::Filesystem)] } else if let Some(protocol) = &decoded_nostr_url.protocol { vec![protocol.clone()] @@ -254,8 +261,15 @@ pub fn get_write_protocols_to_try( git_repo: &Repo, server_url: &CloneUrl, decoded_nostr_url: &NostrUrlDecoded, + is_ngit_relay: bool, ) -> Vec { - if server_url.protocol() == ServerProtocol::Filesystem { + if is_ngit_relay { + if server_url.protocol() == ServerProtocol::Http { + vec![(ServerProtocol::UnauthHttp)] + } else { + vec![(ServerProtocol::UnauthHttps)] + } + } else if server_url.protocol() == ServerProtocol::Filesystem { vec![(ServerProtocol::Filesystem)] } else if let Some(protocol) = &decoded_nostr_url.protocol { vec![protocol.clone()] -- cgit v1.2.3