1package cmd23import (4 "strings"56 "github.com/charmbracelet/soft-serve/pkg/backend"7 "github.com/charmbracelet/soft-serve/pkg/sshutils"8 "github.com/spf13/cobra"9)1011// PubkeyCommand returns a command that manages user public keys.12func PubkeyCommand() *cobra.Command {13 cmd := &cobra.Command{14 Use: "pubkey",15 Aliases: []string{"pubkeys", "publickey", "publickeys"},16 Short: "Manage your public keys",17 }1819 pubkeyAddCommand := &cobra.Command{20 Use: "add AUTHORIZED_KEY",21 Short: "Add a public key",22 Args: cobra.MinimumNArgs(1),23 RunE: func(cmd *cobra.Command, args []string) error {24 ctx := cmd.Context()25 be := backend.FromContext(ctx)26 pk := sshutils.PublicKeyFromContext(ctx)27 user, err := be.UserByPublicKey(ctx, pk)28 if err != nil {29 return err30 }3132 apk, _, err := sshutils.ParseAuthorizedKey(strings.Join(args, " "))33 if err != nil {34 return err35 }3637 return be.AddPublicKey(ctx, user.Username(), apk)38 },39 }4041 pubkeyRemoveCommand := &cobra.Command{42 Use: "remove AUTHORIZED_KEY",43 Args: cobra.MinimumNArgs(1),44 Short: "Remove a public key",45 RunE: func(cmd *cobra.Command, args []string) error {46 ctx := cmd.Context()47 be := backend.FromContext(ctx)48 pk := sshutils.PublicKeyFromContext(ctx)49 user, err := be.UserByPublicKey(ctx, pk)50 if err != nil {51 return err52 }5354 apk, _, err := sshutils.ParseAuthorizedKey(strings.Join(args, " "))55 if err != nil {56 return err57 }5859 return be.RemovePublicKey(ctx, user.Username(), apk)60 },61 }6263 pubkeyListCommand := &cobra.Command{64 Use: "list",65 Aliases: []string{"ls"},66 Short: "List public keys",67 Args: cobra.NoArgs,68 RunE: func(cmd *cobra.Command, _ []string) error {69 ctx := cmd.Context()70 be := backend.FromContext(ctx)71 pk := sshutils.PublicKeyFromContext(ctx)72 user, err := be.UserByPublicKey(ctx, pk)73 if err != nil {74 return err75 }7677 pks := user.PublicKeys()78 for _, pk := range pks {79 cmd.Println(sshutils.MarshalAuthorizedKey(pk))80 }8182 return nil83 },84 }8586 cmd.AddCommand(87 pubkeyAddCommand,88 pubkeyRemoveCommand,89 pubkeyListCommand,90 )9192 return cmd93}