support did lookups in urls

This commit is contained in:
Evan Jarrett
2025-12-09 22:30:57 -06:00
parent 82dd0d6a9b
commit cefe0038fc
2 changed files with 33 additions and 8 deletions
+16 -4
View File
@@ -31,21 +31,33 @@ type RepositoryPageHandler struct {
}
func (h *RepositoryPageHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
handle := chi.URLParam(r, "handle")
identifier := chi.URLParam(r, "handle")
repository := chi.URLParam(r, "repository")
// Look up user by handle
owner, err := db.GetUserByHandle(h.DB, handle)
// Resolve identifier (handle or DID) to canonical DID and current handle
did, resolvedHandle, _, err := atproto.ResolveIdentity(r.Context(), identifier)
if err != nil {
http.Error(w, "User not found", http.StatusNotFound)
return
}
// Look up user by DID
owner, err := db.GetUserByDID(h.DB, did)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
if owner == nil {
http.Error(w, "User not found", http.StatusNotFound)
return
}
// Opportunistically update cached handle if it changed
if owner.Handle != resolvedHandle {
_ = db.UpdateUserHandle(h.DB, did, resolvedHandle)
owner.Handle = resolvedHandle
}
// Fetch tags with platform information
tagsWithPlatforms, err := db.GetTagsWithPlatforms(h.DB, owner.DID, repository)
if err != nil {
+17 -4
View File
@@ -6,6 +6,7 @@ import (
"net/http"
"atcr.io/pkg/appview/db"
"atcr.io/pkg/atproto"
"github.com/go-chi/chi/v5"
)
@@ -17,20 +18,32 @@ type UserPageHandler struct {
}
func (h *UserPageHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
handle := chi.URLParam(r, "handle")
identifier := chi.URLParam(r, "handle")
// Look up user by handle
viewedUser, err := db.GetUserByHandle(h.DB, handle)
// Resolve identifier (handle or DID) to canonical DID and current handle
did, resolvedHandle, _, err := atproto.ResolveIdentity(r.Context(), identifier)
if err != nil {
http.Error(w, "User not found", http.StatusNotFound)
return
}
// Look up user by DID
viewedUser, err := db.GetUserByDID(h.DB, did)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
if viewedUser == nil {
http.Error(w, "User not found", http.StatusNotFound)
return
}
// Opportunistically update cached handle if it changed
if viewedUser.Handle != resolvedHandle {
_ = db.UpdateUserHandle(h.DB, did, resolvedHandle)
viewedUser.Handle = resolvedHandle
}
// Fetch repositories for this user
repos, err := db.GetUserRepositories(h.DB, viewedUser.DID)
if err != nil {