From 4145917b68c54b7769f76c7891d02823c855cc97 Mon Sep 17 00:00:00 2001 From: oppiliappan Date: Sun, 27 Jul 2025 15:24:39 +0100 Subject: [PATCH] appview: replace all occurrences of TID with global tid package Signed-off-by: oppiliappan --- appview/issues/issues.go | 12 +- appview/knots/knots.go | 4 +- appview/pulls/pulls.go | 8 +- appview/repo/artifact.go | 4 +- appview/repo/repo.go | 4 +- appview/settings/settings.go | 4 +- appview/spindles/spindles.go | 4 +- appview/state/follow.go | 8 +- appview/state/reaction.go | 16 +- appview/state/star.go | 8 +- appview/state/state.go | 348 +---------------------------------- appview/tid.go | 11 -- go.mod | 2 +- 13 files changed, 39 insertions(+), 394 deletions(-) delete mode 100644 appview/tid.go diff --git a/appview/issues/issues.go b/appview/issues/issues.go index c65f0d23..b6d236d0 100644 --- a/appview/issues/issues.go +++ b/appview/issues/issues.go @@ -16,7 +16,6 @@ import ( "github.com/go-chi/chi/v5" "tangled.sh/tangled.sh/core/api/tangled" - "tangled.sh/tangled.sh/core/appview" "tangled.sh/tangled.sh/core/appview/config" "tangled.sh/tangled.sh/core/appview/db" "tangled.sh/tangled.sh/core/appview/idresolver" @@ -25,6 +24,7 @@ import ( "tangled.sh/tangled.sh/core/appview/pages" "tangled.sh/tangled.sh/core/appview/pagination" "tangled.sh/tangled.sh/core/appview/reporesolver" + "tangled.sh/tangled.sh/core/tid" ) type Issues struct { @@ -120,8 +120,8 @@ func (rp *Issues) RepoSingleIssue(w http.ResponseWriter, r *http.Request) { DidHandleMap: didHandleMap, OrderedReactionKinds: db.OrderedReactionKinds, - Reactions: reactionCountMap, - UserReacted: userReactions, + Reactions: reactionCountMap, + UserReacted: userReactions, }) } @@ -171,7 +171,7 @@ func (rp *Issues) CloseIssue(w http.ResponseWriter, r *http.Request) { _, err = client.RepoPutRecord(r.Context(), &comatproto.RepoPutRecord_Input{ Collection: tangled.RepoIssueStateNSID, Repo: user.Did, - Rkey: appview.TID(), + Rkey: tid.TID(), Record: &lexutil.LexiconTypeDecoder{ Val: &tangled.RepoIssueState{ Issue: issue.IssueAt, @@ -275,7 +275,7 @@ func (rp *Issues) NewIssueComment(w http.ResponseWriter, r *http.Request) { } commentId := mathrand.IntN(1000000) - rkey := appview.TID() + rkey := tid.TID() err := db.NewIssueComment(rp.db, &db.Comment{ OwnerDid: user.Did, @@ -726,7 +726,7 @@ func (rp *Issues) NewIssue(w http.ResponseWriter, r *http.Request) { resp, err := client.RepoPutRecord(r.Context(), &comatproto.RepoPutRecord_Input{ Collection: tangled.RepoIssueNSID, Repo: user.Did, - Rkey: appview.TID(), + Rkey: tid.TID(), Record: &lexutil.LexiconTypeDecoder{ Val: &tangled.RepoIssue{ Repo: atUri, diff --git a/appview/knots/knots.go b/appview/knots/knots.go index 811aaf86..33c2224b 100644 --- a/appview/knots/knots.go +++ b/appview/knots/knots.go @@ -13,7 +13,6 @@ import ( "github.com/go-chi/chi/v5" "tangled.sh/tangled.sh/core/api/tangled" - "tangled.sh/tangled.sh/core/appview" "tangled.sh/tangled.sh/core/appview/config" "tangled.sh/tangled.sh/core/appview/db" "tangled.sh/tangled.sh/core/appview/idresolver" @@ -23,6 +22,7 @@ import ( "tangled.sh/tangled.sh/core/eventconsumer" "tangled.sh/tangled.sh/core/knotclient" "tangled.sh/tangled.sh/core/rbac" + "tangled.sh/tangled.sh/core/tid" comatproto "github.com/bluesky-social/indigo/api/atproto" lexutil "github.com/bluesky-social/indigo/lex/util" @@ -436,7 +436,7 @@ func (k *Knots) addMember(w http.ResponseWriter, r *http.Request) { resp, err := client.RepoPutRecord(r.Context(), &comatproto.RepoPutRecord_Input{ Collection: tangled.KnotMemberNSID, Repo: currentUser.Did, - Rkey: appview.TID(), + Rkey: tid.TID(), Record: &lexutil.LexiconTypeDecoder{ Val: &tangled.KnotMember{ Subject: subjectIdentity.DID.String(), diff --git a/appview/pulls/pulls.go b/appview/pulls/pulls.go index 3606b704..9b503517 100644 --- a/appview/pulls/pulls.go +++ b/appview/pulls/pulls.go @@ -14,7 +14,6 @@ import ( "time" "tangled.sh/tangled.sh/core/api/tangled" - "tangled.sh/tangled.sh/core/appview" "tangled.sh/tangled.sh/core/appview/config" "tangled.sh/tangled.sh/core/appview/db" "tangled.sh/tangled.sh/core/appview/idresolver" @@ -24,6 +23,7 @@ import ( "tangled.sh/tangled.sh/core/appview/reporesolver" "tangled.sh/tangled.sh/core/knotclient" "tangled.sh/tangled.sh/core/patchutil" + "tangled.sh/tangled.sh/core/tid" "tangled.sh/tangled.sh/core/types" "github.com/bluekeyes/go-gitdiff/gitdiff" @@ -668,7 +668,7 @@ func (s *Pulls) PullComment(w http.ResponseWriter, r *http.Request) { atResp, err := client.RepoPutRecord(r.Context(), &comatproto.RepoPutRecord_Input{ Collection: tangled.RepoPullCommentNSID, Repo: user.Did, - Rkey: appview.TID(), + Rkey: tid.TID(), Record: &lexutil.LexiconTypeDecoder{ Val: &tangled.RepoPullComment{ Repo: &atUri, @@ -1038,7 +1038,7 @@ func (s *Pulls) createPullRequest( body = formatPatches[0].Body } - rkey := appview.TID() + rkey := tid.TID() initialSubmission := db.PullSubmission{ Patch: patch, SourceRev: sourceRev, @@ -2168,7 +2168,7 @@ func newStack(f *reporesolver.ResolvedRepo, user *oauth.User, targetBranch, patc title := fp.Title body := fp.Body - rkey := appview.TID() + rkey := tid.TID() initialSubmission := db.PullSubmission{ Patch: fp.Raw, diff --git a/appview/repo/artifact.go b/appview/repo/artifact.go index f84f3629..e9124daa 100644 --- a/appview/repo/artifact.go +++ b/appview/repo/artifact.go @@ -14,11 +14,11 @@ import ( "github.com/go-git/go-git/v5/plumbing" "github.com/ipfs/go-cid" "tangled.sh/tangled.sh/core/api/tangled" - "tangled.sh/tangled.sh/core/appview" "tangled.sh/tangled.sh/core/appview/db" "tangled.sh/tangled.sh/core/appview/pages" "tangled.sh/tangled.sh/core/appview/reporesolver" "tangled.sh/tangled.sh/core/knotclient" + "tangled.sh/tangled.sh/core/tid" "tangled.sh/tangled.sh/core/types" ) @@ -64,7 +64,7 @@ func (rp *Repo) AttachArtifact(w http.ResponseWriter, r *http.Request) { log.Println("uploaded blob", humanize.Bytes(uint64(uploadBlobResp.Blob.Size)), uploadBlobResp.Blob.Ref.String()) - rkey := appview.TID() + rkey := tid.TID() createdAt := time.Now() putRecordResp, err := client.RepoPutRecord(r.Context(), &comatproto.RepoPutRecord_Input{ diff --git a/appview/repo/repo.go b/appview/repo/repo.go index 7d28e622..a8bb761e 100644 --- a/appview/repo/repo.go +++ b/appview/repo/repo.go @@ -16,7 +16,6 @@ import ( "time" "tangled.sh/tangled.sh/core/api/tangled" - "tangled.sh/tangled.sh/core/appview" "tangled.sh/tangled.sh/core/appview/commitverify" "tangled.sh/tangled.sh/core/appview/config" "tangled.sh/tangled.sh/core/appview/db" @@ -30,6 +29,7 @@ import ( "tangled.sh/tangled.sh/core/knotclient" "tangled.sh/tangled.sh/core/patchutil" "tangled.sh/tangled.sh/core/rbac" + "tangled.sh/tangled.sh/core/tid" "tangled.sh/tangled.sh/core/types" securejoin "github.com/cyphar/filepath-securejoin" @@ -1088,7 +1088,7 @@ func (rp *Repo) ForkRepo(w http.ResponseWriter, r *http.Request) { forkSourceUrl := fmt.Sprintf("%s://%s/%s/%s", uri, f.Knot, f.OwnerDid(), f.RepoName) sourceAt := f.RepoAt.String() - rkey := appview.TID() + rkey := tid.TID() repo := &db.Repo{ Did: user.Did, Name: forkName, diff --git a/appview/settings/settings.go b/appview/settings/settings.go index 3bb1d864..23a533e7 100644 --- a/appview/settings/settings.go +++ b/appview/settings/settings.go @@ -12,13 +12,13 @@ import ( "github.com/go-chi/chi/v5" "tangled.sh/tangled.sh/core/api/tangled" - "tangled.sh/tangled.sh/core/appview" "tangled.sh/tangled.sh/core/appview/config" "tangled.sh/tangled.sh/core/appview/db" "tangled.sh/tangled.sh/core/appview/email" "tangled.sh/tangled.sh/core/appview/middleware" "tangled.sh/tangled.sh/core/appview/oauth" "tangled.sh/tangled.sh/core/appview/pages" + "tangled.sh/tangled.sh/core/tid" comatproto "github.com/bluesky-social/indigo/api/atproto" lexutil "github.com/bluesky-social/indigo/lex/util" @@ -366,7 +366,7 @@ func (s *Settings) keys(w http.ResponseWriter, r *http.Request) { return } - rkey := appview.TID() + rkey := tid.TID() tx, err := s.Db.Begin() if err != nil { diff --git a/appview/spindles/spindles.go b/appview/spindles/spindles.go index 6e729231..10db0672 100644 --- a/appview/spindles/spindles.go +++ b/appview/spindles/spindles.go @@ -10,7 +10,6 @@ import ( "github.com/go-chi/chi/v5" "tangled.sh/tangled.sh/core/api/tangled" - "tangled.sh/tangled.sh/core/appview" "tangled.sh/tangled.sh/core/appview/config" "tangled.sh/tangled.sh/core/appview/db" "tangled.sh/tangled.sh/core/appview/idresolver" @@ -19,6 +18,7 @@ import ( "tangled.sh/tangled.sh/core/appview/pages" verify "tangled.sh/tangled.sh/core/appview/spindleverify" "tangled.sh/tangled.sh/core/rbac" + "tangled.sh/tangled.sh/core/tid" comatproto "github.com/bluesky-social/indigo/api/atproto" "github.com/bluesky-social/indigo/atproto/syntax" @@ -524,7 +524,7 @@ func (s *Spindles) addMember(w http.ResponseWriter, r *http.Request) { s.Enforcer.E.LoadPolicy() }() - rkey := appview.TID() + rkey := tid.TID() // add member to db if err = db.AddSpindleMember(tx, db.SpindleMember{ diff --git a/appview/state/follow.go b/appview/state/follow.go index 97941f61..aa611781 100644 --- a/appview/state/follow.go +++ b/appview/state/follow.go @@ -8,9 +8,9 @@ import ( comatproto "github.com/bluesky-social/indigo/api/atproto" lexutil "github.com/bluesky-social/indigo/lex/util" "tangled.sh/tangled.sh/core/api/tangled" - "tangled.sh/tangled.sh/core/appview" "tangled.sh/tangled.sh/core/appview/db" "tangled.sh/tangled.sh/core/appview/pages" + "tangled.sh/tangled.sh/core/tid" ) func (s *State) Follow(w http.ResponseWriter, r *http.Request) { @@ -41,7 +41,7 @@ func (s *State) Follow(w http.ResponseWriter, r *http.Request) { switch r.Method { case http.MethodPost: createdAt := time.Now().Format(time.RFC3339) - rkey := appview.TID() + rkey := tid.TID() resp, err := client.RepoPutRecord(r.Context(), &comatproto.RepoPutRecord_Input{ Collection: tangled.GraphFollowNSID, Repo: currentUser.Did, @@ -60,9 +60,9 @@ func (s *State) Follow(w http.ResponseWriter, r *http.Request) { log.Println("created atproto record: ", resp.Uri) follow := &db.Follow{ - UserDid: currentUser.Did, + UserDid: currentUser.Did, SubjectDid: subjectIdent.DID.String(), - Rkey: rkey, + Rkey: rkey, } err = db.AddFollow(s.db, follow) diff --git a/appview/state/reaction.go b/appview/state/reaction.go index e5e633a2..e6c751ad 100644 --- a/appview/state/reaction.go +++ b/appview/state/reaction.go @@ -10,9 +10,9 @@ import ( lexutil "github.com/bluesky-social/indigo/lex/util" "tangled.sh/tangled.sh/core/api/tangled" - "tangled.sh/tangled.sh/core/appview" "tangled.sh/tangled.sh/core/appview/db" "tangled.sh/tangled.sh/core/appview/pages" + "tangled.sh/tangled.sh/core/tid" ) func (s *State) React(w http.ResponseWriter, r *http.Request) { @@ -45,7 +45,7 @@ func (s *State) React(w http.ResponseWriter, r *http.Request) { switch r.Method { case http.MethodPost: createdAt := time.Now().Format(time.RFC3339) - rkey := appview.TID() + rkey := tid.TID() resp, err := client.RepoPutRecord(r.Context(), &comatproto.RepoPutRecord_Input{ Collection: tangled.FeedReactionNSID, Repo: currentUser.Did, @@ -77,9 +77,9 @@ func (s *State) React(w http.ResponseWriter, r *http.Request) { log.Println("created atproto record: ", resp.Uri) s.pages.ThreadReactionFragment(w, pages.ThreadReactionFragmentParams{ - ThreadAt: subjectUri, - Kind: reactionKind, - Count: count, + ThreadAt: subjectUri, + Kind: reactionKind, + Count: count, IsReacted: true, }) @@ -115,9 +115,9 @@ func (s *State) React(w http.ResponseWriter, r *http.Request) { } s.pages.ThreadReactionFragment(w, pages.ThreadReactionFragmentParams{ - ThreadAt: subjectUri, - Kind: reactionKind, - Count: count, + ThreadAt: subjectUri, + Kind: reactionKind, + Count: count, IsReacted: false, }) diff --git a/appview/state/star.go b/appview/state/star.go index 561de8cb..a66403dc 100644 --- a/appview/state/star.go +++ b/appview/state/star.go @@ -9,9 +9,9 @@ import ( "github.com/bluesky-social/indigo/atproto/syntax" lexutil "github.com/bluesky-social/indigo/lex/util" "tangled.sh/tangled.sh/core/api/tangled" - "tangled.sh/tangled.sh/core/appview" "tangled.sh/tangled.sh/core/appview/db" "tangled.sh/tangled.sh/core/appview/pages" + "tangled.sh/tangled.sh/core/tid" ) func (s *State) Star(w http.ResponseWriter, r *http.Request) { @@ -38,7 +38,7 @@ func (s *State) Star(w http.ResponseWriter, r *http.Request) { switch r.Method { case http.MethodPost: createdAt := time.Now().Format(time.RFC3339) - rkey := appview.TID() + rkey := tid.TID() resp, err := client.RepoPutRecord(r.Context(), &comatproto.RepoPutRecord_Input{ Collection: tangled.FeedStarNSID, Repo: currentUser.Did, @@ -57,8 +57,8 @@ func (s *State) Star(w http.ResponseWriter, r *http.Request) { star := &db.Star{ StarredByDid: currentUser.Did, - RepoAt: subjectUri, - Rkey: rkey, + RepoAt: subjectUri, + Rkey: rkey, } err = db.AddStar(s.db, star) diff --git a/appview/state/state.go b/appview/state/state.go index 55abba04..85aae4f7 100644 --- a/appview/state/state.go +++ b/appview/state/state.go @@ -10,7 +10,6 @@ import ( "time" comatproto "github.com/bluesky-social/indigo/api/atproto" - "github.com/bluesky-social/indigo/atproto/syntax" lexutil "github.com/bluesky-social/indigo/lex/util" securejoin "github.com/cyphar/filepath-securejoin" "github.com/go-chi/chi/v5" @@ -32,6 +31,7 @@ import ( "tangled.sh/tangled.sh/core/knotclient" tlog "tangled.sh/tangled.sh/core/log" "tangled.sh/tangled.sh/core/rbac" + "tangled.sh/tangled.sh/core/tid" ) type State struct { @@ -39,7 +39,6 @@ type State struct { notifier notify.Notifier oauth *oauth.OAuth enforcer *rbac.Enforcer - tidClock syntax.TIDClock pages *pages.Pages sess *session.SessionStore idResolver *idresolver.Resolver @@ -62,8 +61,6 @@ func Make(ctx context.Context, config *config.Config) (*State, error) { return nil, fmt.Errorf("failed to create enforcer: %w", err) } - clock := syntax.NewTIDClock(0) - pgs := pages.NewPages(config) res, err := idresolver.RedisResolver(config.Redis) @@ -145,7 +142,6 @@ func Make(ctx context.Context, config *config.Config) (*State, error) { notifier, oauth, enforcer, - clock, pgs, sess, res, @@ -160,10 +156,6 @@ func Make(ctx context.Context, config *config.Config) (*State, error) { return state, nil } -func TID(c *syntax.TIDClock) string { - return c.Next().String() -} - func (s *State) Timeline(w http.ResponseWriter, r *http.Request) { user := s.oauth.GetUser(r) @@ -208,42 +200,6 @@ func (s *State) Timeline(w http.ResponseWriter, r *http.Request) { return } -// requires auth -// func (s *State) RegistrationKey(w http.ResponseWriter, r *http.Request) { -// switch r.Method { -// case http.MethodGet: -// // list open registrations under this did -// -// return -// case http.MethodPost: -// session, err := s.oauth.Stores().Get(r, oauth.SessionName) -// if err != nil || session.IsNew { -// log.Println("unauthorized attempt to generate registration key") -// http.Error(w, "Forbidden", http.StatusUnauthorized) -// return -// } -// -// did := session.Values[oauth.SessionDid].(string) -// -// // check if domain is valid url, and strip extra bits down to just host -// domain := r.FormValue("domain") -// if domain == "" { -// http.Error(w, "Invalid form", http.StatusBadRequest) -// return -// } -// -// key, err := db.GenerateRegistrationKey(s.db, domain, did) -// -// if err != nil { -// log.Println(err) -// http.Error(w, "unable to register this domain", http.StatusNotAcceptable) -// return -// } -// -// w.Write([]byte(key)) -// } -// } - func (s *State) Keys(w http.ResponseWriter, r *http.Request) { user := chi.URLParam(r, "user") user = strings.TrimPrefix(user, "@") @@ -276,306 +232,6 @@ func (s *State) Keys(w http.ResponseWriter, r *http.Request) { } } -// create a signed request and check if a node responds to that -// func (s *State) InitKnotServer(w http.ResponseWriter, r *http.Request) { -// user := s.oauth.GetUser(r) -// -// noticeId := "operation-error" -// defaultErr := "Failed to register spindle. Try again later." -// fail := func() { -// s.pages.Notice(w, noticeId, defaultErr) -// } -// -// domain := chi.URLParam(r, "domain") -// if domain == "" { -// http.Error(w, "malformed url", http.StatusBadRequest) -// return -// } -// log.Println("checking ", domain) -// -// secret, err := db.GetRegistrationKey(s.db, domain) -// if err != nil { -// log.Printf("no key found for domain %s: %s\n", domain, err) -// return -// } -// -// client, err := knotclient.NewSignedClient(domain, secret, s.config.Core.Dev) -// if err != nil { -// log.Println("failed to create client to ", domain) -// } -// -// resp, err := client.Init(user.Did) -// if err != nil { -// w.Write([]byte("no dice")) -// log.Println("domain was unreachable after 5 seconds") -// return -// } -// -// if resp.StatusCode == http.StatusConflict { -// log.Println("status conflict", resp.StatusCode) -// w.Write([]byte("already registered, sorry!")) -// return -// } -// -// if resp.StatusCode != http.StatusNoContent { -// log.Println("status nok", resp.StatusCode) -// w.Write([]byte("no dice")) -// return -// } -// -// // verify response mac -// signature := resp.Header.Get("X-Signature") -// signatureBytes, err := hex.DecodeString(signature) -// if err != nil { -// return -// } -// -// expectedMac := hmac.New(sha256.New, []byte(secret)) -// expectedMac.Write([]byte("ok")) -// -// if !hmac.Equal(expectedMac.Sum(nil), signatureBytes) { -// log.Printf("response body signature mismatch: %x\n", signatureBytes) -// return -// } -// -// tx, err := s.db.BeginTx(r.Context(), nil) -// if err != nil { -// log.Println("failed to start tx", err) -// http.Error(w, err.Error(), http.StatusInternalServerError) -// return -// } -// defer func() { -// tx.Rollback() -// err = s.enforcer.E.LoadPolicy() -// if err != nil { -// log.Println("failed to rollback policies") -// } -// }() -// -// // mark as registered -// err = db.Register(tx, domain) -// if err != nil { -// log.Println("failed to register domain", err) -// http.Error(w, err.Error(), http.StatusInternalServerError) -// return -// } -// -// // set permissions for this did as owner -// reg, err := db.RegistrationByDomain(tx, domain) -// if err != nil { -// log.Println("failed to register domain", err) -// http.Error(w, err.Error(), http.StatusInternalServerError) -// return -// } -// -// // add basic acls for this domain -// err = s.enforcer.AddKnot(domain) -// if err != nil { -// log.Println("failed to setup owner of domain", err) -// http.Error(w, err.Error(), http.StatusInternalServerError) -// return -// } -// -// // add this did as owner of this domain -// err = s.enforcer.AddKnotOwner(domain, reg.ByDid) -// if err != nil { -// log.Println("failed to setup owner of domain", err) -// http.Error(w, err.Error(), http.StatusInternalServerError) -// return -// } -// -// err = tx.Commit() -// if err != nil { -// log.Println("failed to commit changes", err) -// http.Error(w, err.Error(), http.StatusInternalServerError) -// return -// } -// -// err = s.enforcer.E.SavePolicy() -// if err != nil { -// log.Println("failed to update ACLs", err) -// http.Error(w, err.Error(), http.StatusInternalServerError) -// return -// } -// -// // add this knot to knotstream -// go s.knotstream.AddSource( -// context.Background(), -// eventconsumer.NewKnotSource(domain), -// ) -// -// w.Write([]byte("check success")) -// } - -// func (s *State) KnotServerInfo(w http.ResponseWriter, r *http.Request) { -// domain := chi.URLParam(r, "domain") -// if domain == "" { -// http.Error(w, "malformed url", http.StatusBadRequest) -// return -// } -// -// user := s.oauth.GetUser(r) -// reg, err := db.RegistrationByDomain(s.db, domain) -// if err != nil { -// w.Write([]byte("failed to pull up registration info")) -// return -// } -// -// var members []string -// if reg.Registered != nil { -// members, err = s.enforcer.GetUserByRole("server:member", domain) -// if err != nil { -// w.Write([]byte("failed to fetch member list")) -// return -// } -// } -// -// var didsToResolve []string -// for _, m := range members { -// didsToResolve = append(didsToResolve, m) -// } -// didsToResolve = append(didsToResolve, reg.ByDid) -// resolvedIds := s.idResolver.ResolveIdents(r.Context(), didsToResolve) -// didHandleMap := make(map[string]string) -// for _, identity := range resolvedIds { -// if !identity.Handle.IsInvalidHandle() { -// didHandleMap[identity.DID.String()] = fmt.Sprintf("@%s", identity.Handle.String()) -// } else { -// didHandleMap[identity.DID.String()] = identity.DID.String() -// } -// } -// -// ok, err := s.enforcer.IsKnotOwner(user.Did, domain) -// isOwner := err == nil && ok -// -// p := pages.KnotParams{ -// LoggedInUser: user, -// DidHandleMap: didHandleMap, -// Registration: reg, -// Members: members, -// IsOwner: isOwner, -// } -// -// s.pages.Knot(w, p) -// } - -// get knots registered by this user -// func (s *State) Knots(w http.ResponseWriter, r *http.Request) { -// // for now, this is just pubkeys -// user := s.oauth.GetUser(r) -// registrations, err := db.RegistrationsByDid(s.db, user.Did) -// if err != nil { -// log.Println(err) -// } -// -// s.pages.Knots(w, pages.KnotsParams{ -// LoggedInUser: user, -// Registrations: registrations, -// }) -// } - -// list members of domain, requires auth and requires owner status -// func (s *State) ListMembers(w http.ResponseWriter, r *http.Request) { -// domain := chi.URLParam(r, "domain") -// if domain == "" { -// http.Error(w, "malformed url", http.StatusBadRequest) -// return -// } -// -// // list all members for this domain -// memberDids, err := s.enforcer.GetUserByRole("server:member", domain) -// if err != nil { -// w.Write([]byte("failed to fetch member list")) -// return -// } -// -// w.Write([]byte(strings.Join(memberDids, "\n"))) -// return -// } - -// add member to domain, requires auth and requires invite access -// func (s *State) AddMember(w http.ResponseWriter, r *http.Request) { -// domain := chi.URLParam(r, "domain") -// if domain == "" { -// http.Error(w, "malformed url", http.StatusBadRequest) -// return -// } -// -// subjectIdentifier := r.FormValue("subject") -// if subjectIdentifier == "" { -// http.Error(w, "malformed form", http.StatusBadRequest) -// return -// } -// -// subjectIdentity, err := s.idResolver.ResolveIdent(r.Context(), subjectIdentifier) -// if err != nil { -// w.Write([]byte("failed to resolve member did to a handle")) -// return -// } -// log.Printf("adding %s to %s\n", subjectIdentity.Handle.String(), domain) -// -// // announce this relation into the firehose, store into owners' pds -// client, err := s.oauth.AuthorizedClient(r) -// if err != nil { -// http.Error(w, "failed to authorize client", http.StatusInternalServerError) -// return -// } -// currentUser := s.oauth.GetUser(r) -// createdAt := time.Now().Format(time.RFC3339) -// resp, err := client.RepoPutRecord(r.Context(), &comatproto.RepoPutRecord_Input{ -// Collection: tangled.KnotMemberNSID, -// Repo: currentUser.Did, -// Rkey: appview.TID(), -// Record: &lexutil.LexiconTypeDecoder{ -// Val: &tangled.KnotMember{ -// Subject: subjectIdentity.DID.String(), -// Domain: domain, -// CreatedAt: createdAt, -// }}, -// }) -// -// // invalid record -// if err != nil { -// log.Printf("failed to create record: %s", err) -// return -// } -// log.Println("created atproto record: ", resp.Uri) -// -// secret, err := db.GetRegistrationKey(s.db, domain) -// if err != nil { -// log.Printf("no key found for domain %s: %s\n", domain, err) -// return -// } -// -// ksClient, err := knotclient.NewSignedClient(domain, secret, s.config.Core.Dev) -// if err != nil { -// log.Println("failed to create client to ", domain) -// return -// } -// -// ksResp, err := ksClient.AddMember(subjectIdentity.DID.String()) -// if err != nil { -// log.Printf("failed to make request to %s: %s", domain, err) -// return -// } -// -// if ksResp.StatusCode != http.StatusNoContent { -// w.Write([]byte(fmt.Sprint("knotserver failed to add member: ", err))) -// return -// } -// -// err = s.enforcer.AddKnotMember(domain, subjectIdentity.DID.String()) -// if err != nil { -// w.Write([]byte(fmt.Sprint("failed to add member: ", err))) -// return -// } -// -// w.Write([]byte(fmt.Sprint("added member: ", subjectIdentity.Handle.String()))) -// } - -// func (s *State) RemoveMember(w http.ResponseWriter, r *http.Request) { -// } - func validateRepoName(name string) error { // check for path traversal attempts if name == "." || name == ".." || @@ -674,7 +330,7 @@ func (s *State) NewRepo(w http.ResponseWriter, r *http.Request) { return } - rkey := appview.TID() + rkey := tid.TID() repo := &db.Repo{ Did: user.Did, Name: repoName, diff --git a/appview/tid.go b/appview/tid.go deleted file mode 100644 index 7d0f0269..00000000 --- a/appview/tid.go +++ /dev/null @@ -1,11 +0,0 @@ -package appview - -import ( - "github.com/bluesky-social/indigo/atproto/syntax" -) - -var c syntax.TIDClock = syntax.NewTIDClock(0) - -func TID() string { - return c.Next().String() -} diff --git a/go.mod b/go.mod index 3b1c580c..acd308d2 100644 --- a/go.mod +++ b/go.mod @@ -7,6 +7,7 @@ toolchain go1.24.3 require ( github.com/Blank-Xu/sql-adapter v1.1.1 github.com/alecthomas/chroma/v2 v2.15.0 + github.com/avast/retry-go/v4 v4.6.1 github.com/bluekeyes/go-gitdiff v0.8.1 github.com/bluesky-social/indigo v0.0.0-20250520232546-236dd575c91e github.com/bluesky-social/jetstream v0.0.0-20241210005130-ea96859b93d1 @@ -49,7 +50,6 @@ require ( github.com/Microsoft/go-winio v0.6.2 // indirect github.com/ProtonMail/go-crypto v1.2.0 // indirect github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be // indirect - github.com/avast/retry-go/v4 v4.6.1 // indirect github.com/aymerick/douceur v0.2.0 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bmatcuk/doublestar/v4 v4.7.1 // indirect -- 2.51.2