Comparison

plugins/mod_httpserver.lua @ 3353:cd3cbf361f8f

mod_httpserver: Serve index.html if a request is made for a directory and it contains one (thanks Brian Cully)
author Matthew Wild <mwild1@gmail.com>
date Tue, 13 Jul 2010 09:25:45 +0100
parent 2925:692b3c6c5bd2
child 4670:bd5e5e23942a
comparison
equal deleted inserted replaced
3352:770e27bf11ea 3353:cd3cbf361f8f
6 -- COPYING file in the source package for more information. 6 -- COPYING file in the source package for more information.
7 -- 7 --
8 8
9 9
10 local httpserver = require "net.httpserver"; 10 local httpserver = require "net.httpserver";
11 local lfs = require "lfs";
11 12
12 local open = io.open; 13 local open = io.open;
13 local t_concat = table.concat; 14 local t_concat = table.concat;
15 local stat = lfs.attributes;
14 16
15 local http_base = config.get("*", "core", "http_path") or "www_files"; 17 local http_base = config.get("*", "core", "http_path") or "www_files";
16 18
17 local response_400 = { status = "400 Bad Request", body = "<h1>Bad Request</h1>Sorry, we didn't understand your request :(" }; 19 local response_400 = { status = "400 Bad Request", body = "<h1>Bad Request</h1>Sorry, we didn't understand your request :(" };
18 local response_403 = { status = "403 Forbidden", body = "<h1>Forbidden</h1>You don't have permission to view the contents of this directory :(" }; 20 local response_403 = { status = "403 Forbidden", body = "<h1>Forbidden</h1>You don't have permission to view the contents of this directory :(" };
46 end 48 end
47 return path; 49 return path;
48 end 50 end
49 51
50 function serve_file(path) 52 function serve_file(path)
51 local f, err = open(http_base..path, "rb"); 53 local full_path = http_base..path;
54 if stat(full_path, "mode") == "directory" then
55 if stat(full_path.."/index.html", "mode") == "file" then
56 return serve_file(path.."/index.html");
57 end
58 return response_403;
59 end
60 local f, err = open(full_path, "rb");
52 if not f then return response_404; end 61 if not f then return response_404; end
53 local data = f:read("*a"); 62 local data = f:read("*a");
54 f:close(); 63 f:close();
55 if not data then 64 if not data then
56 return response_403; 65 return response_403;