Skip to content
Snippets Groups Projects
Verified Commit da08b0ac authored by Janne Mareike Koschinski's avatar Janne Mareike Koschinski
Browse files

Handle multiple extensions gracefully

parent 80a9389b
No related branches found
No related tags found
No related merge requests found
......@@ -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
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
}
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)
scode := strconv.Itoa(code)
file = fmt.Sprintf("%v/%cxx%v", errorFilesPath, scode[0], ext)
if _, err := os.Stat(file); os.IsNotExist(err) {
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)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment