http: Add mechanism to forbid certain files/directories

This commit is contained in:
Sasha Koshka 2024-12-10 00:38:47 -05:00
parent 11e8e7460a
commit 7480742e9e

View File

@ -23,6 +23,7 @@ type Handler struct {
Index []string Index []string
ErrorDocument string ErrorDocument string
DirectoryDocument string DirectoryDocument string
DenyAll ucontainer.Set[string]
} }
func (this *Handler) ServeHTTP (res http.ResponseWriter, req *http.Request) { func (this *Handler) ServeHTTP (res http.ResponseWriter, req *http.Request) {
@ -43,8 +44,15 @@ func (this *Handler) ServeHTTP (res http.ResponseWriter, req *http.Request) {
} }
hasTrailingSlash := strings.HasSuffix(pat, "/") hasTrailingSlash := strings.HasSuffix(pat, "/")
pat = path.Clean(req.URL.Path) pat = path.Clean(req.URL.Path)
name := pathToName(pat)
info, err := statFile(filesystem, pathToName(pat)) // access control
if this.DenyAll.Has(name) {
this.serveError(res, req, http.StatusForbidden, req.URL, false)
return
}
info, err := statFile(filesystem, name)
if err != nil { if err != nil {
this.serveError(res, req, http.StatusNotFound, req.URL, false) this.serveError(res, req, http.StatusNotFound, req.URL, false)
return return