Merge pull request #1 from doron2402/master

Hide directory listing
pull/3/head
Jeromy Streets 6 years ago committed by GitHub
commit 702946191f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      README.md
  2. 33
      serve.go

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

@ -50,7 +50,9 @@ ENVIRONMENT VARIABLES
URL_PREFIX URL_PREFIX
The prefix to use in the URL path. If supplied, then the prefix must 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 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 USAGE
FILE LAYOUT FILE LAYOUT
@ -71,7 +73,8 @@ USAGE
export FOLDER=/var/www/sub export FOLDER=/var/www/sub
export HOST=my.machine export HOST=my.machine
export PORT=80 export PORT=80
export URL_PREFIX=/my/stuff export URL_PREFIX=/my/stuff
export SHOW_LISTING=true
static-file-server static-file-server
Retrieve with: wget http://my.machine/my/stuff/my.file Retrieve with: wget http://my.machine/my/stuff/my.file
@ -113,6 +116,7 @@ func main() {
tlsCert := env("TLS_CERT", "") tlsCert := env("TLS_CERT", "")
tlsKey := env("TLS_KEY", "") tlsKey := env("TLS_KEY", "")
urlPrefix := env("URL_PREFIX", "") urlPrefix := env("URL_PREFIX", "")
showListing := env("SHOW_LISTING", "true")
// If HTTPS is to be used, verify both TLS_* environment variables are set. // If HTTPS is to be used, verify both TLS_* environment variables are set.
if 0 < len(tlsCert) || 0 < len(tlsKey) { if 0 < len(tlsCert) || 0 < len(tlsKey) {
@ -139,7 +143,11 @@ func main() {
if 0 == len(urlPrefix) { if 0 == len(urlPrefix) {
handler = basicHandler(folder) handler = basicHandler(folder)
} else { } else {
handler = prefixHandler(folder, urlPrefix) if showListing == "false" {
handler = prefixHandlerWithoutListingFilesInDirectory(folder, urlPrefix)
} else {
handler = prefixHandler(folder, urlPrefix)
}
} }
http.HandleFunc("/", handler) 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 // prefixHandler removes the URL path prefix before serving files from the
// folder passed. // folder passed.
func prefixHandler(folder, urlPrefix string) http.HandlerFunc { func prefixHandler(folder, urlPrefix string) http.HandlerFunc {
@ -166,6 +192,7 @@ func prefixHandler(folder, urlPrefix string) http.HandlerFunc {
http.NotFound(w, r) http.NotFound(w, r)
return return
} }
http.ServeFile(w, r, folder+strings.TrimPrefix(r.URL.Path, urlPrefix)) http.ServeFile(w, r, folder+strings.TrimPrefix(r.URL.Path, urlPrefix))
} }
} }

Loading…
Cancel
Save