forked from tangled.org/core
Monorepo for Tangled

fix assoc bug

indices are unstable; switch to maps everywhere

Changed files
+43 -36
appview
db
pages
state
+10 -9
appview/db/email.go
··· 67 67 return did, nil 68 68 } 69 69 70 - func GetDidsForEmails(e Execer, ems []string) ([]string, error) { 70 + func GetEmailToDid(e Execer, ems []string) (map[string]string, error) { 71 71 if len(ems) == 0 { 72 - return []string{}, nil 72 + return make(map[string]string), nil 73 73 } 74 74 75 75 // Create placeholders for the IN clause 76 76 placeholders := make([]string, len(ems)) 77 - args := make([]interface{}, len(ems)) 77 + args := make([]any, len(ems)) 78 78 for i, em := range ems { 79 79 placeholders[i] = "?" 80 80 args[i] = em 81 81 } 82 82 83 83 query := ` 84 - select did 84 + select email, did 85 85 from emails 86 86 where email in (` + strings.Join(placeholders, ",") + `) 87 87 ` ··· 92 92 } 93 93 defer rows.Close() 94 94 95 - var dids []string 95 + assoc := make(map[string]string) 96 + 96 97 for rows.Next() { 97 - var did string 98 - if err := rows.Scan(&did); err != nil { 98 + var email, did string 99 + if err := rows.Scan(&email, &did); err != nil { 99 100 return nil, err 100 101 } 101 - dids = append(dids, did) 102 + assoc[email] = did 102 103 } 103 104 104 105 if err := rows.Err(); err != nil { 105 106 return nil, err 106 107 } 107 108 108 - return dids, nil 109 + return assoc, nil 109 110 } 110 111 111 112 func GetVerificationCodeForEmail(e Execer, did string, email string) (string, error) {
+4 -3
appview/pages/templates/repo/commit.html
··· 20 20 21 21 <div class="flex items-center"> 22 22 <p class="text-sm text-gray-500"> 23 - {{ if index .EmailToDidOrHandle $commit.Author.Email }} 24 - {{ $handle := index .EmailToDidOrHandle $commit.Author.Email }} 25 - <a href="/@{{ $handle }}" class="no-underline hover:underline text-gray-500">@{{ $handle }}</a> 23 + {{ $didOrHandle := index $.EmailToDidOrHandle $commit.Author.Email }} 24 + 25 + {{ if $didOrHandle }} 26 + <a href="/{{ $didOrHandle }}" class="no-underline hover:underline text-gray-500">{{ $didOrHandle }}</a> 26 27 {{ else }} 27 28 <a href="mailto:{{ $commit.Author.Email }}" class="no-underline hover:underline text-gray-500">{{ $commit.Author.Name }}</a> 28 29 {{ end }}
+3 -3
appview/pages/templates/repo/index.html
··· 164 164 class="mx-2 before:content-['·'] before:select-none" 165 165 ></span> 166 166 <span> 167 - {{ $handle := index $.EmailToDidOrHandle .Author.Email }} 167 + {{ $didOrHandle := index $.EmailToDidOrHandle .Author.Email }} 168 168 <a 169 - href="{{ if $handle }}/@{{ $handle }}{{ else }}mailto:{{ .Author.Email }}{{ end }}" 169 + href="{{ if $didOrHandle }}/{{ $didOrHandle }}{{ else }}mailto:{{ .Author.Email }}{{ end }}" 170 170 class="text-gray-500 no-underline hover:underline" 171 - >{{ if $handle }}@{{ $handle }}{{ else }}{{ .Author.Name }}{{ end }}</a 171 + >{{ if $didOrHandle }}{{ $didOrHandle }}{{ else }}{{ .Author.Name }}{{ end }}</a 172 172 > 173 173 </span> 174 174 <div
+8 -8
appview/pages/templates/repo/log.html
··· 25 25 </span> 26 26 <span class="mx-2 before:content-['·'] before:select-none"></span> 27 27 <span> 28 - {{ $handle := index $.EmailToDidOrHandle $commit.Author.Email }} 29 - {{ if $handle }} 28 + {{ $didOrHandle := index $.EmailToDidOrHandle $commit.Author.Email }} 29 + {{ if $didOrHandle }} 30 30 <a 31 - href="/@{{ $handle }}" 31 + href="/{{ $didOrHandle }}" 32 32 class="text-gray-500 no-underline hover:underline" 33 - >@{{ $handle }}</a 33 + >{{ $didOrHandle }}</a 34 34 > 35 35 {{ else }} 36 36 <a ··· 105 105 class="mx-2 before:content-['·'] before:select-none" 106 106 ></span> 107 107 <span> 108 - {{ $handle := index $.EmailToDidOrHandle .Author.Email }} 109 - {{ if $handle }} 108 + {{ $didOrHandle := index $.EmailToDidOrHandle .Author.Email }} 109 + {{ if $didOrHandle }} 110 110 <a 111 - href="/@{{ $handle }}" 111 + href="/{{ $didOrHandle }}" 112 112 class="text-gray-500 no-underline hover:underline" 113 - >@{{ $handle }}</a 113 + >{{ $didOrHandle }}</a 114 114 > 115 115 {{ else }} 116 116 <a
+18 -13
appview/state/repo_util.go
··· 81 81 } 82 82 83 83 func EmailToDidOrHandle(s *State, emails []string) map[string]string { 84 - dids, err := db.GetDidsForEmails(s.db, emails) 84 + emailToDid, err := db.GetEmailToDid(s.db, emails) 85 85 if err != nil { 86 86 log.Printf("error fetching dids for emails: %v", err) 87 87 return nil 88 88 } 89 89 90 + log.Println(emailToDid) 91 + var dids []string 92 + for _, v := range emailToDid { 93 + dids = append(dids, v) 94 + } 95 + log.Println(dids) 96 + resolvedIdents := s.resolver.ResolveIdents(context.Background(), dids) 97 + 90 98 didHandleMap := make(map[string]string) 91 - emailToDid := make(map[string]string) 92 - resolvedIdents := s.resolver.ResolveIdents(context.Background(), dids) 93 - for i, resolved := range resolvedIdents { 94 - if resolved != nil { 95 - didHandleMap[dids[i]] = resolved.Handle.String() 96 - if i < len(emails) { 97 - emailToDid[emails[i]] = dids[i] 98 - } 99 + for _, identity := range resolvedIdents { 100 + if !identity.Handle.IsInvalidHandle() { 101 + didHandleMap[identity.DID.String()] = fmt.Sprintf("@%s", identity.Handle.String()) 102 + } else { 103 + didHandleMap[identity.DID.String()] = identity.DID.String() 99 104 } 100 105 } 101 106 102 107 // Create map of email to didOrHandle for commit display 103 108 emailToDidOrHandle := make(map[string]string) 104 109 for email, did := range emailToDid { 105 - if handle, ok := didHandleMap[did]; ok { 106 - emailToDidOrHandle[email] = handle 107 - } else { 108 - emailToDidOrHandle[email] = did 110 + if didOrHandle, ok := didHandleMap[did]; ok { 111 + emailToDidOrHandle[email] = didOrHandle 109 112 } 110 113 } 114 + 115 + log.Println(emailToDidOrHandle) 111 116 112 117 return emailToDidOrHandle 113 118 }