From 731f3a725bd7a412bcef51a3c709db47d90471b7 Mon Sep 17 00:00:00 2001 From: mdrakos Date: Wed, 24 Feb 2021 14:03:21 -0800 Subject: [PATCH 1/2] Add open command --- cmd/state/internal/cmdtree/cmdtree.go | 1 + cmd/state/internal/cmdtree/cve.go | 24 ++++++++++++++++ internal/runners/cve/open.go | 40 +++++++++++++++++++++++++++ internal/runners/ppm/convert.go | 6 +--- locale/en-us.yaml | 2 ++ 5 files changed, 68 insertions(+), 5 deletions(-) create mode 100644 internal/runners/cve/open.go diff --git a/cmd/state/internal/cmdtree/cmdtree.go b/cmd/state/internal/cmdtree/cmdtree.go index a1d0914f44..d3b4a6d266 100644 --- a/cmd/state/internal/cmdtree/cmdtree.go +++ b/cmd/state/internal/cmdtree/cmdtree.go @@ -32,6 +32,7 @@ func New(prime *primer.Values, args ...string) *CmdTree { cveCmd := newCveCommand(prime) cveCmd.AddChildren( newReportCommand(prime), + newOpenCommand(prime), ) exportCmd := newExportCommand(prime) diff --git a/cmd/state/internal/cmdtree/cve.go b/cmd/state/internal/cmdtree/cve.go index 896f7f3c8a..8f2b60457c 100644 --- a/cmd/state/internal/cmdtree/cve.go +++ b/cmd/state/internal/cmdtree/cve.go @@ -52,3 +52,27 @@ func newReportCommand(prime *primer.Values) *captain.Command { }, ) } + +func newOpenCommand(prime *primer.Values) *captain.Command { + open := cve.NewOpen(prime) + params := cve.OpenParams{} + + return captain.NewCommand( + "open", + locale.Tl("cve_open_title", "Opening Vulnerability"), + locale.Tl("cve_open_cmd_description", "Open the given vulnerability details in your browser"), + prime.Output(), + prime.Config(), + []*captain.Flag{}, + []*captain.Argument{ + { + Name: locale.Tl("cve_open_id_arg", "ID"), + Description: locale.Tl("cve_open_id_arg_description", "The vulnerablility to open in your browser"), + Value: ¶ms.ID, + }, + }, + func(_ *captain.Command, _ []string) error { + return open.Run(params) + }, + ) +} diff --git a/internal/runners/cve/open.go b/internal/runners/cve/open.go new file mode 100644 index 0000000000..9474b88844 --- /dev/null +++ b/internal/runners/cve/open.go @@ -0,0 +1,40 @@ +package cve + +import ( + "fmt" + + "github.com/ActiveState/cli/internal/errs" + "github.com/ActiveState/cli/internal/locale" + "github.com/ActiveState/cli/internal/output" + "github.com/skratchdot/open-golang/open" +) + +const cveURLPrefix = "https://nvd.nist.gov/vuln/detail/" + +type Open struct { + out output.Outputer +} + +type OpenParams struct { + ID string +} + +func NewOpen(prime primeable) *Open { + return &Open{ + out: prime.Output(), + } +} + +func (o *Open) Run(params OpenParams) error { + cveURL := fmt.Sprintf("%s%s", cveURLPrefix, params.ID) + err := open.Run(cveURL) + if err != nil { + return errs.AddTips( + locale.WrapError(err, "cve_open_url_err", "Could not open CVE detail URL: {{.V0}}", cveURL), + locale.Tr("browser_fallback", "vulnerability details", cveURL), + ) + } + o.out.Print(locale.Tl("cve_open_url", "Vulnerability detail URL: [NOTICE]{{.V0}}[/RESET]", cveURL)) + + return nil +} diff --git a/internal/runners/ppm/convert.go b/internal/runners/ppm/convert.go index 645ede2d62..14ccc34c45 100644 --- a/internal/runners/ppm/convert.go +++ b/internal/runners/ppm/convert.go @@ -153,11 +153,7 @@ func (cf *ConversionFlow) openInBrowser(what, url string) { err := open.Run(url) if err != nil { logging.Error("Could not open %s in browser: %v", url, err) - cf.out.Error(locale.Tl( - "ppm_convert_open_browser_fallback", - "Could not open {{.V0}} in your browser.\nYou can copy and paste the following URL manually in the address line of your browser:\n{{.V1}}", - what, url, - )) + cf.out.Error(locale.Tr("browser_fallback", what, url)) } } diff --git a/locale/en-us.yaml b/locale/en-us.yaml index 96eb489216..feef73c059 100644 --- a/locale/en-us.yaml +++ b/locale/en-us.yaml @@ -1661,3 +1661,5 @@ headless_notify: Any changes you make are local only and will not be saved the platform. Visit: [ACTIONABLE]{{.V0}}[/RESET] to create a platform project from this commit. For more information, including how to merge these changes into an existing project, visit: [ACTIONABLE]{{.V1}}[/RESET]. +browser_fallback: + other: "Could not open {{.V0}} in your browser.\nYou can copy and paste the following URL manually in the address line of your browser:\n[NOTICE]{{.V1}}[/RESET]" \ No newline at end of file From ba41adb807bad15ee4d78832640fc04c0266450f Mon Sep 17 00:00:00 2001 From: Mike Drakos Date: Thu, 25 Feb 2021 11:16:55 -0800 Subject: [PATCH 2/2] Apply suggestions from code review Co-authored-by: Nathan Rijksen --- cmd/state/internal/cmdtree/cve.go | 2 +- internal/runners/cve/open.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/state/internal/cmdtree/cve.go b/cmd/state/internal/cmdtree/cve.go index 8f2b60457c..ea4d37cd61 100644 --- a/cmd/state/internal/cmdtree/cve.go +++ b/cmd/state/internal/cmdtree/cve.go @@ -59,7 +59,7 @@ func newOpenCommand(prime *primer.Values) *captain.Command { return captain.NewCommand( "open", - locale.Tl("cve_open_title", "Opening Vulnerability"), + locale.Tl("cve_open_title", "Opening Vulnerability Details Page"), locale.Tl("cve_open_cmd_description", "Open the given vulnerability details in your browser"), prime.Output(), prime.Config(), diff --git a/internal/runners/cve/open.go b/internal/runners/cve/open.go index 9474b88844..d6c4902fc8 100644 --- a/internal/runners/cve/open.go +++ b/internal/runners/cve/open.go @@ -34,7 +34,7 @@ func (o *Open) Run(params OpenParams) error { locale.Tr("browser_fallback", "vulnerability details", cveURL), ) } - o.out.Print(locale.Tl("cve_open_url", "Vulnerability detail URL: [NOTICE]{{.V0}}[/RESET]", cveURL)) + o.out.Print(locale.Tl("cve_open_url", "Vulnerability detail URL: [ACTIONABLE]{{.V0}}[/RESET]", cveURL)) return nil }