setting.go

 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 server 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	als := []string{backend.NoAccess.String(), backend.ReadOnlyAccess.String(), backend.ReadWriteAccess.String(), backend.AdminAccess.String()}
41	cmd.AddCommand(
42		&cobra.Command{
43			Use:               "anon-access [ACCESS_LEVEL]",
44			Short:             "Set or get the default access level for anonymous users",
45			Args:              cobra.RangeArgs(0, 1),
46			ValidArgs:         als,
47			PersistentPreRunE: checkIfAdmin,
48			RunE: func(cmd *cobra.Command, args []string) error {
49				cfg, _ := fromContext(cmd)
50				switch len(args) {
51				case 0:
52					cmd.Println(cfg.Backend.AnonAccess())
53				case 1:
54					al := backend.ParseAccessLevel(args[0])
55					if al < 0 {
56						return fmt.Errorf("invalid access level: %s. Please choose one of the following: %s", args[0], als)
57					}
58					if err := cfg.Backend.SetAnonAccess(al); err != nil {
59						return err
60					}
61				}
62
63				return nil
64			},
65		},
66	)
67
68	return cmd
69}