k9s/internal/view/vul_extender.go

51 lines
1.3 KiB
Go

// SPDX-License-Identifier: Apache-2.0
// Copyright Authors of K9s
package view
import (
"context"
"github.com/derailed/k9s/internal"
"github.com/derailed/k9s/internal/client"
"github.com/derailed/k9s/internal/ui"
"github.com/derailed/tcell/v2"
)
// VulnerabilityExtender adds vul image scan extensions.
type VulnerabilityExtender struct {
ResourceViewer
}
// NewVulnerabilityExtender returns a new extender.
func NewVulnerabilityExtender(r ResourceViewer) ResourceViewer {
v := VulnerabilityExtender{ResourceViewer: r}
v.AddBindKeysFn(v.bindKeys)
return &v
}
func (v *VulnerabilityExtender) bindKeys(aa ui.KeyActions) {
if v.App().Config.K9s.ImageScans.Enable {
aa.Add(ui.KeyActions{
ui.KeyV: ui.NewKeyAction("Show Vulnerabilities", v.showVulCmd, true),
ui.KeyShiftV: ui.NewKeyAction("Sort Vulnerabilities", v.GetTable().SortColCmd("VS", true), false),
})
}
}
func (v *VulnerabilityExtender) showVulCmd(evt *tcell.EventKey) *tcell.EventKey {
isv := NewImageScan(client.NewGVR("scans"))
isv.SetContextFn(v.selContext)
if err := v.App().inject(isv, false); err != nil {
v.App().Flash().Err(err)
}
return nil
}
func (v *VulnerabilityExtender) selContext(ctx context.Context) context.Context {
ctx = context.WithValue(ctx, internal.KeyPath, v.GetTable().GetSelectedItem())
return context.WithValue(ctx, internal.KeyGVR, v.GVR())
}