66 lines
1.5 KiB
Go
66 lines
1.5 KiB
Go
package views
|
|
|
|
import (
|
|
"sigs.k8s.io/yaml"
|
|
|
|
"github.com/derailed/k9s/internal/resource"
|
|
"github.com/gdamore/tcell"
|
|
"github.com/rs/zerolog/log"
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
)
|
|
|
|
type secretView struct {
|
|
*resourceView
|
|
}
|
|
|
|
func newSecretView(t string, app *appView, list resource.List) resourceViewer {
|
|
v := secretView{newResourceView(t, app, list).(*resourceView)}
|
|
{
|
|
v.extraActionsFn = v.extraActions
|
|
v.switchPage("secret")
|
|
}
|
|
|
|
return &v
|
|
}
|
|
|
|
func (v *secretView) extraActions(aa keyActions) {
|
|
aa[tcell.KeyCtrlX] = newKeyAction("Decode", v.decodeCmd, true)
|
|
}
|
|
|
|
func (v *secretView) decodeCmd(evt *tcell.EventKey) *tcell.EventKey {
|
|
if !v.rowSelected() {
|
|
return evt
|
|
}
|
|
|
|
sel := v.getSelectedItem()
|
|
ns, n := namespaced(sel)
|
|
sec, err := v.app.conn().DialOrDie().CoreV1().Secrets(ns).Get(n, metav1.GetOptions{})
|
|
if err != nil {
|
|
v.app.flash(flashErr, "Unable to retrieve secret", sel)
|
|
return evt
|
|
}
|
|
|
|
d := make(map[string]string, len(sec.Data))
|
|
for k, val := range sec.Data {
|
|
d[k] = string(val)
|
|
}
|
|
raw, err := yaml.Marshal(d)
|
|
if err != nil {
|
|
v.app.flash(flashErr, "Error decoding secret for `", sel)
|
|
log.Error().Err(err).Msgf("Marshal error getting secret %s", sel)
|
|
return nil
|
|
}
|
|
|
|
details := v.GetPrimitive("details").(*detailsView)
|
|
{
|
|
details.setCategory("Decoder")
|
|
details.setTitle(sel)
|
|
details.SetTextColor(tcell.ColorMediumAquamarine)
|
|
details.SetText(colorizeYAML(string(raw)))
|
|
details.ScrollToBeginning()
|
|
}
|
|
v.switchPage("details")
|
|
|
|
return nil
|
|
}
|