Mercurial > prosody-modules
changeset 1268:854a3933cfcd
mod_muc_log_http: URL-encode room names. This allows special characters in room names to work. Ideally this escaping shouldn’t be done in the user visible content, but the module’s template system doesn’t currently allow that.
author | Waqas Hussain <waqas20@gmail.com> |
---|---|
date | Sat, 04 Jan 2014 16:50:57 -0500 (2014-01-04) |
parents | 589991b148e8 |
children | 69d42d2427f7 |
files | mod_muc_log_http/muc_log_http/mod_muc_log_http.lua |
diffstat | 1 files changed, 5 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/mod_muc_log_http/muc_log_http/mod_muc_log_http.lua Sat Jan 04 20:34:22 2014 +0100 +++ b/mod_muc_log_http/muc_log_http/mod_muc_log_http.lua Sat Jan 04 16:50:57 2014 -0500 @@ -62,6 +62,9 @@ url = url:gsub("\r\n", "\n") return url end +local function urlencode(s) + return s and (s:gsub("[^a-zA-Z0-9.~_-]", function (c) return ("%%%02x"):format(c:byte()); end)); +end local function generate_room_list(component) local rooms = ""; @@ -70,7 +73,7 @@ for jid, room in pairs(component_host.muc.rooms) do local node = split_jid(jid); if not room._data.hidden and room._data.logging and node then - rooms = rooms .. html.rooms.bit:gsub("###ROOM###", node):gsub("###COMPONENT###", component); + rooms = rooms .. html.rooms.bit:gsub("###ROOM###", urlencode(node)):gsub("###COMPONENT###", component); end end return html.rooms.body:gsub("###ROOMS_STUFF###", rooms):gsub("###COMPONENT###", component), "Chatroom logs for "..component; @@ -242,7 +245,7 @@ found = 1 end - rooms = rooms .. html.days.rooms.bit:gsub("###ROOM###", node); + rooms = rooms .. html.days.rooms.bit:gsub("###ROOM###", urlencode(node)); end end