Software / code / prosody
File
plugins/muc/name.lib.lua @ 10092:4b3c129e96f2 0.11
mod_websocket: Clone stanza before mutating (fixes #1398)
Checking for `stanza.attr.xmlns == nil` to determine if the stanza
object is an actual stanza (`<message>`, `<presence>` or `<iq>` in the
`jabber:client` or `jabbber:server` namespace) or some other stream
element.
Since this mutation is not reverted, it may leak to other places and
cause them to mistreat stanzas as stream elements. Especially in cases
like MUC where a single stanza is broadcast to many recipients.
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Sat, 20 Jul 2019 04:19:58 +0200 |
| parent | 9034:1c709e3d2e5e |
| child | 11057:13eee48071c8 |
line wrap: on
line source
-- Prosody IM -- Copyright (C) 2008-2010 Matthew Wild -- Copyright (C) 2008-2010 Waqas Hussain -- Copyright (C) 2014 Daurnimator -- -- This project is MIT/X11 licensed. Please see the -- COPYING file in the source package for more information. -- local jid_split = require "util.jid".split; local function get_name(room) return room._data.name or jid_split(room.jid); end local function set_name(room, name) if name == "" then name = nil; end if room._data.name == name then return false; end room._data.name = name; return true; end local function insert_name_into_form(event) table.insert(event.form, { name = "muc#roomconfig_roomname"; type = "text-single"; label = "Title"; value = event.room._data.name; }); end module:hook("muc-disco#info", function(event) event.reply:tag("identity", {category="conference", type="text", name=get_name(event.room)}):up(); insert_name_into_form(event); end); module:hook("muc-config-form", insert_name_into_form, 100-1); module:hook("muc-config-submitted/muc#roomconfig_roomname", function(event) if set_name(event.room, event.value) then event.status_codes["104"] = true; end end); return { get = get_name; set = set_name; };