diff --git a/webmention.go b/webmention.go index 5608e51..65df00e 100644 --- a/webmention.go +++ b/webmention.go @@ -101,9 +101,8 @@ func HandleWebmention(w http.ResponseWriter, r *http.Request) { if respCode < 200 || respCode >= 300 { if respCode == 410 { // Delete mention, because source is gone - // TODO: Implement deleteion - w.Header().Add("Location", targetUrl.String()) - w.WriteHeader(http.StatusOK) + // TODO: Implement deletion + returnSuccess(targetUrl.String(), w, r) return } else { err = errors.New("source returned error") @@ -130,13 +129,7 @@ func HandleWebmention(w http.ResponseWriter, r *http.Request) { _, _ = w.Write([]byte(err.Error())) return } - w.Header().Add("Location", targetUrl.String()) - w.WriteHeader(http.StatusOK) - // Purge BunnyCDN in 10 seconds - go func() { - time.Sleep(10 * time.Second) - Purge(targetUrl.String()) - }() + returnSuccess(targetUrl.String(), w, r) return } @@ -171,4 +164,20 @@ func saveWebmention(mention *Mention) (err error) { filePath := fmt.Sprintf("data/mentions/%x/%x.json", md5.Sum([]byte(mention.Target)), md5.Sum([]byte(mention.Source))) err = UpdateFile(filePath, string(bytesRepresentation), "New webmention from "+mention.Source) return +} + +func returnSuccess(target string, w http.ResponseWriter, r *http.Request) { + if strings.Contains(r.Header.Get("Accept"), "text/html") { + // Redirect browser + w.Header().Add("Location", target) + w.WriteHeader(http.StatusSeeOther) + } else { + w.WriteHeader(http.StatusOK) + } + // Purge BunnyCDN in 10 seconds + go func() { + time.Sleep(10 * time.Second) + Purge(target) + }() + return } \ No newline at end of file