provide json directly at alt link

This commit is contained in:
Ted Unangst 2023-05-01 17:32:12 -04:00
parent 20f2cb81f1
commit af4c98c07d
1 changed files with 8 additions and 4 deletions

10
web.go
View File

@ -1019,6 +1019,7 @@ func trackback(xid string, r *http.Request) {
func showonehonk(w http.ResponseWriter, r *http.Request) { func showonehonk(w http.ResponseWriter, r *http.Request) {
name := mux.Vars(r)["name"] name := mux.Vars(r)["name"]
xid := mux.Vars(r)["xid"]
user, err := butwhatabout(name) user, err := butwhatabout(name)
if err != nil { if err != nil {
http.NotFound(w, r) http.NotFound(w, r)
@ -1028,12 +1029,14 @@ func showonehonk(w http.ResponseWriter, r *http.Request) {
http.NotFound(w, r) http.NotFound(w, r)
return return
} }
xid := fmt.Sprintf("https://%s%s", serverName, r.URL.Path) xid = fmt.Sprintf("%s/%s/%s", user.URL, honkSep, xid)
if friendorfoe(r.Header.Get("Accept")) { if fof := friendorfoe(r.Header.Get("Accept")); fof || strings.HasSuffix(r.URL.Path, ".json") {
j, ok := gimmejonk(xid) j, ok := gimmejonk(xid)
if ok { if ok {
if fof {
trackback(xid, r) trackback(xid, r)
}
w.Header().Set("Content-Type", theonetruename) w.Header().Set("Content-Type", theonetruename)
w.Write(j) w.Write(j)
} else { } else {
@ -1079,7 +1082,7 @@ func showonehonk(w http.ResponseWriter, r *http.Request) {
templinfo := getInfo(r) templinfo := getInfo(r)
templinfo["ServerMessage"] = "one honk maybe more" templinfo["ServerMessage"] = "one honk maybe more"
templinfo["HonkCSRF"] = login.GetCSRF("honkhonk", r) templinfo["HonkCSRF"] = login.GetCSRF("honkhonk", r)
templinfo["APAltLink"] = templates.Sprintf("<link href='%s' rel='alternate' type='application/activity+json'>", xid) templinfo["APAltLink"] = templates.Sprintf("<link href='%s.json' rel='alternate' type='application/activity+json'>", xid)
honkpage(w, u, honks, templinfo) honkpage(w, u, honks, templinfo)
} }
@ -2575,6 +2578,7 @@ func serve() {
getters.HandleFunc("/rss", showrss) getters.HandleFunc("/rss", showrss)
getters.HandleFunc("/"+userSep+"/{name:[\\pL[:digit:]]+}", showuser) getters.HandleFunc("/"+userSep+"/{name:[\\pL[:digit:]]+}", showuser)
getters.HandleFunc("/"+userSep+"/{name:[\\pL[:digit:]]+}/"+honkSep+"/{xid:[\\pL[:digit:]]+}", showonehonk) getters.HandleFunc("/"+userSep+"/{name:[\\pL[:digit:]]+}/"+honkSep+"/{xid:[\\pL[:digit:]]+}", showonehonk)
getters.HandleFunc("/"+userSep+"/{name:[\\pL[:digit:]]+}/"+honkSep+"/{xid:[\\pL[:digit:]]+}.json", showonehonk)
getters.HandleFunc("/"+userSep+"/{name:[\\pL[:digit:]]+}/rss", showrss) getters.HandleFunc("/"+userSep+"/{name:[\\pL[:digit:]]+}/rss", showrss)
posters.HandleFunc("/"+userSep+"/{name:[\\pL[:digit:]]+}/inbox", inbox) posters.HandleFunc("/"+userSep+"/{name:[\\pL[:digit:]]+}/inbox", inbox)
getters.HandleFunc("/"+userSep+"/{name:[\\pL[:digit:]]+}/outbox", outbox) getters.HandleFunc("/"+userSep+"/{name:[\\pL[:digit:]]+}/outbox", outbox)