(w http.ResponseWriter, r *http.Request, err error)
| 787 | } |
| 788 | |
| 789 | func (h *Handler) handleHTTPError(w http.ResponseWriter, r *http.Request, err error) { |
| 790 | if err == nil { |
| 791 | return |
| 792 | } |
| 793 | |
| 794 | if err, ok := err.(impart.HTTPError); ok { |
| 795 | if err.Status >= 300 && err.Status < 400 { |
| 796 | sendRedirect(w, err.Status, err.Message) |
| 797 | return |
| 798 | } else if err.Status == http.StatusUnauthorized { |
| 799 | q := "" |
| 800 | if r.URL.RawQuery != "" { |
| 801 | q = url.QueryEscape("?" + r.URL.RawQuery) |
| 802 | } |
| 803 | sendRedirect(w, http.StatusFound, "/login?to="+r.URL.Path+q) |
| 804 | return |
| 805 | } else if err.Status == http.StatusGone { |
| 806 | w.WriteHeader(err.Status) |
| 807 | p := &struct { |
| 808 | page.StaticPage |
| 809 | Content *template.HTML |
| 810 | }{ |
| 811 | StaticPage: pageForReq(h.app.App(), r), |
| 812 | } |
| 813 | if err.Message != "" { |
| 814 | co := template.HTML(err.Message) |
| 815 | p.Content = &co |
| 816 | } |
| 817 | h.errors.Gone.ExecuteTemplate(w, "base", p) |
| 818 | return |
| 819 | } else if err.Status == http.StatusNotFound { |
| 820 | w.WriteHeader(err.Status) |
| 821 | if IsActivityPubRequest(r) { |
| 822 | // This is a fediverse request; simply return the header |
| 823 | return |
| 824 | } |
| 825 | h.errors.NotFound.ExecuteTemplate(w, "base", pageForReq(h.app.App(), r)) |
| 826 | return |
| 827 | } else if err.Status == http.StatusInternalServerError { |
| 828 | w.WriteHeader(err.Status) |
| 829 | log.Info("handleHTTPErorr internal error render") |
| 830 | h.errors.InternalServerError.ExecuteTemplate(w, "base", pageForReq(h.app.App(), r)) |
| 831 | return |
| 832 | } else if err.Status == http.StatusServiceUnavailable { |
| 833 | w.WriteHeader(err.Status) |
| 834 | h.errors.UnavailableError.ExecuteTemplate(w, "base", pageForReq(h.app.App(), r)) |
| 835 | return |
| 836 | } else if err.Status == http.StatusAccepted { |
| 837 | impart.WriteSuccess(w, "", err.Status) |
| 838 | return |
| 839 | } else { |
| 840 | p := &struct { |
| 841 | page.StaticPage |
| 842 | Title string |
| 843 | Content template.HTML |
| 844 | }{ |
| 845 | pageForReq(h.app.App(), r), |
| 846 | fmt.Sprintf("Uh oh (%d)", err.Status), |
no test coverage detected