package main import ( "math/rand" "net/http" "strconv" "strings" "time" "fiatjaf.com/leafdb" "github.com/nbd-wtf/go-nostr/nip19" ) func renderArchive(w http.ResponseWriter, r *http.Request) { lastIndex := strings.LastIndex(r.URL.Path, "/") page := 1 if lastIndex != -1 { pageString := r.URL.Path[lastIndex+1:] pageInt, err := strconv.Atoi(pageString) if err != nil { page = 1 } else { page = pageInt } } var data []string pathPrefix := "" if strings.HasPrefix(r.URL.Path[1:], "npubs-archive") { pathPrefix = "" data = make([]string, 0, 5000) params := leafdb.AnyQuery("pubkey-archive") params.Skip = (page - 1) * 5000 params.Limit = 5000 for val := range internal.View(params) { pka := val.(*PubKeyArchive) npub, _ := nip19.EncodePublicKey(pka.Pubkey) data = append(data, npub) } } else if strings.HasPrefix(r.URL.Path[1:], "relays-archive") { data = []string{ "pyramid.fiatjaf.com", "nostr.wine", "140.f7z.io", } } // Generate a random duration between 2 and 6 hours minHours := 2 maxHours := 6 randomHours := rand.Intn(maxHours-minHours+1) + minHours randomDuration := time.Duration(randomHours) * time.Hour currentTime := time.Now() modifiedAt := currentTime.Add(-randomDuration).Format("2006-01-02T15:04:05Z07:00") if len(data) != 0 { w.Header().Set("Cache-Control", "max-age=3600") } else { w.Header().Set("Cache-Control", "max-age=60") } w.Header().Add("content-type", "text/xml") w.Write([]byte(XML_HEADER)) SitemapTemplate.Render(w, &SitemapPage{ Host: s.Domain, ModifiedAt: modifiedAt, PathPrefix: pathPrefix, Data: data, }) }