summaryrefslogtreecommitdiffstats
path: root/cmd/buckets.go
blob: fcb292d9a0023f62ae78f8d82e33d3be7f4bc976 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package cmd

import (
	"git.db.org.ai/dborg/internal/formatter"
	"git.db.org.ai/dborg/internal/models"
	"github.com/spf13/cobra"
)

var bucketsCmd = &cobra.Command{
	Use:   "buckets",
	Short: "List public buckets",
	Long:  `List public S3, Azure, GCP, and DigitalOcean buckets with file counts`,
	RunE:  runBucketsSearch,
}

var bucketFilesCmd = &cobra.Command{
	Use:   "bucket-files",
	Short: "Search public bucket files",
	Long:  `Search public S3, Azure, GCP, and DigitalOcean buckets for exposed files`,
	RunE:  runBucketFilesSearch,
}

func init() {
	rootCmd.AddCommand(bucketsCmd)
	rootCmd.AddCommand(bucketFilesCmd)

	bucketsCmd.Flags().IntP("limit", "l", 1000, "Number of results to return")
	bucketsCmd.Flags().IntP("start", "t", 0, "Starting offset for pagination")

	bucketFilesCmd.Flags().StringP("keywords", "w", "", "Search keywords")
	bucketFilesCmd.Flags().StringP("extensions", "e", "", "File extensions (comma-separated, e.g. 'sql,db,xlsx')")
	bucketFilesCmd.Flags().StringP("buckets", "b", "", "Filter by bucket names (comma-separated)")
	bucketFilesCmd.Flags().IntP("limit", "l", 1000, "Number of results to return")
	bucketFilesCmd.Flags().IntP("start", "t", 0, "Starting offset for pagination")
}

func runBucketsSearch(cmd *cobra.Command, args []string) error {
	c, err := newClient()
	if err != nil {
		return err
	}

	params := &models.BucketsSearchParams{}
	params.Limit, _ = cmd.Flags().GetInt("limit")
	params.Start, _ = cmd.Flags().GetInt("start")

	response, err := c.SearchBuckets(params)
	if err != nil {
		return err
	}

	return formatter.FormatBucketsResults(response, IsJSONOutput())
}

func runBucketFilesSearch(cmd *cobra.Command, args []string) error {
	c, err := newClient()
	if err != nil {
		return err
	}

	params := &models.BucketsFilesSearchParams{}
	params.Keywords, _ = cmd.Flags().GetString("keywords")
	params.Extensions, _ = cmd.Flags().GetString("extensions")
	params.Buckets, _ = cmd.Flags().GetString("buckets")
	params.Limit, _ = cmd.Flags().GetInt("limit")
	params.Start, _ = cmd.Flags().GetInt("start")

	response, err := c.SearchBucketFiles(params)
	if err != nil {
		return err
	}

	return formatter.FormatBucketFilesResults(response, IsJSONOutput())
}