0bfce9c16fc55c3a3fec23acebef32ea7e638125

Author
Ayman Bagabas <ayman.bagabas@gmail.com>
Committer
Ayman Bagabas <ayman.bagabas@gmail.com>
Date

Message

feat(cmd): add settings server command

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+}