From a5f907854f29e1c267ad30d1dfe85c2c47f5ac48 Mon Sep 17 00:00:00 2001 From: sinner Date: Wed, 15 Apr 2026 15:16:02 -0400 Subject: feat: add stdin support and retry logic for all search commands --- cmd/dns.go | 77 +++++++++++++++++++++++++++++--------------------------------- 1 file changed, 36 insertions(+), 41 deletions(-) (limited to 'cmd/dns.go') diff --git a/cmd/dns.go b/cmd/dns.go index dda2ddd..5fda64a 100644 --- a/cmd/dns.go +++ b/cmd/dns.go @@ -20,7 +20,7 @@ var dnsTLDCmd = &cobra.Command{ Aliases: []string{"t"}, Short: "Check NXDOMAIN for custom term against all TLDs", Long: "Streams NDJSON results checking each TLD. For NXDOMAIN domains, returns status. For existing domains, runs httpx to get page title and tech stack.", - Args: cobra.ExactArgs(1), + Args: argsOrStdin(1), RunE: runDNSTLDCheck, } @@ -29,12 +29,11 @@ var dnsSiteCmd = &cobra.Command{ Aliases: []string{"s"}, Short: "Check if a website URL has been reused", Long: "Checks if a website URL has been reused across different domains", - Args: cobra.ExactArgs(1), + Args: argsOrStdin(1), RunE: runDNSSiteCheck, } func runDNSTLDCheck(cmd *cobra.Command, args []string) error { - term := args[0] showOnly, _ := cmd.Flags().GetString("show-only") c, err := newUnauthenticatedClient() @@ -42,58 +41,54 @@ func runDNSTLDCheck(cmd *cobra.Command, args []string) error { return fmt.Errorf("failed to create client: %w", err) } - params := &models.DNSTLDParams{ - Term: term, - ShowOnly: showOnly, - } - - fmt.Printf("Checking TLDs for term: %s\n\n", term) - - err = c.CheckDNSTLDStream(params, func(result json.RawMessage) error { - var domainResult models.DomainResult - if err := json.Unmarshal(result, &domainResult); err != nil { - return fmt.Errorf("failed to parse result: %w", err) + return forEachQuery(args, func(term string) error { + params := &models.DNSTLDParams{ + Term: term, + ShowOnly: showOnly, } - output, err := formatter.FormatDNSResults(&domainResult, IsJSONOutput()) + fmt.Printf("Checking TLDs for term: %s\n\n", term) + + err := c.CheckDNSTLDStream(params, func(result json.RawMessage) error { + var domainResult models.DomainResult + if err := json.Unmarshal(result, &domainResult); err != nil { + return fmt.Errorf("failed to parse result: %w", err) + } + output, err := formatter.FormatDNSResults(&domainResult, IsJSONOutput()) + if err != nil { + return err + } + printOutput(output) + return nil + }) if err != nil { - return err + return fmt.Errorf("TLD check failed: %w", err) } - printOutput(output) return nil }) - - if err != nil { - return fmt.Errorf("TLD check failed: %w", err) - } - - return nil } func runDNSSiteCheck(cmd *cobra.Command, args []string) error { - siteURL := args[0] - c, err := newClient() if err != nil { return fmt.Errorf("failed to create client: %w", err) } - response, err := c.CheckDNSSite(siteURL) - if err != nil { - return fmt.Errorf("site check failed: %w", err) - } - - if err := checkError(response.Error); err != nil { - return err - } - - output, err := formatter.FormatDNSSite(response, IsJSONOutput()) - if err != nil { - return err - } - - printOutput(output) - return nil + return forEachQuery(args, func(siteURL string) error { + response, err := c.CheckDNSSite(siteURL) + if err != nil { + return fmt.Errorf("site check failed: %w", err) + } + if err := checkError(response.Error); err != nil { + return err + } + output, err := formatter.FormatDNSSite(response, IsJSONOutput()) + if err != nil { + return err + } + printOutput(output) + return nil + }) } func init() { -- cgit v1.2.3