Mercurial > prosody-modules
changeset 309:5ec9125575fc
mod_admin_web: Handle paths without trailing slash
author | Florian Zeitz <florob@babelmonkeys.de> |
---|---|
date | Thu, 06 Jan 2011 23:41:45 +0100 (2011-01-06) |
parents | f406e300d709 |
children | b3bcd1913c85 |
files | mod_admin_web/admin_web/mod_admin_web.lua |
diffstat | 1 files changed, 9 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/mod_admin_web/admin_web/mod_admin_web.lua Thu Jan 06 21:29:15 2011 +0100 +++ b/mod_admin_web/admin_web/mod_admin_web.lua Thu Jan 06 23:41:45 2011 +0100 @@ -30,6 +30,7 @@ local xmlns_c2s_session = "http://prosody.im/streams/c2s"; local xmlns_s2s_session = "http://prosody.im/streams/s2s"; +local response_301 = { status = "301 Moved Permanently" }; local response_400 = { status = "400 Bad Request", body = "<h1>Bad Request</h1>Sorry, we didn't understand your request :(" }; local response_403 = { status = "403 Forbidden", body = "<h1>Forbidden</h1>You don't have permission to view the contents of this directory :(" }; local response_404 = { status = "404 Not Found", body = "<h1>Page Not Found</h1>Sorry, we couldn't find what you were looking for :(" }; @@ -116,9 +117,14 @@ return path; end -function serve_file(path) +function serve_file(path, base) local full_path = http_base..path; if stat(full_path, "mode") == "directory" then + if not path:find("/$") then + local response = response_301; + response.headers = { ["Location"] = base .. "/" }; + return response; + end if stat(full_path.."/index.html", "mode") == "file" then return serve_file(path.."/index.html"); end @@ -143,8 +149,8 @@ local function handle_file_request(method, body, request) local path = preprocess_path(request.url.path); if not path then return response_400; end - path = path:gsub("^/[^/]+", ""); -- Strip /admin/ - return serve_file(path); + path_stripped = path:gsub("^/[^/]+", ""); -- Strip /admin/ + return serve_file(path_stripped, path); end function module.load()