mirror of
https://tangled.org/evan.jarrett.net/at-container-registry
synced 2026-09-03 08:46:57 +00:00
support did lookups in urls
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user