settings.go

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