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 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 cmd.AddCommand(
41 &cobra.Command{
42 Use: "anon-access [ACCESS_LEVEL]",
43 Short: "Set or get the default access level for anonymous users",
44 Args: cobra.RangeArgs(0, 1),
45 ValidArgs: []string{backend.NoAccess.String(), backend.ReadOnlyAccess.String(), backend.ReadWriteAccess.String(), backend.AdminAccess.String()},
46 PersistentPreRunE: checkIfAdmin,
47 RunE: func(cmd *cobra.Command, args []string) error {
48 cfg, _ := fromContext(cmd)
49 switch len(args) {
50 case 0:
51 cmd.Println(cfg.Backend.AnonAccess())
52 case 1:
53 al := backend.ParseAccessLevel(args[0])
54 if al < 0 {
55 return fmt.Errorf("invalid access level: %s", args[0])
56 }
57 if err := cfg.Backend.SetAnonAccess(al); err != nil {
58 return err
59 }
60 }
61
62 return nil
63 },
64 },
65 )
66
67 return cmd
68}