Localised the common error phrases.

The no permissions error page has a less generic title now.

Fixed a bug where the title didn't show up for the not found page.
This commit is contained in:
Azareal 2018-09-28 17:19:51 +10:00
parent d8d5bc0573
commit dfca660dfc
2 changed files with 34 additions and 22 deletions

View File

@ -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(`<?xml version="1.0" encoding="UTF-8"?>
<error>A problem has occured</error>`)
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(`<?xml version="1.0" encoding="UTF-8"?>
<error>` + GetErrorPhrase("internal_error_body") + `</error>`))
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(`<?xml version="1.0" encoding="UTF-8"?>
<error>` + GetErrorPhrase("internal_error_body") + `</error>`))
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)

View File

@ -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": {