mod_httpserver: Serve index.html if a request is made for a directory and it contains one (thanks Brian Cully)

Tue, 13 Jul 2010 09:25:45 +0100

author
Matthew Wild <mwild1@gmail.com>
date
Tue, 13 Jul 2010 09:25:45 +0100
changeset 3353
cd3cbf361f8f
parent 3352
770e27bf11ea
child 3354
b4ebda3fd6e9

mod_httpserver: Serve index.html if a request is made for a directory and it contains one (thanks Brian Cully)

plugins/mod_httpserver.lua file | annotate | diff | comparison | revisions
--- a/plugins/mod_httpserver.lua	Tue Jul 13 08:59:00 2010 +0100
+++ b/plugins/mod_httpserver.lua	Tue Jul 13 09:25:45 2010 +0100
@@ -8,9 +8,11 @@
 
 
 local httpserver = require "net.httpserver";
+local lfs = require "lfs";
 
 local open = io.open;
 local t_concat = table.concat;
+local stat = lfs.attributes;
 
 local http_base = config.get("*", "core", "http_path") or "www_files";
 
@@ -48,7 +50,14 @@
 end
 
 function serve_file(path)
-	local f, err = open(http_base..path, "rb");
+	local full_path = http_base..path;
+	if stat(full_path, "mode") == "directory" then
+		if stat(full_path.."/index.html", "mode") == "file" then
+			return serve_file(path.."/index.html");
+		end
+		return response_403;
+	end
+	local f, err = open(full_path, "rb");
 	if not f then return response_404; end
 	local data = f:read("*a");
 	f:close();

mercurial