37fbfa28f4c6ba71e4c0532565313ab0f14fd1f4

Author
Ayman Bagabas <ayman.bagabas@gmail.com>
Committer
Ayman Bagabas <ayman.bagabas@gmail.com>
Date

Message

fix(ui): check repo access level

Diff

 1diff --git a/server/server.go b/server/server.go
 2index 5cfa6192a967f08123e8334ce80a4b98743df35e..e3f66d3c5a6e49bc2ed4b9ecf6db364768647dd9 100644
 3--- a/server/server.go
 4+++ b/server/server.go
 5@@ -41,6 +41,16 @@ func NewServer(cfg *config.Config) (*Server, error) {
 6 		// Add the initial admin keys to the list of admins.
 7 		fb.AdditionalAdmins = cfg.InitialAdminKeys
 8 		cfg = cfg.WithBackend(fb)
 9+
10+		// Create internal key.
11+		_, err = keygen.NewWithWrite(
12+			filepath.Join(cfg.DataPath, cfg.SSH.InternalKeyPath),
13+			nil,
14+			keygen.Ed25519,
15+		)
16+		if err != nil {
17+			return nil, err
18+		}
19 	}
20 
21 	srv := &Server{
22diff --git a/ui/pages/selection/selection.go b/ui/pages/selection/selection.go
23index bfd1f31f656118150815302dad0686096048a80b..944251ebf5b04141115800f6487c9752d193edc9 100644
24--- a/ui/pages/selection/selection.go
25+++ b/ui/pages/selection/selection.go
26@@ -9,6 +9,7 @@ import (
27 	tea "github.com/charmbracelet/bubbletea"
28 	"github.com/charmbracelet/lipgloss"
29 	"github.com/charmbracelet/log"
30+	"github.com/charmbracelet/soft-serve/server/backend"
31 	"github.com/charmbracelet/soft-serve/ui/common"
32 	"github.com/charmbracelet/soft-serve/ui/components/code"
33 	"github.com/charmbracelet/soft-serve/ui/components/selector"
34@@ -182,23 +183,30 @@ func (s *Selection) FullHelp() [][]key.Binding {
35 func (s *Selection) Init() tea.Cmd {
36 	var readmeCmd tea.Cmd
37 	cfg := s.common.Config()
38+	if cfg == nil {
39+		return nil
40+	}
41+
42 	pk := s.common.PublicKey()
43-	if cfg == nil || pk == nil {
44+	if pk == nil && !cfg.Backend.AllowKeyless() {
45 		return nil
46 	}
47+
48 	repos, err := cfg.Backend.Repositories()
49 	if err != nil {
50 		return common.ErrorCmd(err)
51 	}
52 	sortedItems := make(Items, 0)
53-	// Put configured repos first
54 	for _, r := range repos {
55-		item, err := NewItem(r, cfg)
56-		if err != nil {
57-			logger.Debugf("ui: failed to create item for %s: %v", r.Name(), err)
58-			continue
59+		al := cfg.Backend.AccessLevel(r.Name(), pk)
60+		if al >= backend.ReadOnlyAccess {
61+			item, err := NewItem(r, cfg)
62+			if err != nil {
63+				logger.Debugf("ui: failed to create item for %s: %v", r.Name(), err)
64+				continue
65+			}
66+			sortedItems = append(sortedItems, item)
67 		}
68-		sortedItems = append(sortedItems, item)
69 	}
70 	sort.Sort(sortedItems)
71 	items := make([]selector.IdentifiableItem, len(sortedItems))