From c0c20b840123f4e6e71a5031c920f7a6cb296750 Mon Sep 17 00:00:00 2001 From: fiatjaf Date: Sat, 8 Jul 2023 08:16:30 -0300 Subject: [PATCH] validate and normalize relay urls received from kind 3 and 10002. --- sdk/relays.go | 10 ++++++++++ utils.go | 15 +++++++++++++++ 2 files changed, 25 insertions(+) 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 +}