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}