fetch with optional --relay flags.

This commit is contained in:
fiatjaf 2023-10-20 21:01:11 -03:00
parent 757a6eb313
commit ffa41046fd
No known key found for this signature in database
GPG Key ID: BAD43C4BE5C1A3A1
3 changed files with 38 additions and 26 deletions

View File

@ -3,7 +3,6 @@ package main
import ( import (
"encoding/hex" "encoding/hex"
"fmt" "fmt"
"net/url"
"strings" "strings"
"github.com/nbd-wtf/go-nostr/nip19" "github.com/nbd-wtf/go-nostr/nip19"
@ -220,22 +219,3 @@ func validate32BytesHex(target string) error {
return nil return nil
} }
func validateRelayURLs(wsurls []string) error {
for _, wsurl := range wsurls {
u, err := url.Parse(wsurl)
if err != nil {
return fmt.Errorf("invalid relay url '%s': %s", wsurl, err)
}
if u.Scheme != "ws" && u.Scheme != "wss" {
return fmt.Errorf("relay url must use wss:// or ws:// schemes, got '%s'", wsurl)
}
if u.Host == "" {
return fmt.Errorf("relay url '%s' is missing the hostname", wsurl)
}
}
return nil
}

View File

@ -12,8 +12,16 @@ import (
var fetch = &cli.Command{ var fetch = &cli.Command{
Name: "fetch", Name: "fetch",
Usage: "fetches events related to the given nip19 code from the included relay hints", Usage: "fetches events related to the given nip19 code from the included relay hints",
Description: ``, Description: `example usage:
Flags: []cli.Flag{}, nak fetch nevent1qqsxrwm0hd3s3fddh4jc2574z3xzufq6qwuyz2rvv3n087zvym3dpaqprpmhxue69uhhqatzd35kxtnjv4kxz7tfdenju6t0xpnej4
echo npub1h8spmtw9m2huyv6v2j2qd5zv956z2zdugl6mgx02f2upffwpm3nqv0j4ps | nak fetch --relay wss://relay.nostr.band`,
Flags: []cli.Flag{
&cli.StringSliceFlag{
Name: "relay",
Aliases: []string{"r"},
Usage: "also use these relays to fetch from",
},
},
ArgsUsage: "[nip19code]", ArgsUsage: "[nip19code]",
Action: func(c *cli.Context) error { Action: func(c *cli.Context) error {
filter := nostr.Filter{} filter := nostr.Filter{}
@ -24,7 +32,10 @@ var fetch = &cli.Command{
return err return err
} }
var relays []string relays := c.StringSlice("relay")
if err := validateRelayURLs(relays); err != nil {
return err
}
var authorHint string var authorHint string
switch prefix { switch prefix {

View File

@ -2,7 +2,9 @@ package main
import ( import (
"bytes" "bytes"
"fmt"
"io" "io"
"net/url"
"os" "os"
"github.com/urfave/cli/v2" "github.com/urfave/cli/v2"
@ -27,3 +29,22 @@ func getStdinOrFirstArgument(c *cli.Context) string {
} }
return getStdin() return getStdin()
} }
func validateRelayURLs(wsurls []string) error {
for _, wsurl := range wsurls {
u, err := url.Parse(wsurl)
if err != nil {
return fmt.Errorf("invalid relay url '%s': %s", wsurl, err)
}
if u.Scheme != "ws" && u.Scheme != "wss" {
return fmt.Errorf("relay url must use wss:// or ws:// schemes, got '%s'", wsurl)
}
if u.Host == "" {
return fmt.Errorf("relay url '%s' is missing the hostname", wsurl)
}
}
return nil
}