Skip to content

Commit ab31034

Browse files
committed
Stylize the TPM simulator startup table
1 parent 52d4aee commit ab31034

File tree

3 files changed

+61
-24
lines changed

3 files changed

+61
-24
lines changed

cmd/simulator/simulator_enabled.go

Lines changed: 51 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@ import (
1414
"path/filepath"
1515
"syscall"
1616

17-
"github.com/jedib0t/go-pretty/table"
17+
"github.com/charmbracelet/colorprofile"
18+
"github.com/charmbracelet/lipgloss"
19+
"github.com/charmbracelet/lipgloss/table"
1820

1921
"github.com/smallstep/panoramix/v5/logware"
2022
"go.step.sm/crypto/randutil"
@@ -99,29 +101,9 @@ func runSimulator(ctx context.Context) (err error) {
99101
}
100102
}()
101103

102-
t1 := table.NewWriter()
103-
t1.SetOutputMirror(os.Stdout)
104-
t1.AppendRows([]table.Row{
105-
{"Version", info.Version},
106-
{"Interface", fmt.Sprintf("%s (simulator)", info.Interface)},
107-
{"Manufacturer", info.Manufacturer},
108-
{"Vendor Info", info.VendorInfo},
109-
{"Firmware Version", info.FirmwareVersion},
110-
})
111-
for _, ek := range eks {
112-
u, err := ek.FingerprintURI()
113-
if err != nil {
114-
return err
115-
}
116-
t1.AppendRow(table.Row{
117-
fmt.Sprintf("EK URI (%s)", ek.Type()), u.String(),
118-
})
104+
if err := printTPMInfo(info, eks, socket, seed); err != nil {
105+
logger.ErrorContext(ctx, "failed printing TPM info", logware.Error(err))
119106
}
120-
t1.AppendRows([]table.Row{
121-
{"UNIX socket", socket},
122-
{"Seed", seed},
123-
})
124-
t1.Render()
125107

126108
logger.InfoContext(ctx, "TPM simulator available", slog.String("socket", socket))
127109

@@ -188,6 +170,52 @@ func runSimulator(ctx context.Context) (err error) {
188170
}
189171
}
190172

173+
var (
174+
purple = lipgloss.Color("99")
175+
gray = lipgloss.Color("245")
176+
lightGray = lipgloss.Color("241")
177+
headerStyle = lipgloss.NewStyle().Foreground(purple).Bold(true).Align(lipgloss.Center)
178+
cellStyle = lipgloss.NewStyle().Padding(0, 1).MaxWidth(80)
179+
oddRowStyle = cellStyle.Foreground(gray)
180+
evenRowStyle = cellStyle.Foreground(lightGray)
181+
)
182+
183+
func printTPMInfo(info *tpm.Info, eks []*tpm.EK, socket, seed string) error {
184+
tbl := table.New().
185+
Border(lipgloss.NormalBorder()).
186+
BorderStyle(lipgloss.NewStyle().Foreground(purple)).
187+
StyleFunc(func(row, col int) lipgloss.Style {
188+
switch {
189+
case row == table.HeaderRow:
190+
return headerStyle
191+
case row%2 == 0:
192+
return evenRowStyle
193+
default:
194+
return oddRowStyle
195+
}
196+
})
197+
198+
tbl.Row("Version", info.Version.String())
199+
tbl.Row("Interface", fmt.Sprintf("%s (simulator)", info.Interface))
200+
tbl.Row("Manufacturer", info.Manufacturer.String())
201+
tbl.Row("Vendor Info", info.VendorInfo)
202+
tbl.Row("Firmware Version", info.FirmwareVersion.String())
203+
for _, ek := range eks {
204+
u, err := ek.FingerprintURI()
205+
if err != nil {
206+
return err
207+
}
208+
tbl.Row(fmt.Sprintf("EK URI (%s)", ek.Type()), u.String())
209+
}
210+
tbl.Row("UNIX socket", socket)
211+
tbl.Row("Seed", seed)
212+
213+
w := colorprofile.NewWriter(os.Stdout, os.Environ())
214+
fmt.Fprintln(w, tbl)
215+
216+
return nil
217+
}
218+
191219
func getTPMSimulatorSocketPath() (sockAddr string, err error) {
192220
paths := []string{"/run", "/var/run"}
193221
for _, dir := range paths {

go.mod

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ go 1.24
55
toolchain go1.24.1
66

77
require (
8+
github.com/charmbracelet/colorprofile v0.3.0
89
github.com/charmbracelet/fang v0.1.0
10+
github.com/charmbracelet/lipgloss v1.1.0
911
github.com/jedib0t/go-pretty v4.3.0+incompatible
1012
github.com/smallstep/cli-utils v0.12.1
1113
github.com/smallstep/panoramix/v5 v5.0.0-beta1
@@ -17,7 +19,7 @@ require (
1719
require (
1820
filippo.io/edwards25519 v1.1.0 // indirect
1921
github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef // indirect
20-
github.com/charmbracelet/colorprofile v0.3.0 // indirect
22+
github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
2123
github.com/charmbracelet/lipgloss/v2 v2.0.0-beta.1 // indirect
2224
github.com/charmbracelet/x/ansi v0.8.0 // indirect
2325
github.com/charmbracelet/x/cellbuf v0.0.13 // indirect
@@ -47,6 +49,7 @@ require (
4749
github.com/muesli/mango-cobra v1.2.0 // indirect
4850
github.com/muesli/mango-pflag v0.1.0 // indirect
4951
github.com/muesli/roff v0.1.0 // indirect
52+
github.com/muesli/termenv v0.16.0 // indirect
5053
github.com/oklog/ulid v1.3.1 // indirect
5154
github.com/peterbourgon/diskv/v3 v3.0.1 // indirect
5255
github.com/pkg/errors v0.9.1 // indirect

go.sum

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,16 @@ github.com/Masterminds/sprig/v3 v3.3.0 h1:mQh0Yrg1XPo6vjYXgtf5OtijNAKJRNcTdOOGZe
1111
github.com/Masterminds/sprig/v3 v3.3.0/go.mod h1:Zy1iXRYNqNLUolqCpL4uhk6SHUMAOSCzdgBfDb35Lz0=
1212
github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef h1:46PFijGLmAjMPwCCCo7Jf0W6f9slllCkkv7vyc1yOSg=
1313
github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw=
14+
github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k=
15+
github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8=
1416
github.com/aymanbagabas/go-udiff v0.2.0 h1:TK0fH4MteXUDspT88n8CKzvK0X9O2xu9yQjWpi6yML8=
1517
github.com/aymanbagabas/go-udiff v0.2.0/go.mod h1:RE4Ex0qsGkTAJoQdQQCA0uG+nAzJO/pI/QwceO5fgrA=
1618
github.com/charmbracelet/colorprofile v0.3.0 h1:KtLh9uuu1RCt+Hml4s6Hz+kB1PfV3wi++1h5ia65yKQ=
1719
github.com/charmbracelet/colorprofile v0.3.0/go.mod h1:oHJ340RS2nmG1zRGPmhJKJ/jf4FPNNk0P39/wBPA1G0=
1820
github.com/charmbracelet/fang v0.1.0 h1:SlZS2crf3/zQh7Mr4+W+7QR1k+L08rrPX5rm5z3d7Wg=
1921
github.com/charmbracelet/fang v0.1.0/go.mod h1:Zl/zeUQ8EtQuGyiV0ZKZlZPDowKRTzu8s/367EpN/fc=
22+
github.com/charmbracelet/lipgloss v1.1.0 h1:vYXsiLHVkK7fp74RkV7b2kq9+zDLoEU4MZoFqR/noCY=
23+
github.com/charmbracelet/lipgloss v1.1.0/go.mod h1:/6Q8FR2o+kj8rz4Dq0zQc3vYf7X+B0binUUBwA0aL30=
2024
github.com/charmbracelet/lipgloss/v2 v2.0.0-beta.1 h1:D9AJJuYTN5pvz6mpIGO1ijLKpfTYSHOtKGgwoTQ4Gog=
2125
github.com/charmbracelet/lipgloss/v2 v2.0.0-beta.1/go.mod h1:tRlx/Hu0lo/j9viunCN2H+Ze6JrmdjQlXUQvvArgaOc=
2226
github.com/charmbracelet/x/ansi v0.8.0 h1:9GTq3xq9caJW8ZrBTe0LIe2fvfLR/bYXKTx2llXn7xE=
@@ -123,6 +127,8 @@ github.com/muesli/mango-pflag v0.1.0 h1:UADqbYgpUyRoBja3g6LUL+3LErjpsOwaC9ywvBWe
123127
github.com/muesli/mango-pflag v0.1.0/go.mod h1:YEQomTxaCUp8PrbhFh10UfbhbQrM/xJ4i2PB8VTLLW0=
124128
github.com/muesli/roff v0.1.0 h1:YD0lalCotmYuF5HhZliKWlIx7IEhiXeSfq7hNjFqGF8=
125129
github.com/muesli/roff v0.1.0/go.mod h1:pjAHQM9hdUUwm/krAfrLGgJkXJ+YuhtsfZ42kieB2Ig=
130+
github.com/muesli/termenv v0.16.0 h1:S5AlUN9dENB57rsbnkPyfdGuWIlkmzJjbFf0Tf5FWUc=
131+
github.com/muesli/termenv v0.16.0/go.mod h1:ZRfOIKPFDYQoDFF4Olj7/QJbW60Ol/kL1pU3VfY/Cnk=
126132
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
127133
github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4=
128134
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=

0 commit comments

Comments
 (0)