1package cmd
2
3import (
4 "github.com/charmbracelet/soft-serve/server/access"
5 "github.com/charmbracelet/soft-serve/server/auth"
6 "github.com/spf13/cobra"
7)
8
9// listCommand returns a command that list file or directory at path.
10func listCommand() *cobra.Command {
11 var all bool
12
13 listCmd := &cobra.Command{
14 Use: "list",
15 Aliases: []string{"ls"},
16 Short: "List repositories",
17 Args: cobra.NoArgs,
18 RunE: func(cmd *cobra.Command, args []string) error {
19 ctx := cmd.Context()
20 be, s := fromContext(cmd)
21 repos, err := be.Repositories(ctx, 1, 10)
22 if err != nil {
23 return err
24 }
25
26 user, err := be.Authenticate(ctx, auth.NewPublicKey(s.PublicKey()))
27 if err != nil {
28 return err
29 }
30
31 for _, r := range repos {
32 ac, err := be.AccessLevel(ctx, r.Name(), user)
33 if err != nil {
34 continue
35 }
36
37 if ac >= access.ReadOnlyAccess {
38 if !r.IsHidden() || all {
39 cmd.Println(r.Name())
40 }
41 }
42 }
43 return nil
44 },
45 }
46
47 listCmd.Flags().BoolVarP(&all, "all", "a", false, "List all repositories")
48
49 return listCmd
50}