1package cmd23import (4 "fmt"5 "strconv"67 "github.com/charmbracelet/soft-serve/pkg/access"8 "github.com/charmbracelet/soft-serve/pkg/backend"9 "github.com/spf13/cobra"10)1112// SettingsCommand returns a command that manages server settings.13func SettingsCommand() *cobra.Command {14 cmd := &cobra.Command{15 Use: "settings",16 Short: "Manage server settings",17 }1819 cmd.AddCommand(20 &cobra.Command{21 Use: "allow-keyless [true|false]",22 Short: "Set or get allow keyless access to repositories",23 Args: cobra.RangeArgs(0, 1),24 PersistentPreRunE: checkIfAdmin,25 RunE: func(cmd *cobra.Command, args []string) error {26 ctx := cmd.Context()27 be := backend.FromContext(ctx)28 switch len(args) {29 case 0:30 cmd.Println(be.AllowKeyless(ctx))31 case 1:32 v, _ := strconv.ParseBool(args[0])33 if err := be.SetAllowKeyless(ctx, v); err != nil {34 return err35 }36 }3738 return nil39 },40 },41 )4243 als := []string{access.NoAccess.String(), access.ReadOnlyAccess.String(), access.ReadWriteAccess.String(), access.AdminAccess.String()}44 cmd.AddCommand(45 &cobra.Command{46 Use: "anon-access [ACCESS_LEVEL]",47 Short: "Set or get the default access level for anonymous users",48 Args: cobra.RangeArgs(0, 1),49 ValidArgs: als,50 PersistentPreRunE: checkIfAdmin,51 RunE: func(cmd *cobra.Command, args []string) error {52 ctx := cmd.Context()53 be := backend.FromContext(ctx)54 switch len(args) {55 case 0:56 cmd.Println(be.AnonAccess(ctx))57 case 1:58 al := access.ParseAccessLevel(args[0])59 if al < 0 {60 return fmt.Errorf("invalid access level: %s. Please choose one of the following: %s", args[0], als)61 }62 if err := be.SetAnonAccess(ctx, al); err != nil {63 return err64 }65 }6667 return nil68 },69 },70 )7172 return cmd73}