NIP-05 requires this header so browser-based Nostr clients can validate identities via fetch from any origin.
43 lines
864 B
Go
43 lines
864 B
Go
package handlers
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"github.com/noderunners/nip05api/internal/user"
|
|
)
|
|
|
|
type NostrJSON struct {
|
|
Users *user.Service
|
|
Relays []string
|
|
}
|
|
|
|
func (h *NostrJSON) Handle(w http.ResponseWriter, r *http.Request) {
|
|
w.Header().Set("Access-Control-Allow-Origin", "*")
|
|
w.Header().Set("Cache-Control", "public, max-age=60")
|
|
|
|
names, err := h.Users.Repo().ActiveByName(r.Context())
|
|
if err != nil {
|
|
WriteError(w, http.StatusInternalServerError, "InternalError", err.Error())
|
|
return
|
|
}
|
|
|
|
if q := r.URL.Query().Get("name"); q != "" {
|
|
filtered := map[string]string{}
|
|
if pk, ok := names[q]; ok {
|
|
filtered[q] = pk
|
|
}
|
|
names = filtered
|
|
}
|
|
|
|
relays := map[string][]string{}
|
|
if len(h.Relays) > 0 {
|
|
for _, pk := range names {
|
|
relays[pk] = h.Relays
|
|
}
|
|
}
|
|
WriteJSON(w, http.StatusOK, map[string]any{
|
|
"names": names,
|
|
"relays": relays,
|
|
})
|
|
}
|