summaryrefslogtreecommitdiffstats
path: root/internal
diff options
context:
space:
mode:
authors <[email protected]>2025-11-08 07:50:53 -0500
committers <[email protected]>2025-11-08 07:50:53 -0500
commit25c11b030e2b4fb9bc9742daea834f0a6e049671 (patch)
tree4c033a87fb2508abd42a5ba8464e12d85be3b87a /internal
parentdfcf52f30cdbde3a4e1400024b0c27451d179e5d (diff)
downloaddborg-25c11b030e2b4fb9bc9742daea834f0a6e049671.tar.gz
dborg-25c11b030e2b4fb9bc9742daea834f0a6e049671.zip
feat: add buckets, bucket-files, and shortlinks osint commandsv0.5.0
Diffstat (limited to 'internal')
-rw-r--r--internal/client/osint.go96
-rw-r--r--internal/models/osint.go43
2 files changed, 139 insertions, 0 deletions
diff --git a/internal/client/osint.go b/internal/client/osint.go
index 95e3550..d7e795c 100644
--- a/internal/client/osint.go
+++ b/internal/client/osint.go
@@ -88,3 +88,99 @@ func (c *Client) SearchOpenDirectoryFiles(params *models.OpenDirectorySearchPara
return &response, nil
}
+
+func (c *Client) SearchBuckets(params *models.BucketsSearchParams) (*models.BucketsSearchResponse, error) {
+ path := "/osint/buckets/buckets"
+
+ queryParams := url.Values{}
+ if params.Limit > 0 {
+ queryParams.Add("limit", fmt.Sprintf("%d", params.Limit))
+ }
+ if params.Start > 0 {
+ queryParams.Add("start", fmt.Sprintf("%d", params.Start))
+ }
+
+ data, err := c.Get(path, queryParams)
+ if err != nil {
+ return nil, err
+ }
+
+ var response models.BucketsSearchResponse
+ if err := json.Unmarshal(data, &response); err != nil {
+ return nil, fmt.Errorf("failed to parse buckets search response: %w", err)
+ }
+
+ return &response, nil
+}
+
+func (c *Client) SearchBucketFiles(params *models.BucketsFilesSearchParams) (*models.BucketsFilesSearchResponse, error) {
+ path := "/osint/buckets/files"
+
+ queryParams := url.Values{}
+ if params.Keywords != "" {
+ queryParams.Add("keywords", params.Keywords)
+ }
+ if params.Extensions != "" {
+ queryParams.Add("extensions", params.Extensions)
+ }
+ if params.Buckets != "" {
+ queryParams.Add("buckets", params.Buckets)
+ }
+ if params.Limit > 0 {
+ queryParams.Add("limit", fmt.Sprintf("%d", params.Limit))
+ }
+ if params.Start > 0 {
+ queryParams.Add("start", fmt.Sprintf("%d", params.Start))
+ }
+
+ data, err := c.Get(path, queryParams)
+ if err != nil {
+ return nil, err
+ }
+
+ var response models.BucketsFilesSearchResponse
+ if err := json.Unmarshal(data, &response); err != nil {
+ return nil, fmt.Errorf("failed to parse bucket files search response: %w", err)
+ }
+
+ return &response, nil
+}
+
+func (c *Client) SearchShortlinks(params *models.ShortlinksSearchParams) (*models.ShortlinksSearchResponse, error) {
+ path := "/osint/shortlinks"
+
+ queryParams := url.Values{}
+ if params.Keywords != "" {
+ queryParams.Add("keywords", params.Keywords)
+ }
+ if params.Ext != "" {
+ queryParams.Add("ext", params.Ext)
+ }
+ if params.Order != "" {
+ queryParams.Add("order", params.Order)
+ }
+ if params.Direction != "" {
+ queryParams.Add("direction", params.Direction)
+ }
+ if params.Regexp {
+ queryParams.Add("regexp", "true")
+ }
+ if params.Limit > 0 {
+ queryParams.Add("limit", fmt.Sprintf("%d", params.Limit))
+ }
+ if params.Start > 0 {
+ queryParams.Add("start", fmt.Sprintf("%d", params.Start))
+ }
+
+ data, err := c.Get(path, queryParams)
+ if err != nil {
+ return nil, err
+ }
+
+ var response models.ShortlinksSearchResponse
+ if err := json.Unmarshal(data, &response); err != nil {
+ return nil, fmt.Errorf("failed to parse shortlinks search response: %w", err)
+ }
+
+ return &response, nil
+}
diff --git a/internal/models/osint.go b/internal/models/osint.go
index 9f714c4..950225d 100644
--- a/internal/models/osint.go
+++ b/internal/models/osint.go
@@ -47,3 +47,46 @@ type OpenDirectorySearchParams struct {
}
type OpenDirectorySearchResponse map[string]interface{}
+
+type BucketsSearchParams struct {
+ Limit int
+ Start int
+}
+
+type BucketsFilesSearchParams struct {
+ Keywords string
+ Extensions string
+ Buckets string
+ Limit int
+ Start int
+}
+
+type ShortlinksSearchParams struct {
+ Keywords string
+ Ext string
+ Order string
+ Direction string
+ Regexp bool
+ Limit int
+ Start int
+}
+
+type CreditsInfo struct {
+ Used int `json:"used"`
+ Remaining int `json:"remaining"`
+}
+
+type BucketsSearchResponse struct {
+ Credits CreditsInfo `json:"credits"`
+ Results interface{} `json:"results"`
+}
+
+type BucketsFilesSearchResponse struct {
+ Credits CreditsInfo `json:"credits"`
+ Results interface{} `json:"results"`
+}
+
+type ShortlinksSearchResponse struct {
+ Credits CreditsInfo `json:"credits"`
+ Results interface{} `json:"results"`
+}