Software / code / prosody
Annotate
plugins/muc/register.lib.lua @ 13556:d3649ae194ab
mod_s2s: Clone queued outgoing stanzas to prevent changes
This clone call was lost in 902d25cd0557
Affects e.g. presence broadcasts, where the same stanza is sent many
times while mutating the 'to' attribute.
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Sun, 10 Nov 2024 15:10:26 +0100 |
| parent | 13300:b73547cfd736 |
| child | 13871:9eee04a95a25 |
| rev | line source |
|---|---|
|
12977
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12029
diff
changeset
|
1 local jid_bare = require "prosody.util.jid".bare; |
|
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12029
diff
changeset
|
2 local jid_resource = require "prosody.util.jid".resource; |
|
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12029
diff
changeset
|
3 local resourceprep = require "prosody.util.encodings".stringprep.resourceprep; |
|
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12029
diff
changeset
|
4 local st = require "prosody.util.stanza"; |
|
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12029
diff
changeset
|
5 local dataforms = require "prosody.util.dataforms"; |
|
9240
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
6 |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
7 local allow_unaffiliated = module:get_option_boolean("allow_unaffiliated_register", false); |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
8 |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
9 local enforce_nick = module:get_option_boolean("enforce_registered_nickname", false); |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
10 |
|
11906
ba3344926e18
MUC: Add option to include form in registration query
Matthew Wild <mwild1@gmail.com>
parents:
11286
diff
changeset
|
11 -- Whether to include the current registration data as a dataform. Disabled |
|
ba3344926e18
MUC: Add option to include form in registration query
Matthew Wild <mwild1@gmail.com>
parents:
11286
diff
changeset
|
12 -- by default currently as it hasn't been widely tested with clients. |
|
ba3344926e18
MUC: Add option to include form in registration query
Matthew Wild <mwild1@gmail.com>
parents:
11286
diff
changeset
|
13 local include_reg_form = module:get_option_boolean("muc_registration_include_form", false); |
|
ba3344926e18
MUC: Add option to include form in registration query
Matthew Wild <mwild1@gmail.com>
parents:
11286
diff
changeset
|
14 |
|
9240
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
15 -- reserved_nicks[nick] = jid |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
16 local function get_reserved_nicks(room) |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
17 if room._reserved_nicks then |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
18 return room._reserved_nicks; |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
19 end |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
20 module:log("debug", "Refreshing reserved nicks..."); |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
21 local reserved_nicks = {}; |
|
10225
9bdd9b6bf362
MUC: Simplify nickname refresh loop
Kim Alvefur <zash@zash.se>
parents:
9298
diff
changeset
|
22 for jid, _, data in room:each_affiliation() do |
|
9240
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
23 local nick = data and data.reserved_nickname; |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
24 module:log("debug", "Refreshed for %s: %s", jid, nick); |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
25 if nick then |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
26 reserved_nicks[nick] = jid; |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
27 end |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
28 end |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
29 room._reserved_nicks = reserved_nicks; |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
30 return reserved_nicks; |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
31 end |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
32 |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
33 -- Returns the registered nick, if any, for a JID |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
34 -- Note: this is just the *nick* part, i.e. the resource of the in-room JID |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
35 local function get_registered_nick(room, jid) |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
36 local registered_data = room._affiliation_data[jid]; |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
37 if not registered_data then |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
38 return; |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
39 end |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
40 return registered_data.reserved_nickname; |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
41 end |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
42 |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
43 -- Returns the JID, if any, that registered a nick (not in-room JID) |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
44 local function get_registered_jid(room, nick) |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
45 local reserved_nicks = get_reserved_nicks(room); |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
46 return reserved_nicks[nick]; |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
47 end |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
48 |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
49 module:hook("muc-set-affiliation", function (event) |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
50 -- Clear reserved nick cache |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
51 event.room._reserved_nicks = nil; |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
52 end); |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
53 |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
54 module:hook("muc-disco#info", function (event) |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
55 event.reply:tag("feature", { var = "jabber:iq:register" }):up(); |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
56 end); |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
57 |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
58 local registration_form = dataforms.new { |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
59 { name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/protocol/muc#register" }, |
|
10373
51ea82f55322
MUC: Make nickname field in registration form required
Kim Alvefur <zash@zash.se>
parents:
10343
diff
changeset
|
60 { name = "muc#register_roomnick", type = "text-single", required = true, label = "Nickname"}, |
|
9240
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
61 }; |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
62 |
|
11286
336cba957c88
MUC: Allow modules to add to the room registration form, and handle the result
Matthew Wild <mwild1@gmail.com>
parents:
10794
diff
changeset
|
63 module:handle_items("muc-registration-field", function (event) |
|
336cba957c88
MUC: Allow modules to add to the room registration form, and handle the result
Matthew Wild <mwild1@gmail.com>
parents:
10794
diff
changeset
|
64 module:log("debug", "Adding MUC registration form field: %s", event.item.name); |
|
336cba957c88
MUC: Allow modules to add to the room registration form, and handle the result
Matthew Wild <mwild1@gmail.com>
parents:
10794
diff
changeset
|
65 table.insert(registration_form, event.item); |
|
336cba957c88
MUC: Allow modules to add to the room registration form, and handle the result
Matthew Wild <mwild1@gmail.com>
parents:
10794
diff
changeset
|
66 end, function (event) |
|
336cba957c88
MUC: Allow modules to add to the room registration form, and handle the result
Matthew Wild <mwild1@gmail.com>
parents:
10794
diff
changeset
|
67 module:log("debug", "Removing MUC registration form field: %s", event.item.name); |
|
336cba957c88
MUC: Allow modules to add to the room registration form, and handle the result
Matthew Wild <mwild1@gmail.com>
parents:
10794
diff
changeset
|
68 local removed_field_name = event.item.name; |
|
336cba957c88
MUC: Allow modules to add to the room registration form, and handle the result
Matthew Wild <mwild1@gmail.com>
parents:
10794
diff
changeset
|
69 for i, field in ipairs(registration_form) do |
|
336cba957c88
MUC: Allow modules to add to the room registration form, and handle the result
Matthew Wild <mwild1@gmail.com>
parents:
10794
diff
changeset
|
70 if field.name == removed_field_name then |
|
336cba957c88
MUC: Allow modules to add to the room registration form, and handle the result
Matthew Wild <mwild1@gmail.com>
parents:
10794
diff
changeset
|
71 table.remove(registration_form, i); |
|
336cba957c88
MUC: Allow modules to add to the room registration form, and handle the result
Matthew Wild <mwild1@gmail.com>
parents:
10794
diff
changeset
|
72 break; |
|
336cba957c88
MUC: Allow modules to add to the room registration form, and handle the result
Matthew Wild <mwild1@gmail.com>
parents:
10794
diff
changeset
|
73 end |
|
336cba957c88
MUC: Allow modules to add to the room registration form, and handle the result
Matthew Wild <mwild1@gmail.com>
parents:
10794
diff
changeset
|
74 end |
|
336cba957c88
MUC: Allow modules to add to the room registration form, and handle the result
Matthew Wild <mwild1@gmail.com>
parents:
10794
diff
changeset
|
75 end); |
|
336cba957c88
MUC: Allow modules to add to the room registration form, and handle the result
Matthew Wild <mwild1@gmail.com>
parents:
10794
diff
changeset
|
76 |
|
9240
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
77 local function enforce_nick_policy(event) |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
78 local origin, stanza = event.origin, event.stanza; |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
79 local room = assert(event.room); -- FIXME |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
80 if not room then return; end |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
81 |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
82 -- Check if the chosen nickname is reserved |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
83 local requested_nick = jid_resource(stanza.attr.to); |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
84 local reserved_by = get_registered_jid(room, requested_nick); |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
85 if reserved_by and reserved_by ~= jid_bare(stanza.attr.from) then |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
86 module:log("debug", "%s attempted to use nick %s reserved by %s", stanza.attr.from, requested_nick, reserved_by); |
|
10448
cbe524ed1a6a
MUC: Indicate origin of registration related errors
Kim Alvefur <zash@zash.se>
parents:
10373
diff
changeset
|
87 local reply = st.error_reply(stanza, "cancel", "conflict", nil, room.jid):up(); |
|
12029
631b2afa7bc1
MUC: Remove <{muc}x> tags in some errors
Kim Alvefur <zash@zash.se>
parents:
12028
diff
changeset
|
88 origin.send(reply); |
|
9240
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
89 return true; |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
90 end |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
91 |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
92 -- Check if the occupant has a reservation they must use |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
93 if enforce_nick then |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
94 local nick = get_registered_nick(room, jid_bare(stanza.attr.from)); |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
95 if nick then |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
96 if event.occupant then |
|
13300
b73547cfd736
muc.register: Clarify what's going on when enforcing nicknames
Kim Alvefur <zash@zash.se>
parents:
12977
diff
changeset
|
97 -- someone is joining, force their nickname to the registered one |
|
9240
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
98 event.occupant.nick = jid_bare(event.occupant.nick) .. "/" .. nick; |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
99 elseif event.dest_occupant.nick ~= jid_bare(event.dest_occupant.nick) .. "/" .. nick then |
|
13300
b73547cfd736
muc.register: Clarify what's going on when enforcing nicknames
Kim Alvefur <zash@zash.se>
parents:
12977
diff
changeset
|
100 -- someone is trying to change nickname to something other than their registered nickname, can't have that |
|
9240
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
101 module:log("debug", "Attempt by %s to join as %s, but their reserved nick is %s", stanza.attr.from, requested_nick, nick); |
|
10448
cbe524ed1a6a
MUC: Indicate origin of registration related errors
Kim Alvefur <zash@zash.se>
parents:
10373
diff
changeset
|
102 local reply = st.error_reply(stanza, "cancel", "not-acceptable", nil, room.jid):up(); |
|
12029
631b2afa7bc1
MUC: Remove <{muc}x> tags in some errors
Kim Alvefur <zash@zash.se>
parents:
12028
diff
changeset
|
103 origin.send(reply); |
|
9240
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
104 return true; |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
105 end |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
106 end |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
107 end |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
108 end |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
109 |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
110 module:hook("muc-occupant-pre-join", enforce_nick_policy); |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
111 module:hook("muc-occupant-pre-change", enforce_nick_policy); |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
112 |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
113 -- Discovering Reserved Room Nickname |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
114 -- http://xmpp.org/extensions/xep-0045.html#reservednick |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
115 module:hook("muc-disco#info/x-roomuser-item", function (event) |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
116 local nick = get_registered_nick(event.room, jid_bare(event.stanza.attr.from)); |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
117 if nick then |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
118 event.reply:tag("identity", { category = "conference", type = "text", name = nick }) |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
119 end |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
120 end); |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
121 |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
122 local function handle_register_iq(room, origin, stanza) |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
123 local user_jid = jid_bare(stanza.attr.from) |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
124 local affiliation = room:get_affiliation(user_jid); |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
125 if affiliation == "outcast" then |
|
12028
9ab202e942f5
MUC: Fix error origin JID in wrong argument position
Kim Alvefur <zash@zash.se>
parents:
11906
diff
changeset
|
126 origin.send(st.error_reply(stanza, "auth", "forbidden")); |
|
9240
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
127 return true; |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
128 elseif not (affiliation or allow_unaffiliated) then |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
129 origin.send(st.error_reply(stanza, "auth", "registration-required")); |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
130 return true; |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
131 end |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
132 local reply = st.reply(stanza); |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
133 local registered_nick = get_registered_nick(room, user_jid); |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
134 if stanza.attr.type == "get" then |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
135 reply:query("jabber:iq:register"); |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
136 if registered_nick then |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
137 reply:tag("registered"):up(); |
|
11906
ba3344926e18
MUC: Add option to include form in registration query
Matthew Wild <mwild1@gmail.com>
parents:
11286
diff
changeset
|
138 reply:tag("username"):text(registered_nick):up(); |
|
ba3344926e18
MUC: Add option to include form in registration query
Matthew Wild <mwild1@gmail.com>
parents:
11286
diff
changeset
|
139 if include_reg_form then |
|
ba3344926e18
MUC: Add option to include form in registration query
Matthew Wild <mwild1@gmail.com>
parents:
11286
diff
changeset
|
140 local aff_data = room:get_affiliation_data(user_jid); |
|
ba3344926e18
MUC: Add option to include form in registration query
Matthew Wild <mwild1@gmail.com>
parents:
11286
diff
changeset
|
141 if aff_data then |
|
ba3344926e18
MUC: Add option to include form in registration query
Matthew Wild <mwild1@gmail.com>
parents:
11286
diff
changeset
|
142 reply:add_child(registration_form:form(aff_data, "result")); |
|
ba3344926e18
MUC: Add option to include form in registration query
Matthew Wild <mwild1@gmail.com>
parents:
11286
diff
changeset
|
143 end |
|
ba3344926e18
MUC: Add option to include form in registration query
Matthew Wild <mwild1@gmail.com>
parents:
11286
diff
changeset
|
144 end |
|
9240
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
145 origin.send(reply); |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
146 return true; |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
147 end |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
148 reply:add_child(registration_form:form()); |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
149 else -- type == set -- handle registration form |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
150 local query = stanza.tags[1]; |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
151 if query:get_child("remove") then |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
152 -- Remove "member" affiliation, but preserve if any other |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
153 local new_affiliation = affiliation ~= "member" and affiliation; |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
154 local ok, err_type, err_condition = room:set_affiliation(true, user_jid, new_affiliation, nil, false); |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
155 if not ok then |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
156 origin.send(st.error_reply(stanza, err_type, err_condition)); |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
157 return true; |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
158 end |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
159 origin.send(reply); |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
160 return true; |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
161 end |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
162 local form_tag = query:get_child("x", "jabber:x:data"); |
|
10342
dab2a7a82170
MUC: Validate registration dataform more carefully
Kim Alvefur <zash@zash.se>
parents:
10225
diff
changeset
|
163 if not form_tag then |
|
dab2a7a82170
MUC: Validate registration dataform more carefully
Kim Alvefur <zash@zash.se>
parents:
10225
diff
changeset
|
164 origin.send(st.error_reply(stanza, "modify", "bad-request", "Missing dataform")); |
|
dab2a7a82170
MUC: Validate registration dataform more carefully
Kim Alvefur <zash@zash.se>
parents:
10225
diff
changeset
|
165 return true; |
|
dab2a7a82170
MUC: Validate registration dataform more carefully
Kim Alvefur <zash@zash.se>
parents:
10225
diff
changeset
|
166 end |
|
dab2a7a82170
MUC: Validate registration dataform more carefully
Kim Alvefur <zash@zash.se>
parents:
10225
diff
changeset
|
167 local form_type, err = dataforms.get_type(form_tag); |
|
dab2a7a82170
MUC: Validate registration dataform more carefully
Kim Alvefur <zash@zash.se>
parents:
10225
diff
changeset
|
168 if not form_type then |
|
dab2a7a82170
MUC: Validate registration dataform more carefully
Kim Alvefur <zash@zash.se>
parents:
10225
diff
changeset
|
169 origin.send(st.error_reply(stanza, "modify", "bad-request", "Error with form: "..err)); |
|
dab2a7a82170
MUC: Validate registration dataform more carefully
Kim Alvefur <zash@zash.se>
parents:
10225
diff
changeset
|
170 return true; |
|
dab2a7a82170
MUC: Validate registration dataform more carefully
Kim Alvefur <zash@zash.se>
parents:
10225
diff
changeset
|
171 elseif form_type ~= "http://jabber.org/protocol/muc#register" then |
|
dab2a7a82170
MUC: Validate registration dataform more carefully
Kim Alvefur <zash@zash.se>
parents:
10225
diff
changeset
|
172 origin.send(st.error_reply(stanza, "modify", "bad-request", "Error in form")); |
|
dab2a7a82170
MUC: Validate registration dataform more carefully
Kim Alvefur <zash@zash.se>
parents:
10225
diff
changeset
|
173 return true; |
|
dab2a7a82170
MUC: Validate registration dataform more carefully
Kim Alvefur <zash@zash.se>
parents:
10225
diff
changeset
|
174 end |
|
dab2a7a82170
MUC: Validate registration dataform more carefully
Kim Alvefur <zash@zash.se>
parents:
10225
diff
changeset
|
175 local reg_data = registration_form:data(form_tag); |
|
9240
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
176 if not reg_data then |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
177 origin.send(st.error_reply(stanza, "modify", "bad-request", "Error in form")); |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
178 return true; |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
179 end |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
180 -- Is the nickname valid? |
|
10794
4585fe53e21f
MUC: Enforce strict resourceprep when registering room nicknames
Kim Alvefur <zash@zash.se>
parents:
10448
diff
changeset
|
181 local desired_nick = resourceprep(reg_data["muc#register_roomnick"], true); |
|
9240
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
182 if not desired_nick then |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
183 origin.send(st.error_reply(stanza, "modify", "bad-request", "Invalid Nickname")); |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
184 return true; |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
185 end |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
186 -- Is the nickname currently in use by another user? |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
187 local current_occupant = room:get_occupant_by_nick(room.jid.."/"..desired_nick); |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
188 if current_occupant and current_occupant.bare_jid ~= user_jid then |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
189 origin.send(st.error_reply(stanza, "cancel", "conflict")); |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
190 return true; |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
191 end |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
192 -- Is the nickname currently reserved by another user? |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
193 local reserved_by = get_registered_jid(room, desired_nick); |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
194 if reserved_by and reserved_by ~= user_jid then |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
195 origin.send(st.error_reply(stanza, "cancel", "conflict")); |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
196 return true; |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
197 end |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
198 |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
199 if enforce_nick then |
|
9262
37b7cf3470f1
MUC: Move comment for clarity
Matthew Wild <mwild1@gmail.com>
parents:
9240
diff
changeset
|
200 -- Kick any sessions that are not using this nick before we register it |
|
9240
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
201 local required_room_nick = room.jid.."/"..desired_nick; |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
202 for room_nick, occupant in room:each_occupant() do |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
203 if occupant.bare_jid == user_jid and room_nick ~= required_room_nick then |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
204 room:set_role(true, room_nick, nil); -- Kick (TODO: would be nice to use 333 code) |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
205 end |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
206 end |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
207 end |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
208 |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
209 -- Checks passed, save the registration |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
210 if registered_nick ~= desired_nick then |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
211 local registration_data = { reserved_nickname = desired_nick }; |
|
11286
336cba957c88
MUC: Allow modules to add to the room registration form, and handle the result
Matthew Wild <mwild1@gmail.com>
parents:
10794
diff
changeset
|
212 module:fire_event("muc-registration-submitted", { |
|
336cba957c88
MUC: Allow modules to add to the room registration form, and handle the result
Matthew Wild <mwild1@gmail.com>
parents:
10794
diff
changeset
|
213 room = room; |
|
336cba957c88
MUC: Allow modules to add to the room registration form, and handle the result
Matthew Wild <mwild1@gmail.com>
parents:
10794
diff
changeset
|
214 origin = origin; |
|
336cba957c88
MUC: Allow modules to add to the room registration form, and handle the result
Matthew Wild <mwild1@gmail.com>
parents:
10794
diff
changeset
|
215 stanza = stanza; |
|
336cba957c88
MUC: Allow modules to add to the room registration form, and handle the result
Matthew Wild <mwild1@gmail.com>
parents:
10794
diff
changeset
|
216 submitted_data = reg_data; |
|
336cba957c88
MUC: Allow modules to add to the room registration form, and handle the result
Matthew Wild <mwild1@gmail.com>
parents:
10794
diff
changeset
|
217 affiliation_data = registration_data; |
|
336cba957c88
MUC: Allow modules to add to the room registration form, and handle the result
Matthew Wild <mwild1@gmail.com>
parents:
10794
diff
changeset
|
218 }); |
|
9298
2d71040a959f
MUC: If a user with an existing affiliation registers, preserve that affiliation (thanks jc)
Matthew Wild <mwild1@gmail.com>
parents:
9262
diff
changeset
|
219 local ok, err_type, err_condition = room:set_affiliation(true, user_jid, affiliation or "member", nil, registration_data); |
|
9240
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
220 if not ok then |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
221 origin.send(st.error_reply(stanza, err_type, err_condition)); |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
222 return true; |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
223 end |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
224 module:log("debug", "Saved nick registration for %s: %s", user_jid, desired_nick); |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
225 origin.send(reply); |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
226 return true; |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
227 end |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
228 end |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
229 origin.send(reply); |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
230 return true; |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
231 end |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
232 |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
233 return { |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
234 get_registered_nick = get_registered_nick; |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
235 get_registered_jid = get_registered_jid; |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
236 handle_register_iq = handle_register_iq; |
|
f9a83aca4421
MUC: Add support for registering with a MUC, including reserving a nickname as per XEP-0045
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
237 } |