package handlers import ( "net/http" "git.haelnorr.com/h/golib/hws" "git.haelnorr.com/h/oslstats/internal/view/page" ) func ErrorPage(hwsError hws.HWSError) (hws.ErrorPage, error) { // Determine if this status code should show technical details showDetails := shouldShowDetails(hwsError.StatusCode) // Get the user-friendly message message := hwsError.Message if message == "" { // Fallback to default messages if no custom message provided message = getDefaultMessage(hwsError.StatusCode) } // Get technical details if applicable var details string if showDetails && hwsError.Error != nil { details = formatErrorDetails(hwsError.Error) } // Render appropriate template if details != "" { return page.ErrorWithDetails( hwsError.StatusCode, http.StatusText(hwsError.StatusCode), message, details, ), nil } return page.Error( hwsError.StatusCode, http.StatusText(hwsError.StatusCode), message, ), nil } // shouldShowDetails determines if a status code should display technical details func shouldShowDetails(statusCode int) bool { switch statusCode { case 400, 418, 500, 503: // Bad Request, Internal Server Error, Service Unavailable return true case 401, 403, 404: // Unauthorized, Forbidden, Not Found return false default: // For unknown codes, show details for 5xx errors return statusCode >= 500 } } // getDefaultMessage provides fallback messages for status codes func getDefaultMessage(statusCode int) string { messages := map[int]string{ 400: "The request you made was malformed or unexpected.", 401: "You need to login to view this page.", 403: "You do not have permission to view this page.", 404: "The page or resource you have requested does not exist.", 418: "I'm a teapot!", 500: `An error occurred on the server. Please try again, and if this continues to happen contact an administrator.`, 503: "The server is currently down for maintenance and should be back soon. =)", } msg, exists := messages[statusCode] if !exists { if statusCode >= 500 { return "A server error occurred. Please try again later." } return "An error occurred while processing your request." } return msg }