|
|
|
@ -29,7 +29,6 @@ func (d *dataStore) GetData() map[string]interface{} { |
|
|
|
|
// Although similar to macaron.Recovery() the main difference is that this error will be created
|
|
|
|
|
// with the gitea 500 page.
|
|
|
|
|
func Recovery() func(next http.Handler) http.Handler { |
|
|
|
|
var isDevelopment = setting.RunMode != "prod" |
|
|
|
|
return func(next http.Handler) http.Handler { |
|
|
|
|
rnd := render.New(render.Options{ |
|
|
|
|
Extensions: []string{".tmpl"}, |
|
|
|
@ -37,7 +36,7 @@ func Recovery() func(next http.Handler) http.Handler { |
|
|
|
|
Funcs: templates.NewFuncMap(), |
|
|
|
|
Asset: templates.GetAsset, |
|
|
|
|
AssetNames: templates.GetAssetNames, |
|
|
|
|
IsDevelopment: isDevelopment, |
|
|
|
|
IsDevelopment: !setting.IsProd(), |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { |
|
|
|
@ -50,10 +49,10 @@ func Recovery() func(next http.Handler) http.Handler { |
|
|
|
|
if err := recover(); err != nil { |
|
|
|
|
combinedErr := fmt.Sprintf("PANIC: %v\n%s", err, string(log.Stack(2))) |
|
|
|
|
log.Error(combinedErr) |
|
|
|
|
if isDevelopment { |
|
|
|
|
http.Error(w, combinedErr, 500) |
|
|
|
|
} else { |
|
|
|
|
if setting.IsProd() { |
|
|
|
|
http.Error(w, http.StatusText(500), 500) |
|
|
|
|
} else { |
|
|
|
|
http.Error(w, combinedErr, 500) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}() |
|
|
|
@ -94,7 +93,7 @@ func Recovery() func(next http.Handler) http.Handler { |
|
|
|
|
|
|
|
|
|
w.Header().Set(`X-Frame-Options`, `SAMEORIGIN`) |
|
|
|
|
|
|
|
|
|
if setting.RunMode != "prod" { |
|
|
|
|
if !setting.IsProd() { |
|
|
|
|
store.Data["ErrorMsg"] = combinedErr |
|
|
|
|
} |
|
|
|
|
err = rnd.HTML(w, 500, "status/500", templates.BaseVars().Merge(store.Data)) |
|
|
|
|