vet/cmd/cloud/whoami.go
Oleksandr Redko 4e39cebe61
chore: add formatters to golangci-lint config (#643)
Signed-off-by: Oleksandr Redko <oleksandr.red+github@gmail.com>
2025-11-27 14:58:24 +05:30

64 lines
1.3 KiB
Go

package cloud
import (
"fmt"
controltowerv1 "buf.build/gen/go/safedep/api/protocolbuffers/go/safedep/messages/controltower/v1"
"github.com/spf13/cobra"
"github.com/safedep/vet/internal/auth"
"github.com/safedep/vet/internal/ui"
"github.com/safedep/vet/pkg/cloud"
"github.com/safedep/vet/pkg/common/logger"
)
func newWhoamiCommand() *cobra.Command {
cmd := &cobra.Command{
Use: "whoami",
Short: "Print information about the current user",
RunE: func(cmd *cobra.Command, args []string) error {
err := executeWhoami()
if err != nil {
logger.Errorf("Failed to execute whoami: %v", err)
}
return nil
},
}
return cmd
}
func executeWhoami() error {
conn, err := auth.ControlPlaneClientConnection("vet-cloud-whoami")
if err != nil {
return err
}
userService, err := cloud.NewUserService(conn)
if err != nil {
return err
}
res, err := userService.CurrentUserInfo()
if err != nil {
return err
}
tbl := ui.NewTabler(ui.TablerConfig{})
tbl.AddHeader("Email", "Tenant", "Access Level")
for _, access := range res.GetAccess() {
accessName := "UNSPECIFIED"
if name, ok := controltowerv1.AccessLevel_name[int32(access.GetLevel())]; ok {
accessName = name
}
tbl.AddRow(res.GetUser().GetEmail(),
access.GetTenant().GetDomain(),
fmt.Sprintf("%s (%d)", accessName, access.GetRole()))
}
return tbl.Finish()
}