info.go

 1package cmd
 2
 3import (
 4	"github.com/charmbracelet/soft-serve/pkg/backend"
 5	"github.com/charmbracelet/soft-serve/pkg/sshutils"
 6	"github.com/spf13/cobra"
 7)
 8
 9// InfoCommand returns a command that shows the user's info.
10func InfoCommand() *cobra.Command {
11	cmd := &cobra.Command{
12		Use:   "info",
13		Short: "Show your info",
14		Args:  cobra.NoArgs,
15		RunE: func(cmd *cobra.Command, _ []string) error {
16			ctx := cmd.Context()
17			be := backend.FromContext(ctx)
18			pk := sshutils.PublicKeyFromContext(ctx)
19			user, err := be.UserByPublicKey(ctx, pk)
20			if err != nil {
21				return err //nolint:wrapcheck
22			}
23
24			cmd.Printf("Username: %s\n", user.Username())
25			cmd.Printf("Admin: %t\n", user.IsAdmin())
26			cmd.Printf("Public keys:\n")
27			for _, pk := range user.PublicKeys() {
28				cmd.Printf("  %s\n", sshutils.MarshalAuthorizedKey(pk))
29			}
30			return nil
31		},
32	}
33
34	return cmd
35}