Software /
code /
prosody-modules
Comparison
mod_admin_web/admin_web/mod_admin_web.lua @ 885:292ea8df7267
mod_admin_web: Let mod_http_files handle file serving
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 22 Dec 2012 21:09:41 +0100 |
parent | 770:a85d86a7f24e |
child | 901:e3ad5f3aa6d4 |
comparison
equal
deleted
inserted
replaced
884:2ece37bf9cc6 | 885:292ea8df7267 |
---|---|
20 local st = require "util.stanza"; | 20 local st = require "util.stanza"; |
21 local uuid_generate = require "util.uuid".generate; | 21 local uuid_generate = require "util.uuid".generate; |
22 local is_admin = require "core.usermanager".is_admin; | 22 local is_admin = require "core.usermanager".is_admin; |
23 local pubsub = require "util.pubsub"; | 23 local pubsub = require "util.pubsub"; |
24 local jid_bare = require "util.jid".bare; | 24 local jid_bare = require "util.jid".bare; |
25 local lfs = require "lfs"; | |
26 local open = io.open; | |
27 local stat = lfs.attributes; | |
28 | 25 |
29 module:set_global(); | 26 module:set_global(); |
30 | 27 |
31 local service = {}; | 28 local service = {}; |
32 | |
33 local http_base = module.path:gsub("/[^/]+$","") .. "/www_files/"; | |
34 | 29 |
35 local xmlns_adminsub = "http://prosody.im/adminsub"; | 30 local xmlns_adminsub = "http://prosody.im/adminsub"; |
36 local xmlns_c2s_session = "http://prosody.im/streams/c2s"; | 31 local xmlns_c2s_session = "http://prosody.im/streams/c2s"; |
37 local xmlns_s2s_session = "http://prosody.im/streams/s2s"; | 32 local xmlns_s2s_session = "http://prosody.im/streams/s2s"; |
38 | |
39 local mime_map = { | |
40 html = "text/html"; | |
41 xml = "text/xml"; | |
42 js = "text/javascript"; | |
43 css = "text/css"; | |
44 }; | |
45 | 33 |
46 local idmap = {}; | 34 local idmap = {}; |
47 | 35 |
48 function add_client(session, host) | 36 function add_client(session, host) |
49 local name = session.full_jid; | 37 local name = session.full_jid; |
102 local notifier = st.stanza("retract", { id = id }); | 90 local notifier = st.stanza("retract", { id = id }); |
103 service[host]:retract(xmlns_s2s_session, host, id, notifier); | 91 service[host]:retract(xmlns_s2s_session, host, id, notifier); |
104 end | 92 end |
105 end | 93 end |
106 | 94 |
107 function serve_file(event, path) | |
108 local full_path = http_base .. path; | |
109 | |
110 if stat(full_path, "mode") == "directory" then | |
111 if stat(full_path.."/index.html", "mode") == "file" then | |
112 return serve_file(event, path.."/index.html"); | |
113 end | |
114 return 403; | |
115 end | |
116 | |
117 local f, err = open(full_path, "rb"); | |
118 if not f then | |
119 return 404; | |
120 end | |
121 | |
122 local data = f:read("*a"); | |
123 f:close(); | |
124 if not data then | |
125 return 403; | |
126 end | |
127 | |
128 local ext = path:match("%.([^.]*)$"); | |
129 event.response.headers.content_type = mime_map[ext]; -- Content-Type should be nil when not known | |
130 return data; | |
131 end | |
132 | |
133 function module.add_host(module) | 95 function module.add_host(module) |
134 -- Dependencies | 96 -- Dependencies |
135 module:depends("bosh"); | 97 module:depends("bosh"); |
136 module:depends("admin_adhoc"); | 98 module:depends("admin_adhoc"); |
137 module:depends("http"); | 99 module:depends("http"); |
100 local serve_file = module:depends("http_files").serve { | |
101 path = module:get_directory() .. "/www_files"; | |
102 }; | |
138 | 103 |
139 -- Setup HTTP server | 104 -- Setup HTTP server |
140 module:provides("http", { | 105 module:provides("http", { |
141 name = "admin"; | 106 name = "admin"; |
142 route = { | 107 route = { |