32 lines
673 B
Go
32 lines
673 B
Go
|
package view
|
||
|
|
||
|
import (
|
||
|
"errors"
|
||
|
"net/http"
|
||
|
"os"
|
||
|
"path/filepath"
|
||
|
)
|
||
|
|
||
|
func StaticHandler(directory string) http.Handler {
|
||
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||
|
info, err := os.Stat(filepath.Join(directory, filepath.Clean(r.URL.Path)))
|
||
|
|
||
|
// does the file exist?
|
||
|
if err != nil {
|
||
|
if errors.Is(err, os.ErrNotExist) {
|
||
|
http.NotFound(w, r)
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// is thjs a directory? (forbidden)
|
||
|
if info.IsDir() {
|
||
|
http.NotFound(w, r)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
http.FileServer(http.Dir(directory)).ServeHTTP(w, r)
|
||
|
})
|
||
|
}
|
||
|
|