diff --git a/sdk/relays.go b/sdk/relays.go index e8eb97f..79aea01 100644 --- a/sdk/relays.go +++ b/sdk/relays.go @@ -56,6 +56,11 @@ func ParseRelaysFromKind10002(evt *nostr.Event) []Relay { result := make([]Relay, 0, len(evt.Tags)) for _, tag := range evt.Tags { if u := tag.Value(); u != "" && tag[0] == "r" { + if !nostr.IsValidRelayURL(u) { + continue + } + u := nostr.NormalizeURL(u) + relay := Relay{ URL: u, } @@ -88,6 +93,11 @@ func ParseRelaysFromKind3(evt *nostr.Event) []Relay { results := make([]Relay, len(items)) i := 0 for u, item := range items { + if !nostr.IsValidRelayURL(u) { + continue + } + u := nostr.NormalizeURL(u) + relay := Relay{ URL: u, } diff --git a/utils.go b/utils.go index d06d6c6..44d36ea 100644 --- a/utils.go +++ b/utils.go @@ -1,6 +1,7 @@ package nostr import ( + "net/url" "strings" "golang.org/x/exp/constraints" @@ -129,3 +130,17 @@ func InsertEventIntoDescendingList(sortedArray []*Event, event *Event) []*Event return sortedArray } + +func IsValidRelayURL(u string) bool { + parsed, err := url.Parse(u) + if err != nil { + return false + } + if parsed.Scheme != "wss" && parsed.Scheme != "ws" { + return false + } + if len(strings.Split(parsed.Host, ".")) < 2 { + return false + } + return true +}