Mercurial > prosody-modules
comparison mod_admin_web/admin_web/mod_admin_web.lua @ 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 |
| parents | 8f3499ae1e27 |
| children | 4f78f5020aa9 |
comparison
equal
deleted
inserted
replaced
| 308:f406e300d709 | 309:5ec9125575fc |
|---|---|
| 28 local http_base = (prosody.paths.plugins or "./plugins/") .. "admin_web/www_files"; | 28 local http_base = (prosody.paths.plugins or "./plugins/") .. "admin_web/www_files"; |
| 29 | 29 |
| 30 local xmlns_c2s_session = "http://prosody.im/streams/c2s"; | 30 local xmlns_c2s_session = "http://prosody.im/streams/c2s"; |
| 31 local xmlns_s2s_session = "http://prosody.im/streams/s2s"; | 31 local xmlns_s2s_session = "http://prosody.im/streams/s2s"; |
| 32 | 32 |
| 33 local response_301 = { status = "301 Moved Permanently" }; | |
| 33 local response_400 = { status = "400 Bad Request", body = "<h1>Bad Request</h1>Sorry, we didn't understand your request :(" }; | 34 local response_400 = { status = "400 Bad Request", body = "<h1>Bad Request</h1>Sorry, we didn't understand your request :(" }; |
| 34 local response_403 = { status = "403 Forbidden", body = "<h1>Forbidden</h1>You don't have permission to view the contents of this directory :(" }; | 35 local response_403 = { status = "403 Forbidden", body = "<h1>Forbidden</h1>You don't have permission to view the contents of this directory :(" }; |
| 35 local response_404 = { status = "404 Not Found", body = "<h1>Page Not Found</h1>Sorry, we couldn't find what you were looking for :(" }; | 36 local response_404 = { status = "404 Not Found", body = "<h1>Page Not Found</h1>Sorry, we couldn't find what you were looking for :(" }; |
| 36 | 37 |
| 37 local mime_map = { | 38 local mime_map = { |
| 114 end | 115 end |
| 115 end | 116 end |
| 116 return path; | 117 return path; |
| 117 end | 118 end |
| 118 | 119 |
| 119 function serve_file(path) | 120 function serve_file(path, base) |
| 120 local full_path = http_base..path; | 121 local full_path = http_base..path; |
| 121 if stat(full_path, "mode") == "directory" then | 122 if stat(full_path, "mode") == "directory" then |
| 123 if not path:find("/$") then | |
| 124 local response = response_301; | |
| 125 response.headers = { ["Location"] = base .. "/" }; | |
| 126 return response; | |
| 127 end | |
| 122 if stat(full_path.."/index.html", "mode") == "file" then | 128 if stat(full_path.."/index.html", "mode") == "file" then |
| 123 return serve_file(path.."/index.html"); | 129 return serve_file(path.."/index.html"); |
| 124 end | 130 end |
| 125 return response_403; | 131 return response_403; |
| 126 end | 132 end |
| 141 end | 147 end |
| 142 | 148 |
| 143 local function handle_file_request(method, body, request) | 149 local function handle_file_request(method, body, request) |
| 144 local path = preprocess_path(request.url.path); | 150 local path = preprocess_path(request.url.path); |
| 145 if not path then return response_400; end | 151 if not path then return response_400; end |
| 146 path = path:gsub("^/[^/]+", ""); -- Strip /admin/ | 152 path_stripped = path:gsub("^/[^/]+", ""); -- Strip /admin/ |
| 147 return serve_file(path); | 153 return serve_file(path_stripped, path); |
| 148 end | 154 end |
| 149 | 155 |
| 150 function module.load() | 156 function module.load() |
| 151 local http_conf = config.get("*", "core", "webadmin_http_ports"); | 157 local http_conf = config.get("*", "core", "webadmin_http_ports"); |
| 152 | 158 |
