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