Software /
code /
prosody
Comparison
plugins/muc/muc.lib.lua @ 8856:538bb632a2b6
MUC: Use util.jid.resource
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Fri, 01 Jun 2018 09:16:24 +0200 |
parent | 8853:f84f566dea58 |
child | 8859:11176f47a03a |
comparison
equal
deleted
inserted
replaced
8855:dba528970aa5 | 8856:538bb632a2b6 |
---|---|
16 local iterators = require "util.iterators"; | 16 local iterators = require "util.iterators"; |
17 local jid_split = require "util.jid".split; | 17 local jid_split = require "util.jid".split; |
18 local jid_bare = require "util.jid".bare; | 18 local jid_bare = require "util.jid".bare; |
19 local jid_prep = require "util.jid".prep; | 19 local jid_prep = require "util.jid".prep; |
20 local jid_join = require "util.jid".join; | 20 local jid_join = require "util.jid".join; |
21 local jid_resource = require "util.jid".resource; | |
21 local st = require "util.stanza"; | 22 local st = require "util.stanza"; |
22 local base64 = require "util.encodings".base64; | 23 local base64 = require "util.encodings".base64; |
23 local md5 = require "util.hashes".md5; | 24 local md5 = require "util.hashes".md5; |
24 | 25 |
25 local log = module._log; | 26 local log = module._log; |
240 | 241 |
241 local whois = self:get_whois(); | 242 local whois = self:get_whois(); |
242 | 243 |
243 local actor_nick; | 244 local actor_nick; |
244 if actor then | 245 if actor then |
245 actor_nick = select(3, jid_split(self:get_occupant_jid(actor))); | 246 actor_nick = jid_resource(self:get_occupant_jid(actor)); |
246 end | 247 end |
247 | 248 |
248 local full_p, full_x; | 249 local full_p, full_x; |
249 local function get_full_p() | 250 local function get_full_p() |
250 if full_p == nil then | 251 if full_p == nil then |
561 orig_occupant:set_session(real_jid, stanza); | 562 orig_occupant:set_session(real_jid, stanza); |
562 else | 563 else |
563 log("debug", "session %s is changing from occupant %s to %s", real_jid, orig_occupant.nick, dest_occupant.nick); | 564 log("debug", "session %s is changing from occupant %s to %s", real_jid, orig_occupant.nick, dest_occupant.nick); |
564 local generated_unavail = st.presence {from = orig_occupant.nick, to = real_jid, type = "unavailable"}; | 565 local generated_unavail = st.presence {from = orig_occupant.nick, to = real_jid, type = "unavailable"}; |
565 orig_occupant:set_session(real_jid, generated_unavail); | 566 orig_occupant:set_session(real_jid, generated_unavail); |
566 dest_nick = select(3, jid_split(dest_occupant.nick)); | 567 dest_nick = jid_resource(dest_occupant.nick); |
567 if not is_first_dest_session then -- User is swapping into another pre-existing session | 568 if not is_first_dest_session then -- User is swapping into another pre-existing session |
568 log("debug", "session %s is swapping into multisession %s, showing it leave.", real_jid, dest_occupant.nick); | 569 log("debug", "session %s is swapping into multisession %s, showing it leave.", real_jid, dest_occupant.nick); |
569 -- Show the other session leaving | 570 -- Show the other session leaving |
570 local x = st.stanza("x", {xmlns = "http://jabber.org/protocol/muc#user";}); | 571 local x = st.stanza("x", {xmlns = "http://jabber.org/protocol/muc#user";}); |
571 add_item(x, self:get_affiliation(bare_jid), "none"); | 572 add_item(x, self:get_affiliation(bare_jid), "none"); |
916 if not item.attr.jid and item.attr.nick then -- COMPAT Workaround for Miranda sending 'nick' instead of 'jid' when changing affiliation | 917 if not item.attr.jid and item.attr.nick then -- COMPAT Workaround for Miranda sending 'nick' instead of 'jid' when changing affiliation |
917 local occupant = self:get_occupant_by_nick(self.jid.."/"..item.attr.nick); | 918 local occupant = self:get_occupant_by_nick(self.jid.."/"..item.attr.nick); |
918 if occupant then item.attr.jid = occupant.jid; end | 919 if occupant then item.attr.jid = occupant.jid; end |
919 elseif not item.attr.nick and item.attr.jid then | 920 elseif not item.attr.nick and item.attr.jid then |
920 local nick = self:get_occupant_jid(item.attr.jid); | 921 local nick = self:get_occupant_jid(item.attr.jid); |
921 if nick then item.attr.nick = select(3, jid_split(nick)); end | 922 if nick then item.attr.nick = jid_resource(nick); end |
922 end | 923 end |
923 local actor = stanza.attr.from; | 924 local actor = stanza.attr.from; |
924 local reason = item:get_child_text("reason"); | 925 local reason = item:get_child_text("reason"); |
925 local success, errtype, err | 926 local success, errtype, err |
926 if item.attr.affiliation and item.attr.jid and not item.attr.role then | 927 if item.attr.affiliation and item.attr.jid and not item.attr.role then |
968 if _rol == "none" then _rol = nil; end | 969 if _rol == "none" then _rol = nil; end |
969 local reply = st.reply(stanza):query("http://jabber.org/protocol/muc#admin"); | 970 local reply = st.reply(stanza):query("http://jabber.org/protocol/muc#admin"); |
970 -- TODO: whois check here? (though fully anonymous rooms are not supported) | 971 -- TODO: whois check here? (though fully anonymous rooms are not supported) |
971 for occupant_jid, occupant in self:each_occupant() do | 972 for occupant_jid, occupant in self:each_occupant() do |
972 if occupant.role == _rol then | 973 if occupant.role == _rol then |
973 local nick = select(3,jid_split(occupant_jid)); | 974 local nick = jid_resource(occupant_jid); |
974 self:build_item_list(occupant, reply, false, nick); | 975 self:build_item_list(occupant, reply, false, nick); |
975 end | 976 end |
976 end | 977 end |
977 origin.send(reply:up()); | 978 origin.send(reply:up()); |
978 return true; | 979 return true; |