Replying to 79be667e...

From 3fc1a99b85fb20f78b1ea28e5daa75eef4688da5 Mon Sep 17 00:00:00 2001

From: Laszlo Megyer

Date: Mon, 2 Dec 2024 13:20:13 +0100

Subject: [PATCH 1/2] Parse NIP-05 address from a git remote URL

The nip05 address is stored as it is, because we can't run async code in

from_str().

We need to add an async resolve_nip05() to NostrUrlDecoded.

---

src/lib/git/nostr_url.rs | 27 +++++++++++++++++++--------

src/lib/repo_ref.rs | 1 +

2 files changed, 20 insertions(+), 8 deletions(-)

diff --git a/src/lib/git/nostr_url.rs b/src/lib/git/nostr_url.rs

index a501765..be4a825 100644

--- a/src/lib/git/nostr_url.rs

+++ b/src/lib/git/nostr_url.rs

@@ -59,6 +59,7 @@ pub struct NostrUrlDecoded {

pub coordinates: HashSet,

pub protocol: Option,

pub user: Option,

+ pub nip05: Option,

}

impl fmt::Display for NostrUrlDecoded {

@@ -98,6 +99,7 @@ impl std::str::FromStr for NostrUrlDecoded {

let mut protocol = None;

let mut user = None;

let mut relays = vec![];

+ let mut nip05 = None;

if !url.starts_with("nostr://") {

bail!("nostr git url must start with nostr://");

@@ -134,16 +136,24 @@ impl std::str::FromStr for NostrUrlDecoded {

.split('/')

.collect();

+ // split first part into user if present and hostname

+ let part = parts.first().context(INCORRECT_NOSTR_URL_FORMAT_ERROR)?;

+ let hostname = if let Some(at_index) = part.find('@') {

+ // TODO throw error if user already set

+ user = Some(part[..at_index].to_string());

+ &part[at_index + 1..]

+ } else {

+ part

+ };

+

+ // check if it uses a NIP-05 address

+ if hostname.contains('.') {

+ nip05 = Some(part.to_string())

+ }

+

// extract optional protocol

if protocol.is_none() {

- let part = parts.first().context(INCORRECT_NOSTR_URL_FORMAT_ERROR)?;

- let protocol_str = if let Some(at_index) = part.find('@') {

- user = Some(part[..at_index].to_string());

- &part[at_index + 1..]

- } else {

- part

- };

- protocol = match protocol_str {

+ protocol = match hostname {

"ssh" => Some(ServerProtocol::Ssh),

"https" => Some(ServerProtocol::Https),

"http" => Some(ServerProtocol::Http),

@@ -196,6 +206,7 @@ impl std::str::FromStr for NostrUrlDecoded {

coordinates,

protocol,

user,

+ nip05,

})

}

}

diff --git a/src/lib/repo_ref.rs b/src/lib/repo_ref.rs

index 69fbe64..877d1ee 100644

--- a/src/lib/repo_ref.rs

+++ b/src/lib/repo_ref.rs

@@ -229,6 +229,7 @@ impl RepoRef {

coordinates: HashSet::from_iter(vec![self.coordinate_with_hint()]),

protocol: None,

user: None,

+ nip05: None,

}

)

}

--

libgit2 1.8.1

Actually, Chris is a guy with a very weak sec ("1").

Reply to this note

Please Login to reply.