settings.go

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