forked from tangled.org/core
this repo has no description

fix assoc bug

indices are unstable; switch to maps everywhere

Changed files
+43 -36
appview
db
pages
state
+10 -9
appview/db/email.go
···
return did, nil
}
-
func GetDidsForEmails(e Execer, ems []string) ([]string, error) {
+
func GetEmailToDid(e Execer, ems []string) (map[string]string, error) {
if len(ems) == 0 {
-
return []string{}, nil
+
return make(map[string]string), nil
}
// Create placeholders for the IN clause
placeholders := make([]string, len(ems))
-
args := make([]interface{}, len(ems))
+
args := make([]any, len(ems))
for i, em := range ems {
placeholders[i] = "?"
args[i] = em
}
query := `
-
select did
+
select email, did
from emails
where email in (` + strings.Join(placeholders, ",") + `)
`
···
}
defer rows.Close()
-
var dids []string
+
assoc := make(map[string]string)
+
for rows.Next() {
-
var did string
-
if err := rows.Scan(&did); err != nil {
+
var email, did string
+
if err := rows.Scan(&email, &did); err != nil {
return nil, err
}
-
dids = append(dids, did)
+
assoc[email] = did
}
if err := rows.Err(); err != nil {
return nil, err
}
-
return dids, nil
+
return assoc, nil
}
func GetVerificationCodeForEmail(e Execer, did string, email string) (string, error) {
+4 -3
appview/pages/templates/repo/commit.html
···
<div class="flex items-center">
<p class="text-sm text-gray-500">
-
{{ if index .EmailToDidOrHandle $commit.Author.Email }}
-
{{ $handle := index .EmailToDidOrHandle $commit.Author.Email }}
-
<a href="/@{{ $handle }}" class="no-underline hover:underline text-gray-500">@{{ $handle }}</a>
+
{{ $didOrHandle := index $.EmailToDidOrHandle $commit.Author.Email }}
+
+
{{ if $didOrHandle }}
+
<a href="/{{ $didOrHandle }}" class="no-underline hover:underline text-gray-500">{{ $didOrHandle }}</a>
{{ else }}
<a href="mailto:{{ $commit.Author.Email }}" class="no-underline hover:underline text-gray-500">{{ $commit.Author.Name }}</a>
{{ end }}
+3 -3
appview/pages/templates/repo/index.html
···
class="mx-2 before:content-['·'] before:select-none"
></span>
<span>
-
{{ $handle := index $.EmailToDidOrHandle .Author.Email }}
+
{{ $didOrHandle := index $.EmailToDidOrHandle .Author.Email }}
<a
-
href="{{ if $handle }}/@{{ $handle }}{{ else }}mailto:{{ .Author.Email }}{{ end }}"
+
href="{{ if $didOrHandle }}/{{ $didOrHandle }}{{ else }}mailto:{{ .Author.Email }}{{ end }}"
class="text-gray-500 no-underline hover:underline"
-
>{{ if $handle }}@{{ $handle }}{{ else }}{{ .Author.Name }}{{ end }}</a
+
>{{ if $didOrHandle }}{{ $didOrHandle }}{{ else }}{{ .Author.Name }}{{ end }}</a
>
</span>
<div
+8 -8
appview/pages/templates/repo/log.html
···
</span>
<span class="mx-2 before:content-['·'] before:select-none"></span>
<span>
-
{{ $handle := index $.EmailToDidOrHandle $commit.Author.Email }}
-
{{ if $handle }}
+
{{ $didOrHandle := index $.EmailToDidOrHandle $commit.Author.Email }}
+
{{ if $didOrHandle }}
<a
-
href="/@{{ $handle }}"
+
href="/{{ $didOrHandle }}"
class="text-gray-500 no-underline hover:underline"
-
>@{{ $handle }}</a
+
>{{ $didOrHandle }}</a
>
{{ else }}
<a
···
class="mx-2 before:content-['·'] before:select-none"
></span>
<span>
-
{{ $handle := index $.EmailToDidOrHandle .Author.Email }}
-
{{ if $handle }}
+
{{ $didOrHandle := index $.EmailToDidOrHandle .Author.Email }}
+
{{ if $didOrHandle }}
<a
-
href="/@{{ $handle }}"
+
href="/{{ $didOrHandle }}"
class="text-gray-500 no-underline hover:underline"
-
>@{{ $handle }}</a
+
>{{ $didOrHandle }}</a
>
{{ else }}
<a
+18 -13
appview/state/repo_util.go
···
}
func EmailToDidOrHandle(s *State, emails []string) map[string]string {
-
dids, err := db.GetDidsForEmails(s.db, emails)
+
emailToDid, err := db.GetEmailToDid(s.db, emails)
if err != nil {
log.Printf("error fetching dids for emails: %v", err)
return nil
}
+
log.Println(emailToDid)
+
var dids []string
+
for _, v := range emailToDid {
+
dids = append(dids, v)
+
}
+
log.Println(dids)
+
resolvedIdents := s.resolver.ResolveIdents(context.Background(), dids)
+
didHandleMap := make(map[string]string)
-
emailToDid := make(map[string]string)
-
resolvedIdents := s.resolver.ResolveIdents(context.Background(), dids)
-
for i, resolved := range resolvedIdents {
-
if resolved != nil {
-
didHandleMap[dids[i]] = resolved.Handle.String()
-
if i < len(emails) {
-
emailToDid[emails[i]] = dids[i]
-
}
+
for _, identity := range resolvedIdents {
+
if !identity.Handle.IsInvalidHandle() {
+
didHandleMap[identity.DID.String()] = fmt.Sprintf("@%s", identity.Handle.String())
+
} else {
+
didHandleMap[identity.DID.String()] = identity.DID.String()
}
}
// Create map of email to didOrHandle for commit display
emailToDidOrHandle := make(map[string]string)
for email, did := range emailToDid {
-
if handle, ok := didHandleMap[did]; ok {
-
emailToDidOrHandle[email] = handle
-
} else {
-
emailToDidOrHandle[email] = did
+
if didOrHandle, ok := didHandleMap[did]; ok {
+
emailToDidOrHandle[email] = didOrHandle
}
}
+
+
log.Println(emailToDidOrHandle)
return emailToDidOrHandle
}