Skip to content

Commit 6b82e3a

Browse files
authored
feat(scan): Return report URL instead of analysis ID (#56)
1 parent 331af40 commit 6b82e3a

File tree

1 file changed

+32
-4
lines changed

1 file changed

+32
-4
lines changed

cmd/scan.go

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,13 @@ import (
2020
"github.com/VirusTotal/vt-cli/utils"
2121
vt "github.com/VirusTotal/vt-go"
2222
"github.com/spf13/cobra"
23+
"github.com/spf13/pflag"
2324
"github.com/spf13/viper"
2425
)
2526

2627
type fileScanner struct {
27-
scanner *vt.FileScanner
28+
scanner *vt.FileScanner
29+
showInVT bool
2830
}
2931

3032
func (s *fileScanner) Do(path interface{}, ds *utils.DoerState) string {
@@ -53,6 +55,13 @@ func (s *fileScanner) Do(path interface{}, ds *utils.DoerState) string {
5355
return fmt.Sprintf("%s", err)
5456
}
5557

58+
if s.showInVT {
59+
// Return the analysis URL in VT so users can visit it
60+
return fmt.Sprintf(
61+
"%s https://www.virustotal.com/gui/file-analysis/%s",
62+
path.(string), analysis.ID())
63+
}
64+
5665
return fmt.Sprintf("%s %s", path.(string), analysis.ID())
5766
}
5867

@@ -96,27 +105,37 @@ func NewScanFileCmd() *cobra.Command {
96105
if err != nil {
97106
return err
98107
}
99-
s := &fileScanner{scanner: client.NewFileScanner()}
108+
s := &fileScanner{
109+
scanner: client.NewFileScanner(),
110+
showInVT: viper.GetBool("open")}
100111
c.DoWithStringsFromReader(s, argReader)
101112
return nil
102113
},
103114
}
104115

105116
addThreadsFlag(cmd.Flags())
117+
addOpenInVTFlag(cmd.Flags())
106118
cmd.MarkZshCompPositionalArgumentFile(1)
107119

108120
return cmd
109121
}
110122

111123
type urlScanner struct {
112-
scanner *vt.URLScanner
124+
scanner *vt.URLScanner
125+
showInVT bool
113126
}
114127

115128
func (s *urlScanner) Do(url interface{}, ds *utils.DoerState) string {
116129
analysis, err := s.scanner.Scan(url.(string))
117130
if err != nil {
118131
return fmt.Sprintf("%s", err)
119132
}
133+
134+
if s.showInVT {
135+
return fmt.Sprintf(
136+
"%s https://www.virustotal.com/gui/url-analysis/%s", url, analysis.ID())
137+
}
138+
120139
return fmt.Sprintf("%s %s", url, analysis.ID())
121140
}
122141

@@ -155,13 +174,16 @@ func NewScanURLCmd() *cobra.Command {
155174
if err != nil {
156175
return err
157176
}
158-
s := &urlScanner{scanner: client.NewURLScanner()}
177+
s := &urlScanner{
178+
scanner: client.NewURLScanner(),
179+
showInVT: viper.GetBool("open")}
159180
c.DoWithStringsFromReader(s, argReader)
160181
return nil
161182
},
162183
}
163184

164185
addThreadsFlag(cmd.Flags())
186+
addOpenInVTFlag(cmd.Flags())
165187

166188
return cmd
167189
}
@@ -184,3 +206,9 @@ func NewScanCmd() *cobra.Command {
184206

185207
return cmd
186208
}
209+
210+
func addOpenInVTFlag(flags *pflag.FlagSet) {
211+
flags.BoolP(
212+
"open", "o", false,
213+
"Return an URL to see the analysis report at the VirusTotal web GUI")
214+
}

0 commit comments

Comments
 (0)