Merge pull request #1 from doron2402/master

Hide directory listing
This commit is contained in:
Jeromy Streets 2018-04-17 14:30:58 -07:00 committed by GitHub
commit 702946191f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 32 additions and 3 deletions

View File

@ -20,6 +20,8 @@ URL_PREFIX=
# served using HTTP.
TLS_CERT=
TLS_KEY=
# Hide Listing (Only available when URL_PREFIX is set)
SHOW_LISTING=
```
### Without Docker

View File

@ -50,7 +50,9 @@ ENVIRONMENT VARIABLES
URL_PREFIX
The prefix to use in the URL path. If supplied, then the prefix must
start with a forward-slash and NOT end with a forward-slash. If not
supplied then no prefix is used.
supplied then no prefix is used.
SHOW_LISTING
This will allow you to hide the file inside the directory
USAGE
FILE LAYOUT
@ -71,7 +73,8 @@ USAGE
export FOLDER=/var/www/sub
export HOST=my.machine
export PORT=80
export URL_PREFIX=/my/stuff
export URL_PREFIX=/my/stuff
export SHOW_LISTING=true
static-file-server
Retrieve with: wget http://my.machine/my/stuff/my.file
@ -113,6 +116,7 @@ func main() {
tlsCert := env("TLS_CERT", "")
tlsKey := env("TLS_KEY", "")
urlPrefix := env("URL_PREFIX", "")
showListing := env("SHOW_LISTING", "true")
// If HTTPS is to be used, verify both TLS_* environment variables are set.
if 0 < len(tlsCert) || 0 < len(tlsKey) {
@ -139,7 +143,11 @@ func main() {
if 0 == len(urlPrefix) {
handler = basicHandler(folder)
} else {
handler = prefixHandler(folder, urlPrefix)
if showListing == "false" {
handler = prefixHandlerWithoutListingFilesInDirectory(folder, urlPrefix)
} else {
handler = prefixHandler(folder, urlPrefix)
}
}
http.HandleFunc("/", handler)
@ -158,6 +166,24 @@ func basicHandler(folder string) http.HandlerFunc {
}
}
// prefixHandler removes the URL path prefix before serving files from the
// folder passed.
func prefixHandlerWithoutListingFilesInDirectory(folder, urlPrefix string) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
if !strings.HasPrefix(r.URL.Path, urlPrefix) {
http.NotFound(w, r)
return
}
// dont list file in directory
if strings.HasSuffix(r.URL.Path, "/") {
http.NotFound(w, r)
return
}
http.ServeFile(w, r, folder+strings.TrimPrefix(r.URL.Path, urlPrefix))
}
}
// prefixHandler removes the URL path prefix before serving files from the
// folder passed.
func prefixHandler(folder, urlPrefix string) http.HandlerFunc {
@ -166,6 +192,7 @@ func prefixHandler(folder, urlPrefix string) http.HandlerFunc {
http.NotFound(w, r)
return
}
http.ServeFile(w, r, folder+strings.TrimPrefix(r.URL.Path, urlPrefix))
}
}