forked from tangled.org/core
Monorepo for Tangled — https://tangled.org

appview/repo: add new spindles to consumer as they are ingested

Signed-off-by: oppiliappan <me@oppi.li>

authored by oppi.li and committed by Tangled 261dab2e 6ced1c38

Changed files
+44 -21
appview
+17 -5
appview/ingester.go
··· 294 return nil 295 } 296 297 - func ingestSpindleMember(d *db.DbWrapper, e *models.Event, enforcer *rbac.Enforcer) error { 298 did := e.Did 299 var err error 300 ··· 338 } 339 340 // this is a special record whose rkey is the instance of the spindle itself 341 - domain := e.Commit.RKey 342 343 - owner, err := fetchOwner(context.TODO(), domain, true) 344 if err != nil { 345 - log.Printf("failed to verify owner of %s: %w", domain, err) 346 return err 347 } 348 349 // verify that the spindle owner points back to this did 350 if owner != did { 351 - log.Printf("incorrect owner for domain: %s, %s != %s", domain, owner, did) 352 return err 353 } 354 355 // mark this spindle as registered 356 } 357 358 return nil
··· 294 return nil 295 } 296 297 + func ingestSpindleMember(_ *db.DbWrapper, e *models.Event, enforcer *rbac.Enforcer) error { 298 did := e.Did 299 var err error 300 ··· 338 } 339 340 // this is a special record whose rkey is the instance of the spindle itself 341 + instance := e.Commit.RKey 342 343 + owner, err := fetchOwner(context.TODO(), instance, dev) 344 if err != nil { 345 + log.Printf("failed to verify owner of %s: %s", instance, err) 346 return err 347 } 348 349 // verify that the spindle owner points back to this did 350 if owner != did { 351 + log.Printf("incorrect owner for domain: %s, %s != %s", instance, owner, did) 352 return err 353 } 354 355 // mark this spindle as registered 356 + ddb, ok := d.Execer.(*db.DB) 357 + if !ok { 358 + return fmt.Errorf("failed to index profile record, invalid db cast") 359 + } 360 + 361 + _, err = db.VerifySpindle( 362 + ddb, 363 + db.FilterEq("owner", did), 364 + db.FilterEq("instance", instance), 365 + ) 366 + 367 + return err 368 } 369 370 return nil
+26 -15
appview/repo/repo.go
··· 1 package repo 2 3 import ( 4 "database/sql" 5 "encoding/json" 6 "errors" ··· 27 "tangled.sh/tangled.sh/core/appview/pages/markup" 28 "tangled.sh/tangled.sh/core/appview/pages/repoinfo" 29 "tangled.sh/tangled.sh/core/appview/reporesolver" 30 "tangled.sh/tangled.sh/core/knotclient" 31 "tangled.sh/tangled.sh/core/patchutil" 32 "tangled.sh/tangled.sh/core/rbac" ··· 42 ) 43 44 type Repo struct { 45 - repoResolver *reporesolver.RepoResolver 46 - idResolver *idresolver.Resolver 47 - config *config.Config 48 - oauth *oauth.OAuth 49 - pages *pages.Pages 50 - db *db.DB 51 - enforcer *rbac.Enforcer 52 - posthog posthog.Client 53 } 54 55 func New( 56 oauth *oauth.OAuth, 57 repoResolver *reporesolver.RepoResolver, 58 pages *pages.Pages, 59 idResolver *idresolver.Resolver, 60 db *db.DB, 61 config *config.Config, ··· 63 enforcer *rbac.Enforcer, 64 ) *Repo { 65 return &Repo{oauth: oauth, 66 - repoResolver: repoResolver, 67 - pages: pages, 68 - idResolver: idResolver, 69 - config: config, 70 - db: db, 71 - posthog: posthog, 72 - enforcer: enforcer, 73 } 74 } 75 ··· 830 rp.pages.Notice(w, "repo-notice", "Failed to configure spindle, unable to save to PDS.") 831 return 832 } 833 834 w.Write(fmt.Append(nil, "spindle set to: ", newSpindle)) 835 }
··· 1 package repo 2 3 import ( 4 + "context" 5 "database/sql" 6 "encoding/json" 7 "errors" ··· 28 "tangled.sh/tangled.sh/core/appview/pages/markup" 29 "tangled.sh/tangled.sh/core/appview/pages/repoinfo" 30 "tangled.sh/tangled.sh/core/appview/reporesolver" 31 + "tangled.sh/tangled.sh/core/eventconsumer" 32 "tangled.sh/tangled.sh/core/knotclient" 33 "tangled.sh/tangled.sh/core/patchutil" 34 "tangled.sh/tangled.sh/core/rbac" ··· 44 ) 45 46 type Repo struct { 47 + repoResolver *reporesolver.RepoResolver 48 + idResolver *idresolver.Resolver 49 + config *config.Config 50 + oauth *oauth.OAuth 51 + pages *pages.Pages 52 + spindlestream *eventconsumer.Consumer 53 + db *db.DB 54 + enforcer *rbac.Enforcer 55 + posthog posthog.Client 56 } 57 58 func New( 59 oauth *oauth.OAuth, 60 repoResolver *reporesolver.RepoResolver, 61 pages *pages.Pages, 62 + spindlestream *eventconsumer.Consumer, 63 idResolver *idresolver.Resolver, 64 db *db.DB, 65 config *config.Config, ··· 67 enforcer *rbac.Enforcer, 68 ) *Repo { 69 return &Repo{oauth: oauth, 70 + repoResolver: repoResolver, 71 + pages: pages, 72 + idResolver: idResolver, 73 + config: config, 74 + spindlestream: spindlestream, 75 + db: db, 76 + posthog: posthog, 77 + enforcer: enforcer, 78 } 79 } 80 ··· 835 rp.pages.Notice(w, "repo-notice", "Failed to configure spindle, unable to save to PDS.") 836 return 837 } 838 + 839 + // add this spindle to spindle stream 840 + rp.spindlestream.AddSource( 841 + context.Background(), 842 + eventconsumer.NewSpindleSource(newSpindle), 843 + ) 844 845 w.Write(fmt.Append(nil, "spindle set to: ", newSpindle)) 846 }
+1 -1
appview/state/router.go
··· 199 } 200 201 func (s *State) RepoRouter(mw *middleware.Middleware) http.Handler { 202 - repo := repo.New(s.oauth, s.repoResolver, s.pages, s.idResolver, s.db, s.config, s.posthog, s.enforcer) 203 return repo.Router(mw) 204 }
··· 199 } 200 201 func (s *State) RepoRouter(mw *middleware.Middleware) http.Handler { 202 + repo := repo.New(s.oauth, s.repoResolver, s.pages, s.spindlestream, s.idResolver, s.db, s.config, s.posthog, s.enforcer) 203 return repo.Router(mw) 204 }