Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions api/result.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package api

import (
"context"
"encoding/json"
"errors"
"fmt"
"net/http"
Expand Down Expand Up @@ -45,3 +46,33 @@ func (c *Client) WaitAndGetResult(ctx context.Context, uuid string, maxWait int)
}
}
}

type ResultVisibilityOptions struct {
Visibility string `json:"visibility"`
}

type ResultVisibilityOption func(*ResultVisibilityOptions)

func WithResultVisibility(visibility string) ResultVisibilityOption {
return func(opts *ResultVisibilityOptions) {
if visibility != "" {
opts.Visibility = visibility
}
}
}

func (c *Client) UpdateResultVisibility(uuid string, opts ...ResultVisibilityOption) (*Response, error) {
var options ResultVisibilityOptions
for _, opt := range opts {
opt(&options)
}

marshalled, err := json.Marshal(options)
if err != nil {
return nil, err
}

return c.NewRequest().SetBodyJSONBytes(marshalled).Put(
PrefixedPath(fmt.Sprintf("/result/%s/visibility/", uuid)),
)
}
2 changes: 2 additions & 0 deletions cmd/pro/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"github.com/urlscan/urlscan-cli/cmd/pro/livescan"
"github.com/urlscan/urlscan-cli/cmd/pro/search"
"github.com/urlscan/urlscan-cli/cmd/pro/subscription"
"github.com/urlscan/urlscan-cli/cmd/pro/visibility"
)

var RootCmd = &cobra.Command{
Expand All @@ -24,4 +25,5 @@ func init() {
RootCmd.AddCommand(incident.RootCmd)
RootCmd.AddCommand(livescan.RootCmd)
RootCmd.AddCommand(datadump.RootCmd)
RootCmd.AddCommand(visibility.RootCmd)
}
56 changes: 56 additions & 0 deletions cmd/pro/visibility/reset.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package visibility

import (
"fmt"

"github.com/spf13/cobra"

"github.com/urlscan/urlscan-cli/api"
"github.com/urlscan/urlscan-cli/pkg/utils"
)

var resetCmdExample = ` urlscan pro visibility reset <scan-id>
echo <scan-id> | urlscan pro visibility reset -`

var resetCmd = &cobra.Command{
Use: "reset",
Short: "Reset the visibility of a scan owned by you or your team to its original visibility",
Example: resetCmdExample,
Annotations: map[string]string{
"args": "exact1",
},
RunE: func(cmd *cobra.Command, args []string) error {
if len(args) != 1 {
return cmd.Usage()
}

reader := utils.StringReaderFromCmdArgs(args)
scanId, err := reader.ReadString()
if err != nil {
return err
}

err = utils.ValidateUUID(scanId)
if err != nil {
return err
}

client, err := utils.NewAPIClient()
if err != nil {
return err
}

resp, err := client.NewRequest().Delete(api.PrefixedPath(fmt.Sprintf("/result/%s/visibility/", scanId)))
if err != nil {
return err
}

fmt.Print(resp.PrettyJSON())

return nil
},
}

func init() {
RootCmd.AddCommand(resetCmd)
}
10 changes: 10 additions & 0 deletions cmd/pro/visibility/root.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package visibility

import (
"github.com/spf13/cobra"
)

var RootCmd = &cobra.Command{
Use: "visibility",
Short: "Visibility sub-commands",
}
63 changes: 63 additions & 0 deletions cmd/pro/visibility/update.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package visibility

import (
"fmt"

"github.com/spf13/cobra"

"github.com/urlscan/urlscan-cli/api"
"github.com/urlscan/urlscan-cli/pkg/utils"
)

var updateCmdExample = ` urlscan pro visibility update <scan-id> -v private
echo <scan-id> | urlscan pro visibility update - -v public`

var updateCmd = &cobra.Command{
Use: "update",
Short: "Update visibility of a scan owned by you or your team",
Example: updateCmdExample,
Annotations: map[string]string{
"args": "exact1",
},
RunE: func(cmd *cobra.Command, args []string) error {
if len(args) != 1 {
return cmd.Usage()
}

reader := utils.StringReaderFromCmdArgs(args)
scanId, err := reader.ReadString()
if err != nil {
return err
}

err = utils.ValidateUUID(scanId)
if err != nil {
return err
}

visibility, _ := cmd.Flags().GetString("visibility")
if visibility == "" {
return cmd.Usage()
}

client, err := utils.NewAPIClient()
if err != nil {
return err
}

resp, err := client.UpdateResultVisibility(scanId, api.WithResultVisibility(visibility))
if err != nil {
return err
}

fmt.Print(resp.PrettyJSON())

return nil
},
}

func init() {
updateCmd.Flags().StringP("visibility", "v", "", "The new visibility of the scan result: public, unlisted, private, deleted")

RootCmd.AddCommand(updateCmd)
}
1 change: 1 addition & 0 deletions docs/urlscan_pro.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,5 @@ Pro sub-commands
* [urlscan pro saved-search](urlscan_pro_saved-search.md) - Saved search sub-commands
* [urlscan pro structure-search](urlscan_pro_structure-search.md) - Get structurally similar results to a specific scan
* [urlscan pro subscription](urlscan_pro_subscription.md) - Subscription sub-commands
* [urlscan pro visibility](urlscan_pro_visibility.md) - Visibility sub-commands

16 changes: 16 additions & 0 deletions docs/urlscan_pro_visibility.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
## urlscan pro visibility

Visibility sub-commands

### Options

```
-h, --help help for visibility
```

### SEE ALSO

* [urlscan pro](urlscan_pro.md) - Pro sub-commands
* [urlscan pro visibility reset](urlscan_pro_visibility_reset.md) - Reset the visibility of a scan owned by you or your team to its original visibility
* [urlscan pro visibility update](urlscan_pro_visibility_update.md) - Update visibility of a scan owned by you or your team

25 changes: 25 additions & 0 deletions docs/urlscan_pro_visibility_reset.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
## urlscan pro visibility reset

Reset the visibility of a scan owned by you or your team to its original visibility

```
urlscan pro visibility reset [flags]
```

### Examples

```
urlscan pro visibility reset <scan-id>
echo <scan-id> | urlscan pro visibility reset -
```

### Options

```
-h, --help help for reset
```

### SEE ALSO

* [urlscan pro visibility](urlscan_pro_visibility.md) - Visibility sub-commands

26 changes: 26 additions & 0 deletions docs/urlscan_pro_visibility_update.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
## urlscan pro visibility update

Update visibility of a scan owned by you or your team

```
urlscan pro visibility update [flags]
```

### Examples

```
urlscan pro visibility update <scan-id> -v private
echo <scan-id> | urlscan pro visibility update - -v public
```

### Options

```
-h, --help help for update
-v, --visibility string The new visibility of the scan result: public, unlisted, private, deleted
```

### SEE ALSO

* [urlscan pro visibility](urlscan_pro_visibility.md) - Visibility sub-commands

15 changes: 15 additions & 0 deletions test/pro/visibility.bats
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#!/usr/bin/env bats

load ../test_helper

@test "scan, change and reset visibility" {
scan_id="$(./dist/urlscan scan submit "https://http-test.com/" -v private --wait | jq -r ".task.uuid")"

message="$(./dist/urlscan pro visibility update "$scan_id" -v unlisted | jq -r ".message")"
assert_equal "Visibility updated" "$message"


message="$(./dist/urlscan pro visibility reset "$scan_id" | jq -r ".message")"
assert_equal "Visibility reset" "$message"
}