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