diff --git a/main.go b/main.go index 5e8c050ea08ce1b3a4b063e9865ed7ed9cd08f2f..ac7abcf1e351dbb607cabad7c9d6e1bcbb4ba8f9 100644 --- a/main.go +++ b/main.go @@ -87,7 +87,7 @@ func main() { func errorHandler(errorFilesPath string) func(http.ResponseWriter, *http.Request) { return func(w http.ResponseWriter, r *http.Request) { start := time.Now() - ext := "html" + exts := []string{"html", "htm"} if os.Getenv("DEBUG") != "" { w.Header().Set(FormatHeader, r.Header.Get(FormatHeader)) @@ -108,11 +108,11 @@ func errorHandler(errorFilesPath string) func(http.ResponseWriter, *http.Request cext, err := mime.ExtensionsByType(format) if err != nil { - log.Printf("unexpected error reading media type extension: %v. Using %v", err, ext) + log.Printf("unexpected error reading media type extension: %v. Using %v", err, strings.Join(exts, ", ")) } else if len(cext) == 0 { - log.Printf("couldn't get media type extension. Using %v", ext) + log.Printf("couldn't get media type extension. Using %v", strings.Join(exts, ", ")) } else { - ext = cext[0] + exts = cext } w.Header().Set(ContentType, format) @@ -129,20 +129,26 @@ func errorHandler(errorFilesPath string) func(http.ResponseWriter, *http.Request } w.WriteHeader(code) - if !strings.HasPrefix(ext, ".") { - ext = "." + ext - } - file := fmt.Sprintf("%v/%v%v", errorFilesPath, code, ext) - if _, err := os.Stat(file); os.IsNotExist(err) { - log.Printf("unexpected error opening file: %v", err) + var file string + for _, ext := range exts { + filePath := fmt.Sprintf("%v/%v%v", errorFilesPath, code, ext) + if _, err := os.Stat(file); os.IsExist(err) { + file = filePath + break + } scode := strconv.Itoa(code) - file = fmt.Sprintf("%v/%cxx%v", errorFilesPath, scode[0], ext) - if _, err := os.Stat(file); os.IsNotExist(err) { - log.Printf("unexpected error opening file: %v", err) - http.NotFound(w, r) - return + filePath = fmt.Sprintf("%v/%cxx%v", errorFilesPath, scode[0], ext) + if _, err := os.Stat(file); os.IsExist(err) { + file = filePath + break } } + if file == "" { + log.Printf("unexpected error opening file: %v", err) + http.NotFound(w, r) + return + } + tmpl, err := template.New(path.Base(file)).ParseFiles(file) if err != nil { log.Printf("unexpected error executing template: %v", err)