1package cmd
2
3import (
4 "strings"
5
6 "github.com/charmbracelet/soft-serve/server/backend"
7 "github.com/spf13/cobra"
8)
9
10func pubkeyCommand() *cobra.Command {
11 cmd := &cobra.Command{
12 Use: "pubkey",
13 Aliases: []string{"pubkeys", "publickey", "publickeys"},
14 Short: "Manage your public keys",
15 }
16
17 pubkeyAddCommand := &cobra.Command{
18 Use: "add AUTHORIZED_KEY",
19 Short: "Add a public key",
20 Args: cobra.MinimumNArgs(1),
21 RunE: func(cmd *cobra.Command, args []string) error {
22 cfg, s := fromContext(cmd)
23 user, err := cfg.Backend.UserByPublicKey(s.PublicKey())
24 if err != nil {
25 return err
26 }
27
28 pk, _, err := backend.ParseAuthorizedKey(strings.Join(args, " "))
29 if err != nil {
30 return err
31 }
32
33 return cfg.Backend.AddPublicKey(user.Username(), pk)
34 },
35 }
36
37 pubkeyRemoveCommand := &cobra.Command{
38 Use: "remove AUTHORIZED_KEY",
39 Args: cobra.MinimumNArgs(1),
40 Short: "Remove a public key",
41 RunE: func(cmd *cobra.Command, args []string) error {
42 cfg, s := fromContext(cmd)
43 user, err := cfg.Backend.UserByPublicKey(s.PublicKey())
44 if err != nil {
45 return err
46 }
47
48 pk, _, err := backend.ParseAuthorizedKey(strings.Join(args, " "))
49 if err != nil {
50 return err
51 }
52
53 return cfg.Backend.RemovePublicKey(user.Username(), pk)
54 },
55 }
56
57 pubkeyListCommand := &cobra.Command{
58 Use: "list",
59 Aliases: []string{"ls"},
60 Short: "List public keys",
61 Args: cobra.NoArgs,
62 RunE: func(cmd *cobra.Command, args []string) error {
63 cfg, s := fromContext(cmd)
64 user, err := cfg.Backend.UserByPublicKey(s.PublicKey())
65 if err != nil {
66 return err
67 }
68
69 pks := user.PublicKeys()
70 for _, pk := range pks {
71 cmd.Println(backend.MarshalAuthorizedKey(pk))
72 }
73
74 return nil
75 },
76 }
77
78 cmd.AddCommand(
79 pubkeyAddCommand,
80 pubkeyRemoveCommand,
81 pubkeyListCommand,
82 )
83
84 return cmd
85}