forked from tangled.org/core
this repo has no description
1package state 2 3import ( 4 "context" 5 "fmt" 6 "log" 7 "net/http" 8 9 "github.com/bluesky-social/indigo/atproto/identity" 10 "github.com/bluesky-social/indigo/atproto/syntax" 11 "github.com/go-chi/chi/v5" 12 "github.com/go-git/go-git/v5/plumbing/object" 13 "tangled.sh/tangled.sh/core/appview/auth" 14 "tangled.sh/tangled.sh/core/appview/db" 15 "tangled.sh/tangled.sh/core/appview/pages" 16) 17 18func fullyResolvedRepo(r *http.Request) (*FullyResolvedRepo, error) { 19 repoName := chi.URLParam(r, "repo") 20 knot, ok := r.Context().Value("knot").(string) 21 if !ok { 22 log.Println("malformed middleware") 23 return nil, fmt.Errorf("malformed middleware") 24 } 25 id, ok := r.Context().Value("resolvedId").(identity.Identity) 26 if !ok { 27 log.Println("malformed middleware") 28 return nil, fmt.Errorf("malformed middleware") 29 } 30 31 repoAt, ok := r.Context().Value("repoAt").(string) 32 if !ok { 33 log.Println("malformed middleware") 34 return nil, fmt.Errorf("malformed middleware") 35 } 36 37 parsedRepoAt, err := syntax.ParseATURI(repoAt) 38 if err != nil { 39 log.Println("malformed repo at-uri") 40 return nil, fmt.Errorf("malformed middleware") 41 } 42 43 // pass through values from the middleware 44 description, ok := r.Context().Value("repoDescription").(string) 45 addedAt, ok := r.Context().Value("repoAddedAt").(string) 46 47 return &FullyResolvedRepo{ 48 Knot: knot, 49 OwnerId: id, 50 RepoName: repoName, 51 RepoAt: parsedRepoAt, 52 Description: description, 53 AddedAt: addedAt, 54 }, nil 55} 56 57func RolesInRepo(s *State, u *auth.User, f *FullyResolvedRepo) pages.RolesInRepo { 58 if u != nil { 59 r := s.enforcer.GetPermissionsInRepo(u.Did, f.Knot, f.OwnerSlashRepo()) 60 return pages.RolesInRepo{r} 61 } else { 62 return pages.RolesInRepo{} 63 } 64} 65 66func uniqueEmails(commits []*object.Commit) []string { 67 emails := make(map[string]struct{}) 68 for _, commit := range commits { 69 if commit.Author.Email != "" { 70 emails[commit.Author.Email] = struct{}{} 71 } 72 if commit.Committer.Email != "" { 73 emails[commit.Committer.Email] = struct{}{} 74 } 75 } 76 var uniqueEmails []string 77 for email := range emails { 78 uniqueEmails = append(uniqueEmails, email) 79 } 80 return uniqueEmails 81} 82 83func EmailToDidOrHandle(s *State, emails []string) map[string]string { 84 emailToDid, err := db.GetEmailToDid(s.db, emails, true) // only get verified emails for mapping 85 if err != nil { 86 log.Printf("error fetching dids for emails: %v", err) 87 return nil 88 } 89 90 var dids []string 91 for _, v := range emailToDid { 92 dids = append(dids, v) 93 } 94 resolvedIdents := s.resolver.ResolveIdents(context.Background(), dids) 95 96 didHandleMap := make(map[string]string) 97 for _, identity := range resolvedIdents { 98 if !identity.Handle.IsInvalidHandle() { 99 didHandleMap[identity.DID.String()] = fmt.Sprintf("@%s", identity.Handle.String()) 100 } else { 101 didHandleMap[identity.DID.String()] = identity.DID.String() 102 } 103 } 104 105 // Create map of email to didOrHandle for commit display 106 emailToDidOrHandle := make(map[string]string) 107 for email, did := range emailToDid { 108 if didOrHandle, ok := didHandleMap[did]; ok { 109 emailToDidOrHandle[email] = didOrHandle 110 } 111 } 112 113 return emailToDidOrHandle 114}