annotate mod_muc_restrict_status/mod_muc_restrict_status.lua @ 6562:5da6fb562df9 default tip

mod_unified_push: Fix push error handling (fixes #2000) Use the error object that send_iq() passes as an argument to it's reject callback instead of attempting and failing to do the parsing in the callback itself.
author kmq
date Mon, 06 Jul 2026 14:23:57 +0200
parents 52bd0ac397b5
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6315
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
1 module:depends"muc";
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
2
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
3 local restrict_by_default = module:get_option_boolean("muc_room_default_restrict_status", true);
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
4
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
5 local function should_restrict_status(room)
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
6 local restrict_status = room._data.restrict_status;
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
7 if restrict_status == nil then
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
8 restrict_status = restrict_by_default;
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
9 end
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
10 return restrict_status;
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
11 end
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
12
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
13 module:hook("muc-config-form", function(event)
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
14 local room, form = event.room, event.form;
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
15 table.insert(form, {
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
16 name = "{xmpp:prosody.im}muc#roomconfig_unaffiliated_status",
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
17 type = "boolean",
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
18 label = "Display status message from non-members",
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
19 value = not should_restrict_status(room),
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
20 });
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
21 end);
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
22
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
23 module:hook("muc-config-submitted", function(event)
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
24 local room, fields, changed = event.room, event.fields, event.changed;
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
25 local new_restrict_status = not fields["{xmpp:prosody.im}muc#roomconfig_unaffiliated_status"];
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
26 if new_restrict_status ~= should_restrict_status(room) then
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
27 if new_restrict_status == restrict_by_default then
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
28 room._data.restrict_status = nil;
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
29 else
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
30 room._data.restrict_status = new_restrict_status;
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
31 end
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
32 if type(changed) == "table" then
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
33 changed["{xmpp:prosody.im}muc#roomconfig_unaffiliated_status"] = true;
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
34 else
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
35 event.changed = true;
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
36 end
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
37 end
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
38 end);
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
39
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
40 module:hook("muc-disco#info", function (event)
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
41 local room, form, formdata = event.room, event.form, event.formdata;
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
42
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
43 local allow_unaffiliated_status = not should_restrict_status(room);
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
44 table.insert(form, {
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
45 name = "{xmpp:prosody.im}muc#roomconfig_unaffiliated_status",
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
46 type = "boolean",
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
47 });
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
48 formdata["{xmpp:prosody.im}muc#roomconfig_unaffiliated_status"] = allow_unaffiliated_status;
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
49 end);
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
50
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
51 local function filter_status_tags(tag)
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
52 if tag.name == "status" then
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
53 return nil;
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
54 end
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
55 return tag;
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
56 end
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
57
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
58 local function thehook(event)
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
59 local stanza = event.stanza;
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
60 if event.room:get_affiliation(stanza.attr.from) then return end
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
61 if should_restrict_status(event.room) then
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
62 stanza:maptags(filter_status_tags);
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
63 end
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
64 end
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
65
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
66 module:hook("muc-occupant-pre-join", thehook, 20);
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
67 module:hook("muc-occupant-pre-leave", thehook, 20);
52bd0ac397b5 mod_muc_restrict_status: create new module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff changeset
68 module:hook("muc-occupant-pre-change", thehook, 20);