mirror of
https://codeberg.org/Codeberg/pages-server.git
synced 2025-05-11 20:57:49 +00:00
Allow serving custom error page
This commit is contained in:
parent
bef866faae
commit
df06003584
2 changed files with 27 additions and 1 deletions
|
@ -84,6 +84,14 @@ This will trigger a build of the PR which will build a docker image to be used f
|
||||||
- `PAGES_DOMAIN` (default: `codeberg.page`): main domain for pages.
|
- `PAGES_DOMAIN` (default: `codeberg.page`): main domain for pages.
|
||||||
- `RAW_DOMAIN` (default: `raw.codeberg.page`): domain for raw resources (must be subdomain of `PAGES_DOMAIN`).
|
- `RAW_DOMAIN` (default: `raw.codeberg.page`): domain for raw resources (must be subdomain of `PAGES_DOMAIN`).
|
||||||
|
|
||||||
|
### Custom Error Page
|
||||||
|
|
||||||
|
A custom error page template can be served by creating `custom/error.html`.
|
||||||
|
Data available to the template includes:
|
||||||
|
- `{{ .StatusCode }}`: The HTTP status code (e.g. 404)
|
||||||
|
- `{{ .StatusText }}`: The textual name associated with the status code (e.g. Not Found)
|
||||||
|
- `{{ .Message }}`: The reason for the error
|
||||||
|
|
||||||
## Contributing to the development
|
## Contributing to the development
|
||||||
|
|
||||||
The Codeberg team is very open to your contribution.
|
The Codeberg team is very open to your contribution.
|
||||||
|
|
20
html/html.go
20
html/html.go
|
@ -4,6 +4,8 @@ import (
|
||||||
_ "embed"
|
_ "embed"
|
||||||
"net/http"
|
"net/http"
|
||||||
"text/template" // do not use html/template here, we sanitize the message before passing it to the template
|
"text/template" // do not use html/template here, we sanitize the message before passing it to the template
|
||||||
|
"os"
|
||||||
|
"path"
|
||||||
|
|
||||||
"codeberg.org/codeberg/pages/server/context"
|
"codeberg.org/codeberg/pages/server/context"
|
||||||
"github.com/microcosm-cc/bluemonday"
|
"github.com/microcosm-cc/bluemonday"
|
||||||
|
@ -14,7 +16,7 @@ import (
|
||||||
var errorPage string
|
var errorPage string
|
||||||
|
|
||||||
var (
|
var (
|
||||||
errorTemplate = template.Must(template.New("error").Parse(errorPage))
|
errorTemplate = template.Must(template.New("error").Parse(loadCustomTemplateOrDefault()))
|
||||||
sanitizer = createBlueMondayPolicy()
|
sanitizer = createBlueMondayPolicy()
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -51,3 +53,19 @@ func createBlueMondayPolicy() *bluemonday.Policy {
|
||||||
|
|
||||||
return p
|
return p
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func loadCustomTemplateOrDefault() string {
|
||||||
|
contents, err := os.ReadFile("custom/error.html")
|
||||||
|
if err != nil {
|
||||||
|
if !os.IsNotExist(err) {
|
||||||
|
wd, wdErr := os.Getwd()
|
||||||
|
if wdErr != nil {
|
||||||
|
log.Err(err).Msg("could not load custom error page 'custom/error.html'")
|
||||||
|
} else {
|
||||||
|
log.Err(err).Msgf("could not load custom error page '%v'", path.Join(wd, "custom/error.html"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return errorPage
|
||||||
|
}
|
||||||
|
return string(contents)
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue