package main import ( "bytes" "fmt" "io" "net/url" "os" "strings" "github.com/urfave/cli/v2" ) func getStdin() string { stat, _ := os.Stdin.Stat() if (stat.Mode() & os.ModeCharDevice) == 0 { read := bytes.NewBuffer(make([]byte, 0, 1000)) _, err := io.Copy(read, os.Stdin) if err == nil { return strings.TrimSpace(read.String()) } } return "" } func getStdinOrFirstArgument(c *cli.Context) string { target := c.Args().First() if target != "" { return target } 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 }