1package cmd
 2
 3import (
 4	"fmt"
 5	"strconv"
 6
 7	"github.com/charmbracelet/soft-serve/server/backend"
 8	"github.com/spf13/cobra"
 9)
10
11func settingCommand() *cobra.Command {
12	cmd := &cobra.Command{
13		Use:   "setting",
14		Short: "Manage settings",
15	}
16
17	cmd.AddCommand(
18		&cobra.Command{
19			Use:               "allow-keyless [true|false]",
20			Short:             "Set or get allow keyless access to repositories",
21			Args:              cobra.RangeArgs(0, 1),
22			PersistentPreRunE: checkIfAdmin,
23			RunE: func(cmd *cobra.Command, args []string) error {
24				cfg, _ := fromContext(cmd)
25				switch len(args) {
26				case 0:
27					cmd.Println(cfg.Backend.AllowKeyless())
28				case 1:
29					v, _ := strconv.ParseBool(args[0])
30					if err := cfg.Backend.SetAllowKeyless(v); err != nil {
31						return err
32					}
33				}
34
35				return nil
36			},
37		},
38	)
39
40	cmd.AddCommand(
41		&cobra.Command{
42			Use:               "anon-access [ACCESS_LEVEL]",
43			Short:             "Set or get the default access level for anonymous users",
44			Args:              cobra.RangeArgs(0, 1),
45			ValidArgs:         []string{backend.NoAccess.String(), backend.ReadOnlyAccess.String(), backend.ReadWriteAccess.String(), backend.AdminAccess.String()},
46			PersistentPreRunE: checkIfAdmin,
47			RunE: func(cmd *cobra.Command, args []string) error {
48				cfg, _ := fromContext(cmd)
49				switch len(args) {
50				case 0:
51					cmd.Println(cfg.Backend.AnonAccess())
52				case 1:
53					al := backend.ParseAccessLevel(args[0])
54					if al < 0 {
55						return fmt.Errorf("invalid access level: %s", args[0])
56					}
57					if err := cfg.Backend.SetAnonAccess(al); err != nil {
58						return err
59					}
60				}
61
62				return nil
63			},
64		},
65	)
66
67	return cmd
68}