validate and normalize relay urls received from kind 3 and 10002.

This commit is contained in:
fiatjaf 2023-07-08 08:16:30 -03:00
parent 82a51f149a
commit c0c20b8401
No known key found for this signature in database
GPG Key ID: BAD43C4BE5C1A3A1
2 changed files with 25 additions and 0 deletions

View File

@ -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,
}

View File

@ -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
}