package html import ( "html/template" "net/http" "strconv" "strings" "codeberg.org/codeberg/pages/server/context" ) // ReturnErrorPage sets the response status code and writes NotFoundPage to the response body, // with "%status%" and %message% replaced with the provided statusCode and msg func ReturnErrorPage(ctx *context.Context, msg string, statusCode int) { ctx.RespWriter.Header().Set("Content-Type", "text/html; charset=utf-8") ctx.RespWriter.WriteHeader(statusCode) msg = generateResponse(msg, statusCode) _, _ = ctx.RespWriter.Write([]byte(msg)) } // TODO: use template engine func generateResponse(msg string, statusCode int) string { if msg == "" { msg = strings.ReplaceAll(NotFoundPage, "%status%", strconv.Itoa(statusCode)+" "+errorMessage(statusCode)) } else { msg = strings.ReplaceAll( strings.ReplaceAll(ErrorPage, "%message%", template.HTMLEscapeString(msg)), "%status%", http.StatusText(statusCode)) } return msg } func errorMessage(statusCode int) string { message := http.StatusText(statusCode) switch statusCode { case http.StatusMisdirectedRequest: message += " - domain not specified in .domains file" case http.StatusFailedDependency: message += " - target repo/branch doesn't exist or is private" } return message }