implement custom 404 pages (#81)

solves #56.

- The expected filename is `404.html`, like GitHub Pages
- Each repo/branch can have one `404.html` file at it's root
- If a repo does not have a `pages` branch, the 404.html file from the `pages` repository is used
- You get status code 404 (unless you request /404.html which returns 200)
- The error page is cached

---
close #56

Reviewed-on: https://codeberg.org/Codeberg/pages-server/pulls/81
Reviewed-by: 6543 <6543@noreply.codeberg.org>
Co-authored-by: crystal <crystal@noreply.codeberg.org>
Co-committed-by: crystal <crystal@noreply.codeberg.org>
This commit is contained in:
crystal 2022-06-12 03:50:00 +02:00 committed by 6543
parent 35b35c5d67
commit 38fb28f84f
2 changed files with 37 additions and 2 deletions

View file

@ -49,6 +49,19 @@ func TestGetContent(t *testing.T) {
assert.True(t, getSize(resp.Body) > 1000)
}
func TestGetNotFound(t *testing.T) {
log.Printf("== TestGetNotFound ==\n")
// test custom not found pages
resp, err := getTestHTTPSClient().Get("https://crystal.localhost.mock.directory:4430/pages-404-demo/blah")
assert.NoError(t, err)
if !assert.EqualValues(t, http.StatusNotFound, resp.StatusCode) {
t.FailNow()
}
assert.EqualValues(t, "text/html; charset=utf-8", resp.Header["Content-Type"][0])
assert.EqualValues(t, "37", resp.Header["Content-Length"][0])
assert.EqualValues(t, 37, getSize(resp.Body))
}
func getTestHTTPSClient() *http.Client {
cookieJar, _ := cookiejar.New(nil)
return &http.Client{