diff --git a/README.md b/README.md index 519749c..1982c42 100644 --- a/README.md +++ b/README.md @@ -262,6 +262,8 @@ instead of the default "Directory listing" title. The following options allow users to configure various aspects of the directory listing: +* `DirectoryListing` (boolean): if true, enable directory listing; if false, + return 51 Not found (default value true) * `DirectorySort`: A string specifying how to sort files in automatically generated directory listings. Must be one of "Name", "Size" or "Time" (default value "Name"). diff --git a/config.go b/config.go index 6d0c91f..8c29527 100644 --- a/config.go +++ b/config.go @@ -36,6 +36,7 @@ type UserConfig struct { PermRedirects map[string]string MimeOverrides map[string]string CertificateZones map[string][]string + DirectoryListing bool DirectorySort string DirectorySubdirsFirst bool DirectoryReverse bool @@ -70,6 +71,7 @@ func getConfig(filename string) (SysConfig, UserConfig, error) { userConfig.DefaultEncoding = "" userConfig.TempRedirects = make(map[string]string) userConfig.PermRedirects = make(map[string]string) + userConfig.DirectoryListing = true userConfig.DirectorySort = "Name" userConfig.DirectorySubdirsFirst = false diff --git a/example.conf b/example.conf index c37104f..2f72de8 100644 --- a/example.conf +++ b/example.conf @@ -14,6 +14,7 @@ # ## Directory listing # +#DirectoryListing = true #DirectorySort = "Time" #DirectorySubdirsFirst = false #DirectoryReverse = true diff --git a/handler.go b/handler.go index 0de98d5..dc97188 100644 --- a/handler.go +++ b/handler.go @@ -318,7 +318,7 @@ func serveDirectory(URL *url.URL, path string, logEntry *LogEntry, conn net.Conn if err == nil && uint64(index_info.Mode().Perm())&0444 == 0444 { serveFile(index_path, index_info, logEntry, conn, config) // Serve a generated listing - } else { + } else if config.DirectoryListing { listing, err := generateDirectoryListing(URL, path, config) if err != nil { log.Println("Error generating listing for directory " + path + ": " + err.Error()) @@ -329,6 +329,9 @@ func serveDirectory(URL *url.URL, path string, logEntry *LogEntry, conn net.Conn conn.Write([]byte("20 text/gemini\r\n")) logEntry.Status = 20 conn.Write([]byte(listing)) + } else { + conn.Write([]byte("51 Not found!\r\n")) + logEntry.Status = 51 } }