Mercurial > prosody-hg
comparison plugins/muc/muc.lib.lua @ 9023:ce461a67d2cc
MUC: Fix to send status code 100 *only* to the joining (fixes #680)
What does `if can_see_real_jids(whois, occupant) then` do?
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Thu, 12 Jul 2018 01:50:06 +0200 |
| parents | 293ebfed71f7 |
| children | 43241e74bb19 |
comparison
equal
deleted
inserted
replaced
| 9022:293ebfed71f7 | 9023:ce461a67d2cc |
|---|---|
| 267 end | 267 end |
| 268 return anon_p, anon_x; | 268 return anon_p, anon_x; |
| 269 end | 269 end |
| 270 | 270 |
| 271 local self_p, self_x; | 271 local self_p, self_x; |
| 272 if can_see_real_jids(whois, occupant) then | 272 do |
| 273 self_p, self_x = get_full_p(); | |
| 274 else | |
| 275 -- Can always see your own full jids | 273 -- Can always see your own full jids |
| 276 -- But not allowed to see actor's | 274 -- But not allowed to see actor's |
| 277 self_x = st.clone(x.self or base_x); | 275 self_x = st.clone(x.self or base_x); |
| 278 self:build_item_list(occupant, self_x, false, nick, actor_nick, nil, reason); | 276 self:build_item_list(occupant, self_x, false, nick, actor_nick, nil, reason); |
| 279 self_p = st.clone(base_presence):add_child(self_x); | 277 self_p = st.clone(base_presence):add_child(self_x); |
| 601 end | 599 end |
| 602 end | 600 end |
| 603 | 601 |
| 604 if dest_occupant ~= nil then | 602 if dest_occupant ~= nil then |
| 605 dest_occupant:set_session(real_jid, stanza); | 603 dest_occupant:set_session(real_jid, stanza); |
| 606 local dest_x = st.stanza("x", {xmlns = "http://jabber.org/protocol/muc#user";}); | |
| 607 if orig_occupant == nil and self:get_whois() == "anyone" then | |
| 608 dest_x:tag("status", {code = "100"}):up(); | |
| 609 end | |
| 610 self:save_occupant(dest_occupant); | 604 self:save_occupant(dest_occupant); |
| 611 | 605 |
| 612 if orig_occupant == nil or muc_x then | 606 if orig_occupant == nil or muc_x then |
| 613 -- Send occupant list to newly joined or desynced user | 607 -- Send occupant list to newly joined or desynced user |
| 614 self:send_occupant_list(real_jid, function(nick, occupant) -- luacheck: ignore 212 | 608 self:send_occupant_list(real_jid, function(nick, occupant) -- luacheck: ignore 212 |
| 615 -- Don't include self | 609 -- Don't include self |
| 616 return occupant:get_presence(real_jid) == nil; | 610 return occupant:get_presence(real_jid) == nil; |
| 617 end) | 611 end) |
| 618 end | 612 end |
| 619 local self_x; | 613 local dest_x = st.stanza("x", {xmlns = "http://jabber.org/protocol/muc#user";}); |
| 614 local self_x = st.clone(dest_x); | |
| 615 if orig_occupant == nil and self:get_whois() == "anyone" then | |
| 616 self_x:tag("status", {code = "100"}):up(); | |
| 617 end | |
| 620 if nick_changed then | 618 if nick_changed then |
| 621 self_x = st.clone(dest_x); | |
| 622 self_x:tag("status", {code="210"}):up(); | 619 self_x:tag("status", {code="210"}):up(); |
| 623 end | 620 end |
| 624 self:publicise_occupant_status(dest_occupant, {base=dest_x,self=self_x}); | 621 self:publicise_occupant_status(dest_occupant, {base=dest_x,self=self_x}); |
| 625 | 622 |
| 626 if orig_occupant ~= nil and orig_occupant ~= dest_occupant and not is_last_orig_session then -- If user is swapping and wasn't last original session | 623 if orig_occupant ~= nil and orig_occupant ~= dest_occupant and not is_last_orig_session then -- If user is swapping and wasn't last original session |
