diff --git a/common/errors.go b/common/errors.go index 568383ca..1770beae 100644 --- a/common/errors.go +++ b/common/errors.go @@ -100,7 +100,8 @@ func errorHeader(w http.ResponseWriter, user User, title string) *Header { // InternalError is the main function for handling internal errors, while simultaneously printing out a page for the end-user to let them know that *something* has gone wrong // ? - Add a user parameter? func InternalError(err error, w http.ResponseWriter, r *http.Request) RouteError { - pi := ErrorPage{errorHeader(w, GuestUser, "Internal Server Error"), "A problem has occurred in the system."} + w.WriteHeader(500) + pi := ErrorPage{errorHeader(w, GuestUser, GetErrorPhrase("internal_error_title")), GetErrorPhrase("internal_error_body")} handleErrorTemplate(w, r, pi) LogError(err) return HandledRouteError() @@ -119,25 +120,24 @@ func InternalErrorJSQ(err error, w http.ResponseWriter, r *http.Request, isJs bo // ? - Add a user parameter? func InternalErrorJS(err error, w http.ResponseWriter, r *http.Request) RouteError { w.WriteHeader(500) - writeJsonError("A problem has occurred in the system.", w) + writeJsonError(GetErrorPhrase("internal_error_body"), w) LogError(err) return HandledRouteError() } // When the task system detects if the database is down, some database errors might lip by this func DatabaseError(w http.ResponseWriter, r *http.Request) RouteError { - pi := ErrorPage{errorHeader(w, GuestUser, "Internal Server Error"), "A problem has occurred in the system."} + w.WriteHeader(500) + pi := ErrorPage{errorHeader(w, GuestUser, GetErrorPhrase("internal_error_title")), GetErrorPhrase("internal_error_body")} handleErrorTemplate(w, r, pi) return HandledRouteError() } -var xmlInternalError = []byte(` -A problem has occured`) - func InternalErrorXML(err error, w http.ResponseWriter, r *http.Request) RouteError { w.Header().Set("Content-Type", "application/xml") w.WriteHeader(500) - w.Write(xmlInternalError) + w.Write([]byte(` +` + GetErrorPhrase("internal_error_body") + ``)) LogError(err) return HandledRouteError() } @@ -146,14 +146,15 @@ func InternalErrorXML(err error, w http.ResponseWriter, r *http.Request) RouteEr func SilentInternalErrorXML(err error, w http.ResponseWriter, r *http.Request) RouteError { w.Header().Set("Content-Type", "application/xml") w.WriteHeader(500) - w.Write(xmlInternalError) + w.Write([]byte(` +` + GetErrorPhrase("internal_error_body") + ``)) log.Print("InternalError: ", err) return HandledRouteError() } func PreError(errmsg string, w http.ResponseWriter, r *http.Request) RouteError { w.WriteHeader(500) - pi := ErrorPage{errorHeader(w, GuestUser, "Error"), errmsg} + pi := ErrorPage{errorHeader(w, GuestUser, GetErrorPhrase("error_title")), errmsg} handleErrorTemplate(w, r, pi) return HandledRouteError() } @@ -175,7 +176,7 @@ func PreErrorJSQ(errmsg string, w http.ResponseWriter, r *http.Request, isJs boo // TODO: Pass header in for this and similar errors instead of having to pass in both user and w? Would also allow for more stateful things, although this could be a problem func LocalError(errmsg string, w http.ResponseWriter, r *http.Request, user User) RouteError { w.WriteHeader(500) - pi := ErrorPage{errorHeader(w, user, "Local Error"), errmsg} + pi := ErrorPage{errorHeader(w, user, GetErrorPhrase("local_error_title")), errmsg} handleErrorTemplate(w, r, pi) return HandledRouteError() } @@ -197,7 +198,7 @@ func LocalErrorJS(errmsg string, w http.ResponseWriter, r *http.Request) RouteEr // NoPermissions is an error shown to the end-user when they try to access an area which they aren't authorised to access func NoPermissions(w http.ResponseWriter, r *http.Request, user User) RouteError { w.WriteHeader(403) - pi := ErrorPage{errorHeader(w, user, "Local Error"), "You don't have permission to do that."} + pi := ErrorPage{errorHeader(w, user, GetErrorPhrase("no_permissions_title")), GetErrorPhrase("no_permissions_body")} handleErrorTemplate(w, r, pi) return HandledRouteError() } @@ -211,14 +212,14 @@ func NoPermissionsJSQ(w http.ResponseWriter, r *http.Request, user User, isJs bo func NoPermissionsJS(w http.ResponseWriter, r *http.Request, user User) RouteError { w.WriteHeader(403) - writeJsonError("You don't have permission to do that.", w) + writeJsonError(GetErrorPhrase("no_permissions_body"), w) return HandledRouteError() } // ? - Is this actually used? Should it be used? A ban in Gosora should be more of a permission revocation to stop them posting rather than something which spits up an error page, right? func Banned(w http.ResponseWriter, r *http.Request, user User) RouteError { w.WriteHeader(403) - pi := ErrorPage{errorHeader(w, user, "Banned"), "You have been banned from this site."} + pi := ErrorPage{errorHeader(w, user, GetErrorPhrase("banned_title")), GetErrorPhrase("banned_body")} handleErrorTemplate(w, r, pi) return HandledRouteError() } @@ -234,7 +235,7 @@ func BannedJSQ(w http.ResponseWriter, r *http.Request, user User, isJs bool) Rou func BannedJS(w http.ResponseWriter, r *http.Request, user User) RouteError { w.WriteHeader(403) - writeJsonError("You have been banned from this site.", w) + writeJsonError(GetErrorPhrase("banned_body"), w) return HandledRouteError() } @@ -250,7 +251,7 @@ func LoginRequiredJSQ(w http.ResponseWriter, r *http.Request, user User, isJs bo // LoginRequired is an error shown to the end-user when they try to access an area which requires them to login func LoginRequired(w http.ResponseWriter, r *http.Request, user User) RouteError { w.WriteHeader(401) - pi := ErrorPage{errorHeader(w, user, "Local Error"), "You need to login to do that."} + pi := ErrorPage{errorHeader(w, user, GetErrorPhrase("no_permissions_title")), GetErrorPhrase("login_required_body")} handleErrorTemplate(w, r, pi) return HandledRouteError() } @@ -258,7 +259,7 @@ func LoginRequired(w http.ResponseWriter, r *http.Request, user User) RouteError // nolint func LoginRequiredJS(w http.ResponseWriter, r *http.Request, user User) RouteError { w.WriteHeader(401) - writeJsonError("You need to login to do that.", w) + writeJsonError(GetErrorPhrase("login_required_body"), w) return HandledRouteError() } @@ -266,7 +267,7 @@ func LoginRequiredJS(w http.ResponseWriter, r *http.Request, user User) RouteErr // ? - Should we add JS and JSQ versions of this? func SecurityError(w http.ResponseWriter, r *http.Request, user User) RouteError { w.WriteHeader(403) - pi := ErrorPage{errorHeader(w, user, "Security Error"), "There was a security issue with your request."} + pi := ErrorPage{errorHeader(w, user, GetErrorPhrase("security_error_title")), GetErrorPhrase("security_error_body")} if RunPreRenderHook("pre_render_security_error", w, r, &user, &pi) { return nil } @@ -281,7 +282,7 @@ func SecurityError(w http.ResponseWriter, r *http.Request, user User) RouteError // ? - Add a JSQ and JS version of this? // ? - Add a user parameter? func NotFound(w http.ResponseWriter, r *http.Request, header *Header) RouteError { - return CustomError(GetErrorPhrase("not_found"), 404, "Not Found", w, r, header, GuestUser) + return CustomError(GetErrorPhrase("not_found_body"), 404, GetErrorPhrase("not_found_title"), w, r, header, GuestUser) } // CustomError lets us make custom error types which aren't covered by the generic functions above @@ -289,6 +290,7 @@ func CustomError(errmsg string, errcode int, errtitle string, w http.ResponseWri if header == nil { header = DefaultHeader(w, user) } + header.Title = errtitle w.WriteHeader(errcode) pi := ErrorPage{header, errmsg} handleErrorTemplate(w, r, pi) @@ -298,9 +300,6 @@ func CustomError(errmsg string, errcode int, errtitle string, w http.ResponseWri // CustomErrorJSQ is a version of CustomError which lets us handle both JSON and regular pages depending on how it's being accessed func CustomErrorJSQ(errmsg string, errcode int, errtitle string, w http.ResponseWriter, r *http.Request, header *Header, user User, isJs bool) RouteError { if !isJs { - if header == nil { - header = DefaultHeader(w, user) - } return CustomError(errmsg, errcode, errtitle, w, r, header, user) } return CustomErrorJS(errmsg, errcode, w, r, user) diff --git a/langs/english.json b/langs/english.json index 85629b1e..6175820b 100644 --- a/langs/english.json +++ b/langs/english.json @@ -70,7 +70,20 @@ }, "Errors": { - "not_found":"The requested page doesn't exist." + "error_title":"Error", + "local_error_title":"Local Error", + + "not_found_title":"Page Not Found", + "not_found_body":"The requested page doesn't exist.", + "login_required_body":"You need to login to do that.", + "no_permissions_title":"Access Denied", + "no_permissions_body":"You don't have permission to do that.", + "internal_error_title":"Internal Server Error", + "internal_error_body":"A problem has occurred in the system.", + "security_error_title":"Security Error", + "security_error_body":"There was a security issue with your request.", + "banned_title":"Banned", + "banned_body":"You have been banned from this site." }, "PageTitles": {