From c678825749984a0037b08d9fc0c5b75432817139 Mon Sep 17 00:00:00 2001 From: oppiliappan Date: Tue, 5 Aug 2025 10:12:07 +0100 Subject: [PATCH] spindle: fetch and add existing collaborators when ingesting repos Change-Id: vuzywsvmkwqntkwtttzkxwylrlqtsvsw Signed-off-by: oppiliappan --- .../templates/repo/settings/pipelines.html | 49 ++++++++++--------- appview/repo/repo.go | 4 +- knotserver/ingester.go | 1 - spindle/ingester.go | 22 +++++++-- 4 files changed, 48 insertions(+), 28 deletions(-) diff --git a/appview/pages/templates/repo/settings/pipelines.html b/appview/pages/templates/repo/settings/pipelines.html index 65e878d..a731e1d 100644 --- a/appview/pages/templates/repo/settings/pipelines.html +++ b/appview/pages/templates/repo/settings/pipelines.html @@ -20,34 +20,39 @@

Spindle

- Choose a spindle to execute your workflows on. Spindles can be - selfhosted, + Choose a spindle to execute your workflows on. Only repository owners + can configure spindles. Spindles can be selfhosted, click to learn more.

-
- + - {{ end }} - - -
+ {{ range $.Spindles }} + + {{ end }} + + + + {{ end }} {{ end }} diff --git a/appview/repo/repo.go b/appview/repo/repo.go index 8d2c133..7aa72b7 100644 --- a/appview/repo/repo.go +++ b/appview/repo/repo.go @@ -1225,8 +1225,8 @@ func (rp *Repo) pipelineSettings(w http.ResponseWriter, r *http.Request) { f, err := rp.repoResolver.Resolve(r) user := rp.oauth.GetUser(r) - // all spindles that this user is a member of - spindles, err := rp.enforcer.GetSpindlesForUser(user.Did) + // all spindles that the repo owner is a member of + spindles, err := rp.enforcer.GetSpindlesForUser(f.OwnerDid()) if err != nil { log.Println("failed to fetch spindles", err) return diff --git a/knotserver/ingester.go b/knotserver/ingester.go index 25afba5..1f1cc21 100644 --- a/knotserver/ingester.go +++ b/knotserver/ingester.go @@ -316,7 +316,6 @@ func (h *Handle) processMessages(ctx context.Context, event *models.Event) error defer func() { eventTime := event.TimeUS lastTimeUs := eventTime + 1 - fmt.Println("lastTimeUs", lastTimeUs) if err := h.db.SaveLastTimeUs(lastTimeUs); err != nil { err = fmt.Errorf("(deferred) failed to save last time us: %w", err) } diff --git a/spindle/ingester.go b/spindle/ingester.go index 51db36d..a47fa97 100644 --- a/spindle/ingester.go +++ b/spindle/ingester.go @@ -3,8 +3,8 @@ package spindle import ( "context" "encoding/json" + "errors" "fmt" - "path/filepath" "tangled.sh/tangled.sh/core/api/tangled" "tangled.sh/tangled.sh/core/eventconsumer" @@ -100,8 +100,10 @@ func (s *Spindle) ingestMember(_ context.Context, e *models.Event) error { return nil } -func (s *Spindle) ingestRepo(_ context.Context, e *models.Event) error { +func (s *Spindle) ingestRepo(ctx context.Context, e *models.Event) error { var err error + did := e.Did + resolver := idresolver.DefaultResolver() l := s.l.With("component", "ingester", "record", tangled.RepoNSID) @@ -137,12 +139,26 @@ func (s *Spindle) ingestRepo(_ context.Context, e *models.Event) error { return fmt.Errorf("failed to add repo: %w", err) } + didSlashRepo, err := securejoin.SecureJoin(record.Owner, record.Name) + if err != nil { + return err + } + // add repo to rbac - if err := s.e.AddRepo(record.Owner, rbac.ThisServer, filepath.Join(record.Owner, record.Name)); err != nil { + if err := s.e.AddRepo(record.Owner, rbac.ThisServer, didSlashRepo); err != nil { l.Error("failed to add repo to enforcer", "error", err) return fmt.Errorf("failed to add repo: %w", err) } + // add collaborators to rbac + owner, err := resolver.ResolveIdent(ctx, did) + if err != nil || owner.Handle.IsInvalidHandle() { + return err + } + if err := s.fetchAndAddCollaborators(ctx, owner, didSlashRepo); err != nil { + return err + } + // add this knot to the event consumer src := eventconsumer.NewKnotSource(record.Knot) s.ks.AddSource(context.Background(), src) -- 2.43.0