1package cmd
 2
 3import (
 4	"strings"
 5
 6	"github.com/charmbracelet/soft-serve/server/backend"
 7	"github.com/spf13/cobra"
 8)
 9
10func adminCommand() *cobra.Command {
11	cmd := &cobra.Command{
12		Use:     "admin",
13		Aliases: []string{"admins"},
14		Short:   "Manage admins",
15	}
16
17	cmd.AddCommand(
18		adminAddCommand(),
19		adminRemoveCommand(),
20		adminListCommand(),
21	)
22
23	return cmd
24}
25
26func adminAddCommand() *cobra.Command {
27	cmd := &cobra.Command{
28		Use:               "add AUTHORIZED_KEY",
29		Short:             "Add an admin",
30		Args:              cobra.MinimumNArgs(1),
31		PersistentPreRunE: checkIfAdmin,
32		RunE: func(cmd *cobra.Command, args []string) error {
33			cfg, _ := fromContext(cmd)
34			pk, c, err := backend.ParseAuthorizedKey(strings.Join(args, " "))
35			if err != nil {
36				return err
37			}
38
39			return cfg.Backend.AddAdmin(pk, c)
40		},
41	}
42
43	return cmd
44}
45
46func adminRemoveCommand() *cobra.Command {
47	cmd := &cobra.Command{
48		Use:               "remove AUTHORIZED_KEY",
49		Args:              cobra.MinimumNArgs(1),
50		Short:             "Remove an admin",
51		PersistentPreRunE: checkIfAdmin,
52		RunE: func(cmd *cobra.Command, args []string) error {
53			cfg, _ := fromContext(cmd)
54			pk, _, err := backend.ParseAuthorizedKey(strings.Join(args, " "))
55			if err != nil {
56				return err
57			}
58
59			return cfg.Backend.RemoveAdmin(pk)
60		},
61	}
62
63	return cmd
64}
65
66func adminListCommand() *cobra.Command {
67	cmd := &cobra.Command{
68		Use:               "list",
69		Args:              cobra.NoArgs,
70		Short:             "List admins",
71		PersistentPreRunE: checkIfAdmin,
72		RunE: func(cmd *cobra.Command, _ []string) error {
73			cfg, _ := fromContext(cmd)
74			admins, err := cfg.Backend.Admins()
75			if err != nil {
76				return err
77			}
78
79			for _, admin := range admins {
80				cmd.Println(admin)
81			}
82
83			return nil
84		},
85	}
86
87	return cmd
88}