nip61 and nip60 improvements and fixes.

This commit is contained in:
fiatjaf
2025-02-04 13:43:18 -03:00
parent 48ce669a3d
commit 1e4848d84d
6 changed files with 180 additions and 21 deletions

View File

@@ -1,6 +1,7 @@
package nostr
import (
"fmt"
"net/url"
"strings"
)
@@ -36,6 +37,49 @@ func NormalizeURL(u string) string {
return p.String()
}
// NormalizeHTTPURL does normalization of http(s):// URLs according to rfc3986. Don't use for relay URLs.
func NormalizeHTTPURL(s string) (string, error) {
s = strings.TrimSpace(s)
if !strings.HasPrefix(s, "http") {
s = "https://" + s
}
u, err := url.Parse(s)
if err != nil {
return s, err
}
if u.Scheme == "" {
u, err = url.Parse("http://" + s)
if err != nil {
return s, err
}
}
if strings.HasPrefix(s, "//") {
s = "http:" + s
}
var p int
switch u.Scheme {
case "http":
p = 80
case "https":
p = 443
}
u.Host = strings.TrimSuffix(u.Host, fmt.Sprintf(":%d", p))
v := u.Query()
u.RawQuery = v.Encode()
u.RawQuery, _ = url.QueryUnescape(u.RawQuery)
h := u.String()
h = strings.TrimSuffix(h, "/")
return h, nil
}
// NormalizeOKMessage takes a string message that is to be sent in an `OK` or `CLOSED` command
// and prefixes it with "<prefix>: " if it doesn't already have an acceptable prefix.
func NormalizeOKMessage(reason string, prefix string) string {