feat(cmd): add settings server command

Ayman Bagabas created

Change summary

server/cmd/setting.go | 68 +++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 68 insertions(+)

Detailed changes

server/cmd/setting.go 🔗

@@ -0,0 +1,68 @@
+package cmd
+
+import (
+	"fmt"
+	"strconv"
+
+	"github.com/charmbracelet/soft-serve/server/backend"
+	"github.com/spf13/cobra"
+)
+
+func settingCommand() *cobra.Command {
+	cmd := &cobra.Command{
+		Use:   "setting",
+		Short: "Manage settings",
+	}
+
+	cmd.AddCommand(
+		&cobra.Command{
+			Use:               "allow-keyless [true|false]",
+			Short:             "Set or get allow keyless access to repositories",
+			Args:              cobra.RangeArgs(0, 1),
+			PersistentPreRunE: checkIfAdmin,
+			RunE: func(cmd *cobra.Command, args []string) error {
+				cfg, _ := fromContext(cmd)
+				switch len(args) {
+				case 0:
+					cmd.Println(cfg.Backend.AllowKeyless())
+				case 1:
+					v, _ := strconv.ParseBool(args[0])
+					if err := cfg.Backend.SetAllowKeyless(v); err != nil {
+						return err
+					}
+				}
+
+				return nil
+			},
+		},
+	)
+
+	cmd.AddCommand(
+		&cobra.Command{
+			Use:               "anon-access [ACCESS_LEVEL]",
+			Short:             "Set or get the default access level for anonymous users",
+			Args:              cobra.RangeArgs(0, 1),
+			ValidArgs:         []string{backend.NoAccess.String(), backend.ReadOnlyAccess.String(), backend.ReadWriteAccess.String(), backend.AdminAccess.String()},
+			PersistentPreRunE: checkIfAdmin,
+			RunE: func(cmd *cobra.Command, args []string) error {
+				cfg, _ := fromContext(cmd)
+				switch len(args) {
+				case 0:
+					cmd.Println(cfg.Backend.AnonAccess())
+				case 1:
+					al := backend.ParseAccessLevel(args[0])
+					if al < 0 {
+						return fmt.Errorf("invalid access level: %s", args[0])
+					}
+					if err := cfg.Backend.SetAnonAccess(al); err != nil {
+						return err
+					}
+				}
+
+				return nil
+			},
+		},
+	)
+
+	return cmd
+}