diff --git a/main.go b/main.go index 786fb3e..a798b74 100644 --- a/main.go +++ b/main.go @@ -46,6 +46,7 @@ func main() { templateMapping["note"] = "note.html" templateMapping["address"] = "other.html" templateMapping["relay"] = "relay.html" + templateMapping["relay_sitemap"] = "sitemap.xml" funcMap := template.FuncMap{ "basicFormatting": basicFormatting, diff --git a/render_relay.go b/render_relay.go index 9c5c7dd..f050a34 100644 --- a/render_relay.go +++ b/render_relay.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "net/http" + "strings" "time" "github.com/nbd-wtf/go-nostr" @@ -13,8 +14,12 @@ import ( func renderRelayPage(w http.ResponseWriter, r *http.Request) { code := r.URL.Path[1:] - hostname := code + typ := "relay" + if strings.HasSuffix(hostname, ".xml") { + hostname = code[:len(hostname)-4] + typ = "relay_sitemap" + } fmt.Println("hostname", hostname) @@ -30,40 +35,49 @@ func renderRelayPage(w http.ResponseWriter, r *http.Request) { } // last notes + events_num := 50 + if typ == "relay_sitemap" { + events_num = 50000 + } var lastNotes []*nostr.Event if relay, err := pool.EnsureRelay(hostname); err == nil { lastNotes, _ = relay.QuerySync(ctx, nostr.Filter{ Kinds: []int{1}, - Limit: 50, + Limit: events_num, }) } renderableLastNotes := make([]*Event, len(lastNotes)) + lastEventAt := time.Now() for i, n := range lastNotes { nevent, _ := nip19.EncodeEvent(n.ID, []string{}, n.PubKey) - date := time.Unix(int64(n.CreatedAt), 0).Format("2006-01-02 15:04:05") renderableLastNotes[i] = &Event{ Nevent: nevent, Content: n.Content, - CreatedAt: date, + CreatedAt: time.Unix(int64(n.CreatedAt), 0).Format("2006-01-02 15:04:05"), + ModifiedAt: time.Unix(int64(n.CreatedAt), 0).Format("2006-01-02T15:04:05Z07:00"), ParentNevent: getParentNevent(n), } + if i == 0 { + lastEventAt = time.Unix(int64(n.CreatedAt), 0) + } } params := map[string]any{ "clients": []ClientReference{ {Name: "Coracle", URL: "https://coracle.social/relays/" + hostname}, }, - "type": "relay", - "info": info, - "hostname": hostname, - "proxy": "https://" + hostname + "/njump/proxy?src=", - "lastNotes": renderableLastNotes, + "type": "relay", + "info": info, + "hostname": hostname, + "proxy": "https://" + hostname + "/njump/proxy?src=", + "lastNotes": renderableLastNotes, + "modifiedAt": lastEventAt.Format("2006-01-02T15:04:05Z07:00"), } // +build !nocache w.Header().Set("Cache-Control", "max-age=604800") - - if err := tmpl.ExecuteTemplate(w, templateMapping["relay"], params); err != nil { + + if err := tmpl.ExecuteTemplate(w, templateMapping[typ], params); err != nil { log.Error().Err(err).Msg("error rendering") return } diff --git a/templates/head.html b/templates/head.html index 8739e50..bc73fae 100644 --- a/templates/head.html +++ b/templates/head.html @@ -59,6 +59,8 @@ {{ if eq .type "relay" }}