forked from tangled.org/core
Monorepo for Tangled

appview: replace all occurrences of TID with global tid package

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

oppi.li 4145917b cb4cc5e0

verified
Changed files
+39 -394
appview
+6 -6
appview/issues/issues.go
··· 16 16 "github.com/go-chi/chi/v5" 17 17 18 18 "tangled.sh/tangled.sh/core/api/tangled" 19 - "tangled.sh/tangled.sh/core/appview" 20 19 "tangled.sh/tangled.sh/core/appview/config" 21 20 "tangled.sh/tangled.sh/core/appview/db" 22 21 "tangled.sh/tangled.sh/core/appview/idresolver" ··· 25 24 "tangled.sh/tangled.sh/core/appview/pages" 26 25 "tangled.sh/tangled.sh/core/appview/pagination" 27 26 "tangled.sh/tangled.sh/core/appview/reporesolver" 27 + "tangled.sh/tangled.sh/core/tid" 28 28 ) 29 29 30 30 type Issues struct { ··· 120 120 DidHandleMap: didHandleMap, 121 121 122 122 OrderedReactionKinds: db.OrderedReactionKinds, 123 - Reactions: reactionCountMap, 124 - UserReacted: userReactions, 123 + Reactions: reactionCountMap, 124 + UserReacted: userReactions, 125 125 }) 126 126 127 127 } ··· 171 171 _, err = client.RepoPutRecord(r.Context(), &comatproto.RepoPutRecord_Input{ 172 172 Collection: tangled.RepoIssueStateNSID, 173 173 Repo: user.Did, 174 - Rkey: appview.TID(), 174 + Rkey: tid.TID(), 175 175 Record: &lexutil.LexiconTypeDecoder{ 176 176 Val: &tangled.RepoIssueState{ 177 177 Issue: issue.IssueAt, ··· 275 275 } 276 276 277 277 commentId := mathrand.IntN(1000000) 278 - rkey := appview.TID() 278 + rkey := tid.TID() 279 279 280 280 err := db.NewIssueComment(rp.db, &db.Comment{ 281 281 OwnerDid: user.Did, ··· 726 726 resp, err := client.RepoPutRecord(r.Context(), &comatproto.RepoPutRecord_Input{ 727 727 Collection: tangled.RepoIssueNSID, 728 728 Repo: user.Did, 729 - Rkey: appview.TID(), 729 + Rkey: tid.TID(), 730 730 Record: &lexutil.LexiconTypeDecoder{ 731 731 Val: &tangled.RepoIssue{ 732 732 Repo: atUri,
+2 -2
appview/knots/knots.go
··· 13 13 14 14 "github.com/go-chi/chi/v5" 15 15 "tangled.sh/tangled.sh/core/api/tangled" 16 - "tangled.sh/tangled.sh/core/appview" 17 16 "tangled.sh/tangled.sh/core/appview/config" 18 17 "tangled.sh/tangled.sh/core/appview/db" 19 18 "tangled.sh/tangled.sh/core/appview/idresolver" ··· 23 22 "tangled.sh/tangled.sh/core/eventconsumer" 24 23 "tangled.sh/tangled.sh/core/knotclient" 25 24 "tangled.sh/tangled.sh/core/rbac" 25 + "tangled.sh/tangled.sh/core/tid" 26 26 27 27 comatproto "github.com/bluesky-social/indigo/api/atproto" 28 28 lexutil "github.com/bluesky-social/indigo/lex/util" ··· 436 436 resp, err := client.RepoPutRecord(r.Context(), &comatproto.RepoPutRecord_Input{ 437 437 Collection: tangled.KnotMemberNSID, 438 438 Repo: currentUser.Did, 439 - Rkey: appview.TID(), 439 + Rkey: tid.TID(), 440 440 Record: &lexutil.LexiconTypeDecoder{ 441 441 Val: &tangled.KnotMember{ 442 442 Subject: subjectIdentity.DID.String(),
+4 -4
appview/pulls/pulls.go
··· 14 14 "time" 15 15 16 16 "tangled.sh/tangled.sh/core/api/tangled" 17 - "tangled.sh/tangled.sh/core/appview" 18 17 "tangled.sh/tangled.sh/core/appview/config" 19 18 "tangled.sh/tangled.sh/core/appview/db" 20 19 "tangled.sh/tangled.sh/core/appview/idresolver" ··· 24 23 "tangled.sh/tangled.sh/core/appview/reporesolver" 25 24 "tangled.sh/tangled.sh/core/knotclient" 26 25 "tangled.sh/tangled.sh/core/patchutil" 26 + "tangled.sh/tangled.sh/core/tid" 27 27 "tangled.sh/tangled.sh/core/types" 28 28 29 29 "github.com/bluekeyes/go-gitdiff/gitdiff" ··· 668 668 atResp, err := client.RepoPutRecord(r.Context(), &comatproto.RepoPutRecord_Input{ 669 669 Collection: tangled.RepoPullCommentNSID, 670 670 Repo: user.Did, 671 - Rkey: appview.TID(), 671 + Rkey: tid.TID(), 672 672 Record: &lexutil.LexiconTypeDecoder{ 673 673 Val: &tangled.RepoPullComment{ 674 674 Repo: &atUri, ··· 1038 1038 body = formatPatches[0].Body 1039 1039 } 1040 1040 1041 - rkey := appview.TID() 1041 + rkey := tid.TID() 1042 1042 initialSubmission := db.PullSubmission{ 1043 1043 Patch: patch, 1044 1044 SourceRev: sourceRev, ··· 2168 2168 2169 2169 title := fp.Title 2170 2170 body := fp.Body 2171 - rkey := appview.TID() 2171 + rkey := tid.TID() 2172 2172 2173 2173 initialSubmission := db.PullSubmission{ 2174 2174 Patch: fp.Raw,
+2 -2
appview/repo/artifact.go
··· 14 14 "github.com/go-git/go-git/v5/plumbing" 15 15 "github.com/ipfs/go-cid" 16 16 "tangled.sh/tangled.sh/core/api/tangled" 17 - "tangled.sh/tangled.sh/core/appview" 18 17 "tangled.sh/tangled.sh/core/appview/db" 19 18 "tangled.sh/tangled.sh/core/appview/pages" 20 19 "tangled.sh/tangled.sh/core/appview/reporesolver" 21 20 "tangled.sh/tangled.sh/core/knotclient" 21 + "tangled.sh/tangled.sh/core/tid" 22 22 "tangled.sh/tangled.sh/core/types" 23 23 ) 24 24 ··· 64 64 65 65 log.Println("uploaded blob", humanize.Bytes(uint64(uploadBlobResp.Blob.Size)), uploadBlobResp.Blob.Ref.String()) 66 66 67 - rkey := appview.TID() 67 + rkey := tid.TID() 68 68 createdAt := time.Now() 69 69 70 70 putRecordResp, err := client.RepoPutRecord(r.Context(), &comatproto.RepoPutRecord_Input{
+2 -2
appview/repo/repo.go
··· 16 16 "time" 17 17 18 18 "tangled.sh/tangled.sh/core/api/tangled" 19 - "tangled.sh/tangled.sh/core/appview" 20 19 "tangled.sh/tangled.sh/core/appview/commitverify" 21 20 "tangled.sh/tangled.sh/core/appview/config" 22 21 "tangled.sh/tangled.sh/core/appview/db" ··· 30 29 "tangled.sh/tangled.sh/core/knotclient" 31 30 "tangled.sh/tangled.sh/core/patchutil" 32 31 "tangled.sh/tangled.sh/core/rbac" 32 + "tangled.sh/tangled.sh/core/tid" 33 33 "tangled.sh/tangled.sh/core/types" 34 34 35 35 securejoin "github.com/cyphar/filepath-securejoin" ··· 1088 1088 forkSourceUrl := fmt.Sprintf("%s://%s/%s/%s", uri, f.Knot, f.OwnerDid(), f.RepoName) 1089 1089 sourceAt := f.RepoAt.String() 1090 1090 1091 - rkey := appview.TID() 1091 + rkey := tid.TID() 1092 1092 repo := &db.Repo{ 1093 1093 Did: user.Did, 1094 1094 Name: forkName,
+2 -2
appview/settings/settings.go
··· 12 12 13 13 "github.com/go-chi/chi/v5" 14 14 "tangled.sh/tangled.sh/core/api/tangled" 15 - "tangled.sh/tangled.sh/core/appview" 16 15 "tangled.sh/tangled.sh/core/appview/config" 17 16 "tangled.sh/tangled.sh/core/appview/db" 18 17 "tangled.sh/tangled.sh/core/appview/email" 19 18 "tangled.sh/tangled.sh/core/appview/middleware" 20 19 "tangled.sh/tangled.sh/core/appview/oauth" 21 20 "tangled.sh/tangled.sh/core/appview/pages" 21 + "tangled.sh/tangled.sh/core/tid" 22 22 23 23 comatproto "github.com/bluesky-social/indigo/api/atproto" 24 24 lexutil "github.com/bluesky-social/indigo/lex/util" ··· 366 366 return 367 367 } 368 368 369 - rkey := appview.TID() 369 + rkey := tid.TID() 370 370 371 371 tx, err := s.Db.Begin() 372 372 if err != nil {
+2 -2
appview/spindles/spindles.go
··· 10 10 11 11 "github.com/go-chi/chi/v5" 12 12 "tangled.sh/tangled.sh/core/api/tangled" 13 - "tangled.sh/tangled.sh/core/appview" 14 13 "tangled.sh/tangled.sh/core/appview/config" 15 14 "tangled.sh/tangled.sh/core/appview/db" 16 15 "tangled.sh/tangled.sh/core/appview/idresolver" ··· 19 18 "tangled.sh/tangled.sh/core/appview/pages" 20 19 verify "tangled.sh/tangled.sh/core/appview/spindleverify" 21 20 "tangled.sh/tangled.sh/core/rbac" 21 + "tangled.sh/tangled.sh/core/tid" 22 22 23 23 comatproto "github.com/bluesky-social/indigo/api/atproto" 24 24 "github.com/bluesky-social/indigo/atproto/syntax" ··· 524 524 s.Enforcer.E.LoadPolicy() 525 525 }() 526 526 527 - rkey := appview.TID() 527 + rkey := tid.TID() 528 528 529 529 // add member to db 530 530 if err = db.AddSpindleMember(tx, db.SpindleMember{
+4 -4
appview/state/follow.go
··· 8 8 comatproto "github.com/bluesky-social/indigo/api/atproto" 9 9 lexutil "github.com/bluesky-social/indigo/lex/util" 10 10 "tangled.sh/tangled.sh/core/api/tangled" 11 - "tangled.sh/tangled.sh/core/appview" 12 11 "tangled.sh/tangled.sh/core/appview/db" 13 12 "tangled.sh/tangled.sh/core/appview/pages" 13 + "tangled.sh/tangled.sh/core/tid" 14 14 ) 15 15 16 16 func (s *State) Follow(w http.ResponseWriter, r *http.Request) { ··· 41 41 switch r.Method { 42 42 case http.MethodPost: 43 43 createdAt := time.Now().Format(time.RFC3339) 44 - rkey := appview.TID() 44 + rkey := tid.TID() 45 45 resp, err := client.RepoPutRecord(r.Context(), &comatproto.RepoPutRecord_Input{ 46 46 Collection: tangled.GraphFollowNSID, 47 47 Repo: currentUser.Did, ··· 60 60 log.Println("created atproto record: ", resp.Uri) 61 61 62 62 follow := &db.Follow{ 63 - UserDid: currentUser.Did, 63 + UserDid: currentUser.Did, 64 64 SubjectDid: subjectIdent.DID.String(), 65 - Rkey: rkey, 65 + Rkey: rkey, 66 66 } 67 67 68 68 err = db.AddFollow(s.db, follow)
+8 -8
appview/state/reaction.go
··· 10 10 11 11 lexutil "github.com/bluesky-social/indigo/lex/util" 12 12 "tangled.sh/tangled.sh/core/api/tangled" 13 - "tangled.sh/tangled.sh/core/appview" 14 13 "tangled.sh/tangled.sh/core/appview/db" 15 14 "tangled.sh/tangled.sh/core/appview/pages" 15 + "tangled.sh/tangled.sh/core/tid" 16 16 ) 17 17 18 18 func (s *State) React(w http.ResponseWriter, r *http.Request) { ··· 45 45 switch r.Method { 46 46 case http.MethodPost: 47 47 createdAt := time.Now().Format(time.RFC3339) 48 - rkey := appview.TID() 48 + rkey := tid.TID() 49 49 resp, err := client.RepoPutRecord(r.Context(), &comatproto.RepoPutRecord_Input{ 50 50 Collection: tangled.FeedReactionNSID, 51 51 Repo: currentUser.Did, ··· 77 77 log.Println("created atproto record: ", resp.Uri) 78 78 79 79 s.pages.ThreadReactionFragment(w, pages.ThreadReactionFragmentParams{ 80 - ThreadAt: subjectUri, 81 - Kind: reactionKind, 82 - Count: count, 80 + ThreadAt: subjectUri, 81 + Kind: reactionKind, 82 + Count: count, 83 83 IsReacted: true, 84 84 }) 85 85 ··· 115 115 } 116 116 117 117 s.pages.ThreadReactionFragment(w, pages.ThreadReactionFragmentParams{ 118 - ThreadAt: subjectUri, 119 - Kind: reactionKind, 120 - Count: count, 118 + ThreadAt: subjectUri, 119 + Kind: reactionKind, 120 + Count: count, 121 121 IsReacted: false, 122 122 }) 123 123
+4 -4
appview/state/star.go
··· 9 9 "github.com/bluesky-social/indigo/atproto/syntax" 10 10 lexutil "github.com/bluesky-social/indigo/lex/util" 11 11 "tangled.sh/tangled.sh/core/api/tangled" 12 - "tangled.sh/tangled.sh/core/appview" 13 12 "tangled.sh/tangled.sh/core/appview/db" 14 13 "tangled.sh/tangled.sh/core/appview/pages" 14 + "tangled.sh/tangled.sh/core/tid" 15 15 ) 16 16 17 17 func (s *State) Star(w http.ResponseWriter, r *http.Request) { ··· 38 38 switch r.Method { 39 39 case http.MethodPost: 40 40 createdAt := time.Now().Format(time.RFC3339) 41 - rkey := appview.TID() 41 + rkey := tid.TID() 42 42 resp, err := client.RepoPutRecord(r.Context(), &comatproto.RepoPutRecord_Input{ 43 43 Collection: tangled.FeedStarNSID, 44 44 Repo: currentUser.Did, ··· 57 57 58 58 star := &db.Star{ 59 59 StarredByDid: currentUser.Did, 60 - RepoAt: subjectUri, 61 - Rkey: rkey, 60 + RepoAt: subjectUri, 61 + Rkey: rkey, 62 62 } 63 63 64 64 err = db.AddStar(s.db, star)
+2 -346
appview/state/state.go
··· 10 10 "time" 11 11 12 12 comatproto "github.com/bluesky-social/indigo/api/atproto" 13 - "github.com/bluesky-social/indigo/atproto/syntax" 14 13 lexutil "github.com/bluesky-social/indigo/lex/util" 15 14 securejoin "github.com/cyphar/filepath-securejoin" 16 15 "github.com/go-chi/chi/v5" ··· 32 31 "tangled.sh/tangled.sh/core/knotclient" 33 32 tlog "tangled.sh/tangled.sh/core/log" 34 33 "tangled.sh/tangled.sh/core/rbac" 34 + "tangled.sh/tangled.sh/core/tid" 35 35 ) 36 36 37 37 type State struct { ··· 39 39 notifier notify.Notifier 40 40 oauth *oauth.OAuth 41 41 enforcer *rbac.Enforcer 42 - tidClock syntax.TIDClock 43 42 pages *pages.Pages 44 43 sess *session.SessionStore 45 44 idResolver *idresolver.Resolver ··· 61 60 if err != nil { 62 61 return nil, fmt.Errorf("failed to create enforcer: %w", err) 63 62 } 64 - 65 - clock := syntax.NewTIDClock(0) 66 63 67 64 pgs := pages.NewPages(config) 68 65 ··· 145 142 notifier, 146 143 oauth, 147 144 enforcer, 148 - clock, 149 145 pgs, 150 146 sess, 151 147 res, ··· 160 156 return state, nil 161 157 } 162 158 163 - func TID(c *syntax.TIDClock) string { 164 - return c.Next().String() 165 - } 166 - 167 159 func (s *State) Timeline(w http.ResponseWriter, r *http.Request) { 168 160 user := s.oauth.GetUser(r) 169 161 ··· 208 200 return 209 201 } 210 202 211 - // requires auth 212 - // func (s *State) RegistrationKey(w http.ResponseWriter, r *http.Request) { 213 - // switch r.Method { 214 - // case http.MethodGet: 215 - // // list open registrations under this did 216 - // 217 - // return 218 - // case http.MethodPost: 219 - // session, err := s.oauth.Stores().Get(r, oauth.SessionName) 220 - // if err != nil || session.IsNew { 221 - // log.Println("unauthorized attempt to generate registration key") 222 - // http.Error(w, "Forbidden", http.StatusUnauthorized) 223 - // return 224 - // } 225 - // 226 - // did := session.Values[oauth.SessionDid].(string) 227 - // 228 - // // check if domain is valid url, and strip extra bits down to just host 229 - // domain := r.FormValue("domain") 230 - // if domain == "" { 231 - // http.Error(w, "Invalid form", http.StatusBadRequest) 232 - // return 233 - // } 234 - // 235 - // key, err := db.GenerateRegistrationKey(s.db, domain, did) 236 - // 237 - // if err != nil { 238 - // log.Println(err) 239 - // http.Error(w, "unable to register this domain", http.StatusNotAcceptable) 240 - // return 241 - // } 242 - // 243 - // w.Write([]byte(key)) 244 - // } 245 - // } 246 - 247 203 func (s *State) Keys(w http.ResponseWriter, r *http.Request) { 248 204 user := chi.URLParam(r, "user") 249 205 user = strings.TrimPrefix(user, "@") ··· 276 232 } 277 233 } 278 234 279 - // create a signed request and check if a node responds to that 280 - // func (s *State) InitKnotServer(w http.ResponseWriter, r *http.Request) { 281 - // user := s.oauth.GetUser(r) 282 - // 283 - // noticeId := "operation-error" 284 - // defaultErr := "Failed to register spindle. Try again later." 285 - // fail := func() { 286 - // s.pages.Notice(w, noticeId, defaultErr) 287 - // } 288 - // 289 - // domain := chi.URLParam(r, "domain") 290 - // if domain == "" { 291 - // http.Error(w, "malformed url", http.StatusBadRequest) 292 - // return 293 - // } 294 - // log.Println("checking ", domain) 295 - // 296 - // secret, err := db.GetRegistrationKey(s.db, domain) 297 - // if err != nil { 298 - // log.Printf("no key found for domain %s: %s\n", domain, err) 299 - // return 300 - // } 301 - // 302 - // client, err := knotclient.NewSignedClient(domain, secret, s.config.Core.Dev) 303 - // if err != nil { 304 - // log.Println("failed to create client to ", domain) 305 - // } 306 - // 307 - // resp, err := client.Init(user.Did) 308 - // if err != nil { 309 - // w.Write([]byte("no dice")) 310 - // log.Println("domain was unreachable after 5 seconds") 311 - // return 312 - // } 313 - // 314 - // if resp.StatusCode == http.StatusConflict { 315 - // log.Println("status conflict", resp.StatusCode) 316 - // w.Write([]byte("already registered, sorry!")) 317 - // return 318 - // } 319 - // 320 - // if resp.StatusCode != http.StatusNoContent { 321 - // log.Println("status nok", resp.StatusCode) 322 - // w.Write([]byte("no dice")) 323 - // return 324 - // } 325 - // 326 - // // verify response mac 327 - // signature := resp.Header.Get("X-Signature") 328 - // signatureBytes, err := hex.DecodeString(signature) 329 - // if err != nil { 330 - // return 331 - // } 332 - // 333 - // expectedMac := hmac.New(sha256.New, []byte(secret)) 334 - // expectedMac.Write([]byte("ok")) 335 - // 336 - // if !hmac.Equal(expectedMac.Sum(nil), signatureBytes) { 337 - // log.Printf("response body signature mismatch: %x\n", signatureBytes) 338 - // return 339 - // } 340 - // 341 - // tx, err := s.db.BeginTx(r.Context(), nil) 342 - // if err != nil { 343 - // log.Println("failed to start tx", err) 344 - // http.Error(w, err.Error(), http.StatusInternalServerError) 345 - // return 346 - // } 347 - // defer func() { 348 - // tx.Rollback() 349 - // err = s.enforcer.E.LoadPolicy() 350 - // if err != nil { 351 - // log.Println("failed to rollback policies") 352 - // } 353 - // }() 354 - // 355 - // // mark as registered 356 - // err = db.Register(tx, domain) 357 - // if err != nil { 358 - // log.Println("failed to register domain", err) 359 - // http.Error(w, err.Error(), http.StatusInternalServerError) 360 - // return 361 - // } 362 - // 363 - // // set permissions for this did as owner 364 - // reg, err := db.RegistrationByDomain(tx, domain) 365 - // if err != nil { 366 - // log.Println("failed to register domain", err) 367 - // http.Error(w, err.Error(), http.StatusInternalServerError) 368 - // return 369 - // } 370 - // 371 - // // add basic acls for this domain 372 - // err = s.enforcer.AddKnot(domain) 373 - // if err != nil { 374 - // log.Println("failed to setup owner of domain", err) 375 - // http.Error(w, err.Error(), http.StatusInternalServerError) 376 - // return 377 - // } 378 - // 379 - // // add this did as owner of this domain 380 - // err = s.enforcer.AddKnotOwner(domain, reg.ByDid) 381 - // if err != nil { 382 - // log.Println("failed to setup owner of domain", err) 383 - // http.Error(w, err.Error(), http.StatusInternalServerError) 384 - // return 385 - // } 386 - // 387 - // err = tx.Commit() 388 - // if err != nil { 389 - // log.Println("failed to commit changes", err) 390 - // http.Error(w, err.Error(), http.StatusInternalServerError) 391 - // return 392 - // } 393 - // 394 - // err = s.enforcer.E.SavePolicy() 395 - // if err != nil { 396 - // log.Println("failed to update ACLs", err) 397 - // http.Error(w, err.Error(), http.StatusInternalServerError) 398 - // return 399 - // } 400 - // 401 - // // add this knot to knotstream 402 - // go s.knotstream.AddSource( 403 - // context.Background(), 404 - // eventconsumer.NewKnotSource(domain), 405 - // ) 406 - // 407 - // w.Write([]byte("check success")) 408 - // } 409 - 410 - // func (s *State) KnotServerInfo(w http.ResponseWriter, r *http.Request) { 411 - // domain := chi.URLParam(r, "domain") 412 - // if domain == "" { 413 - // http.Error(w, "malformed url", http.StatusBadRequest) 414 - // return 415 - // } 416 - // 417 - // user := s.oauth.GetUser(r) 418 - // reg, err := db.RegistrationByDomain(s.db, domain) 419 - // if err != nil { 420 - // w.Write([]byte("failed to pull up registration info")) 421 - // return 422 - // } 423 - // 424 - // var members []string 425 - // if reg.Registered != nil { 426 - // members, err = s.enforcer.GetUserByRole("server:member", domain) 427 - // if err != nil { 428 - // w.Write([]byte("failed to fetch member list")) 429 - // return 430 - // } 431 - // } 432 - // 433 - // var didsToResolve []string 434 - // for _, m := range members { 435 - // didsToResolve = append(didsToResolve, m) 436 - // } 437 - // didsToResolve = append(didsToResolve, reg.ByDid) 438 - // resolvedIds := s.idResolver.ResolveIdents(r.Context(), didsToResolve) 439 - // didHandleMap := make(map[string]string) 440 - // for _, identity := range resolvedIds { 441 - // if !identity.Handle.IsInvalidHandle() { 442 - // didHandleMap[identity.DID.String()] = fmt.Sprintf("@%s", identity.Handle.String()) 443 - // } else { 444 - // didHandleMap[identity.DID.String()] = identity.DID.String() 445 - // } 446 - // } 447 - // 448 - // ok, err := s.enforcer.IsKnotOwner(user.Did, domain) 449 - // isOwner := err == nil && ok 450 - // 451 - // p := pages.KnotParams{ 452 - // LoggedInUser: user, 453 - // DidHandleMap: didHandleMap, 454 - // Registration: reg, 455 - // Members: members, 456 - // IsOwner: isOwner, 457 - // } 458 - // 459 - // s.pages.Knot(w, p) 460 - // } 461 - 462 - // get knots registered by this user 463 - // func (s *State) Knots(w http.ResponseWriter, r *http.Request) { 464 - // // for now, this is just pubkeys 465 - // user := s.oauth.GetUser(r) 466 - // registrations, err := db.RegistrationsByDid(s.db, user.Did) 467 - // if err != nil { 468 - // log.Println(err) 469 - // } 470 - // 471 - // s.pages.Knots(w, pages.KnotsParams{ 472 - // LoggedInUser: user, 473 - // Registrations: registrations, 474 - // }) 475 - // } 476 - 477 - // list members of domain, requires auth and requires owner status 478 - // func (s *State) ListMembers(w http.ResponseWriter, r *http.Request) { 479 - // domain := chi.URLParam(r, "domain") 480 - // if domain == "" { 481 - // http.Error(w, "malformed url", http.StatusBadRequest) 482 - // return 483 - // } 484 - // 485 - // // list all members for this domain 486 - // memberDids, err := s.enforcer.GetUserByRole("server:member", domain) 487 - // if err != nil { 488 - // w.Write([]byte("failed to fetch member list")) 489 - // return 490 - // } 491 - // 492 - // w.Write([]byte(strings.Join(memberDids, "\n"))) 493 - // return 494 - // } 495 - 496 - // add member to domain, requires auth and requires invite access 497 - // func (s *State) AddMember(w http.ResponseWriter, r *http.Request) { 498 - // domain := chi.URLParam(r, "domain") 499 - // if domain == "" { 500 - // http.Error(w, "malformed url", http.StatusBadRequest) 501 - // return 502 - // } 503 - // 504 - // subjectIdentifier := r.FormValue("subject") 505 - // if subjectIdentifier == "" { 506 - // http.Error(w, "malformed form", http.StatusBadRequest) 507 - // return 508 - // } 509 - // 510 - // subjectIdentity, err := s.idResolver.ResolveIdent(r.Context(), subjectIdentifier) 511 - // if err != nil { 512 - // w.Write([]byte("failed to resolve member did to a handle")) 513 - // return 514 - // } 515 - // log.Printf("adding %s to %s\n", subjectIdentity.Handle.String(), domain) 516 - // 517 - // // announce this relation into the firehose, store into owners' pds 518 - // client, err := s.oauth.AuthorizedClient(r) 519 - // if err != nil { 520 - // http.Error(w, "failed to authorize client", http.StatusInternalServerError) 521 - // return 522 - // } 523 - // currentUser := s.oauth.GetUser(r) 524 - // createdAt := time.Now().Format(time.RFC3339) 525 - // resp, err := client.RepoPutRecord(r.Context(), &comatproto.RepoPutRecord_Input{ 526 - // Collection: tangled.KnotMemberNSID, 527 - // Repo: currentUser.Did, 528 - // Rkey: appview.TID(), 529 - // Record: &lexutil.LexiconTypeDecoder{ 530 - // Val: &tangled.KnotMember{ 531 - // Subject: subjectIdentity.DID.String(), 532 - // Domain: domain, 533 - // CreatedAt: createdAt, 534 - // }}, 535 - // }) 536 - // 537 - // // invalid record 538 - // if err != nil { 539 - // log.Printf("failed to create record: %s", err) 540 - // return 541 - // } 542 - // log.Println("created atproto record: ", resp.Uri) 543 - // 544 - // secret, err := db.GetRegistrationKey(s.db, domain) 545 - // if err != nil { 546 - // log.Printf("no key found for domain %s: %s\n", domain, err) 547 - // return 548 - // } 549 - // 550 - // ksClient, err := knotclient.NewSignedClient(domain, secret, s.config.Core.Dev) 551 - // if err != nil { 552 - // log.Println("failed to create client to ", domain) 553 - // return 554 - // } 555 - // 556 - // ksResp, err := ksClient.AddMember(subjectIdentity.DID.String()) 557 - // if err != nil { 558 - // log.Printf("failed to make request to %s: %s", domain, err) 559 - // return 560 - // } 561 - // 562 - // if ksResp.StatusCode != http.StatusNoContent { 563 - // w.Write([]byte(fmt.Sprint("knotserver failed to add member: ", err))) 564 - // return 565 - // } 566 - // 567 - // err = s.enforcer.AddKnotMember(domain, subjectIdentity.DID.String()) 568 - // if err != nil { 569 - // w.Write([]byte(fmt.Sprint("failed to add member: ", err))) 570 - // return 571 - // } 572 - // 573 - // w.Write([]byte(fmt.Sprint("added member: ", subjectIdentity.Handle.String()))) 574 - // } 575 - 576 - // func (s *State) RemoveMember(w http.ResponseWriter, r *http.Request) { 577 - // } 578 - 579 235 func validateRepoName(name string) error { 580 236 // check for path traversal attempts 581 237 if name == "." || name == ".." || ··· 674 330 return 675 331 } 676 332 677 - rkey := appview.TID() 333 + rkey := tid.TID() 678 334 repo := &db.Repo{ 679 335 Did: user.Did, 680 336 Name: repoName,
-11
appview/tid.go
··· 1 - package appview 2 - 3 - import ( 4 - "github.com/bluesky-social/indigo/atproto/syntax" 5 - ) 6 - 7 - var c syntax.TIDClock = syntax.NewTIDClock(0) 8 - 9 - func TID() string { 10 - return c.Next().String() 11 - }
+1 -1
go.mod
··· 7 7 require ( 8 8 github.com/Blank-Xu/sql-adapter v1.1.1 9 9 github.com/alecthomas/chroma/v2 v2.15.0 10 + github.com/avast/retry-go/v4 v4.6.1 10 11 github.com/bluekeyes/go-gitdiff v0.8.1 11 12 github.com/bluesky-social/indigo v0.0.0-20250520232546-236dd575c91e 12 13 github.com/bluesky-social/jetstream v0.0.0-20241210005130-ea96859b93d1 ··· 49 50 github.com/Microsoft/go-winio v0.6.2 // indirect 50 51 github.com/ProtonMail/go-crypto v1.2.0 // indirect 51 52 github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be // indirect 52 - github.com/avast/retry-go/v4 v4.6.1 // indirect 53 53 github.com/aymerick/douceur v0.2.0 // indirect 54 54 github.com/beorn7/perks v1.0.1 // indirect 55 55 github.com/bmatcuk/doublestar/v4 v4.7.1 // indirect