Mercurial > prosody-hg
annotate plugins/muc/register.lib.lua @ 13946:f5e8ab42c708
mod_http_file_share: Check that files are still there with correct size
Failed uploads can leave behind unused slots. Files shouldn't change
size after they have been successfully uploaded, but might as well
double check it.
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Sat, 04 Dec 2021 18:56:51 +0100 |
| parents | 356c8ec22e9a |
| children |
| 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 |
|
13908
356c8ec22e9a
MUC: Add basic "GC3" participant (affiliation) list fetch
Matthew Wild <mwild1@gmail.com>
parents:
13907
diff
changeset
|
7 local gc3_mode = module:get_option_boolean("muc_enable_experimental_gc3", false); |
|
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
|
8 |
|
13908
356c8ec22e9a
MUC: Add basic "GC3" participant (affiliation) list fetch
Matthew Wild <mwild1@gmail.com>
parents:
13907
diff
changeset
|
9 local allow_unaffiliated = module:get_option_boolean("allow_unaffiliated_register", gc3_mode); |
|
356c8ec22e9a
MUC: Add basic "GC3" participant (affiliation) list fetch
Matthew Wild <mwild1@gmail.com>
parents:
13907
diff
changeset
|
10 local enforce_nick = module:get_option_boolean("enforce_registered_nickname", gc3_mode); |
|
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
|
11 |
|
11906
ba3344926e18
MUC: Add option to include form in registration query
Matthew Wild <mwild1@gmail.com>
parents:
11286
diff
changeset
|
12 -- 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
|
13 -- 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
|
14 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
|
15 |
|
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
|
16 -- 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
|
17 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
|
18 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
|
19 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
|
20 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
|
21 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
|
22 local reserved_nicks = {}; |
|
10225
9bdd9b6bf362
MUC: Simplify nickname refresh loop
Kim Alvefur <zash@zash.se>
parents:
9298
diff
changeset
|
23 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
|
24 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
|
25 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
|
26 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
|
27 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
|
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 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
|
30 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
|
31 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
|
32 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
|
33 |
|
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 -- 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
|
35 -- 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
|
36 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
|
37 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
|
38 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
|
39 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
|
40 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
|
41 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
|
42 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
|
43 |
|
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 -- 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
|
45 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
|
46 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
|
47 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
|
48 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
|
49 |
|
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 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
|
51 -- 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
|
52 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
|
53 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
|
54 |
|
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 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
|
56 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
|
57 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
|
58 |
|
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 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
|
60 { 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
|
61 { 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
|
62 }; |
|
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
|
63 |
|
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
|
64 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
|
65 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
|
66 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
|
67 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
|
68 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
|
69 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
|
70 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
|
71 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
|
72 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
|
73 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
|
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 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
|
77 |
|
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
|
78 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
|
79 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
|
80 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
|
81 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
|
82 |
|
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 -- 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
|
84 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
|
85 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
|
86 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
|
87 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
|
88 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
|
89 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
|
90 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
|
91 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
|
92 |
|
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 -- 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
|
94 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
|
95 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
|
96 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
|
97 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
|
98 -- 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
|
99 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
|
100 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
|
101 -- 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
|
102 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
|
103 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
|
104 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
|
105 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
|
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 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
|
110 |
|
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-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
|
112 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
|
113 |
|
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 -- 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
|
115 -- 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
|
116 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
|
117 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
|
118 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
|
119 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
|
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 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
|
122 |
|
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 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
|
124 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
|
125 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
|
126 if affiliation == "outcast" then |
|
12028
9ab202e942f5
MUC: Fix error origin JID in wrong argument position
Kim Alvefur <zash@zash.se>
parents:
11906
diff
changeset
|
127 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
|
128 return true; |
|
13907
827a4cfd3fad
MUC: Don't allow self-registration into members-only MUCs when unaffiliated registration enabled
Matthew Wild <mwild1@gmail.com>
parents:
13871
diff
changeset
|
129 elseif not affiliation then |
|
827a4cfd3fad
MUC: Don't allow self-registration into members-only MUCs when unaffiliated registration enabled
Matthew Wild <mwild1@gmail.com>
parents:
13871
diff
changeset
|
130 if room:get_members_only() then |
|
827a4cfd3fad
MUC: Don't allow self-registration into members-only MUCs when unaffiliated registration enabled
Matthew Wild <mwild1@gmail.com>
parents:
13871
diff
changeset
|
131 -- Never allow unaffiliated users to register their way into a members-only room |
|
827a4cfd3fad
MUC: Don't allow self-registration into members-only MUCs when unaffiliated registration enabled
Matthew Wild <mwild1@gmail.com>
parents:
13871
diff
changeset
|
132 origin.send(st.error_reply(stanza, "auth", "forbidden")); |
|
827a4cfd3fad
MUC: Don't allow self-registration into members-only MUCs when unaffiliated registration enabled
Matthew Wild <mwild1@gmail.com>
parents:
13871
diff
changeset
|
133 return true; |
|
827a4cfd3fad
MUC: Don't allow self-registration into members-only MUCs when unaffiliated registration enabled
Matthew Wild <mwild1@gmail.com>
parents:
13871
diff
changeset
|
134 elseif not allow_unaffiliated then |
|
827a4cfd3fad
MUC: Don't allow self-registration into members-only MUCs when unaffiliated registration enabled
Matthew Wild <mwild1@gmail.com>
parents:
13871
diff
changeset
|
135 -- Not members-only, but we're not permitting registration due to config |
|
827a4cfd3fad
MUC: Don't allow self-registration into members-only MUCs when unaffiliated registration enabled
Matthew Wild <mwild1@gmail.com>
parents:
13871
diff
changeset
|
136 origin.send(st.error_reply(stanza, "auth", "registration-required")); |
|
827a4cfd3fad
MUC: Don't allow self-registration into members-only MUCs when unaffiliated registration enabled
Matthew Wild <mwild1@gmail.com>
parents:
13871
diff
changeset
|
137 return true; |
|
827a4cfd3fad
MUC: Don't allow self-registration into members-only MUCs when unaffiliated registration enabled
Matthew Wild <mwild1@gmail.com>
parents:
13871
diff
changeset
|
138 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
|
139 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
|
140 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
|
141 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
|
142 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
|
143 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
|
144 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
|
145 reply:tag("registered"):up(); |
|
11906
ba3344926e18
MUC: Add option to include form in registration query
Matthew Wild <mwild1@gmail.com>
parents:
11286
diff
changeset
|
146 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
|
147 if include_reg_form then |
|
ba3344926e18
MUC: Add option to include form in registration query
Matthew Wild <mwild1@gmail.com>
parents:
11286
diff
changeset
|
148 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
|
149 if aff_data then |
|
ba3344926e18
MUC: Add option to include form in registration query
Matthew Wild <mwild1@gmail.com>
parents:
11286
diff
changeset
|
150 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
|
151 end |
|
ba3344926e18
MUC: Add option to include form in registration query
Matthew Wild <mwild1@gmail.com>
parents:
11286
diff
changeset
|
152 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
|
153 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
|
154 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
|
155 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
|
156 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
|
157 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
|
158 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
|
159 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
|
160 -- 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
|
161 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
|
162 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
|
163 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
|
164 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
|
165 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
|
166 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
|
167 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
|
168 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
|
169 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
|
170 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
|
171 if not form_tag 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", "Missing dataform")); |
|
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 form_type, err = dataforms.get_type(form_tag); |
|
dab2a7a82170
MUC: Validate registration dataform more carefully
Kim Alvefur <zash@zash.se>
parents:
10225
diff
changeset
|
176 if not form_type then |
|
dab2a7a82170
MUC: Validate registration dataform more carefully
Kim Alvefur <zash@zash.se>
parents:
10225
diff
changeset
|
177 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
|
178 return true; |
|
dab2a7a82170
MUC: Validate registration dataform more carefully
Kim Alvefur <zash@zash.se>
parents:
10225
diff
changeset
|
179 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
|
180 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
|
181 return true; |
|
dab2a7a82170
MUC: Validate registration dataform more carefully
Kim Alvefur <zash@zash.se>
parents:
10225
diff
changeset
|
182 end |
|
13871
9eee04a95a25
MUC: Fix nickname registration form error handling (fixes #1930)
Kim Alvefur <zash@zash.se>
parents:
13300
diff
changeset
|
183 local reg_data, form_err = registration_form:data(form_tag); |
|
9eee04a95a25
MUC: Fix nickname registration form error handling (fixes #1930)
Kim Alvefur <zash@zash.se>
parents:
13300
diff
changeset
|
184 if form_err then |
|
9eee04a95a25
MUC: Fix nickname registration form error handling (fixes #1930)
Kim Alvefur <zash@zash.se>
parents:
13300
diff
changeset
|
185 local errs = {}; |
|
9eee04a95a25
MUC: Fix nickname registration form error handling (fixes #1930)
Kim Alvefur <zash@zash.se>
parents:
13300
diff
changeset
|
186 for field, err in pairs(form_err) do |
|
9eee04a95a25
MUC: Fix nickname registration form error handling (fixes #1930)
Kim Alvefur <zash@zash.se>
parents:
13300
diff
changeset
|
187 table.insert(errs, field..": "..err); |
|
9eee04a95a25
MUC: Fix nickname registration form error handling (fixes #1930)
Kim Alvefur <zash@zash.se>
parents:
13300
diff
changeset
|
188 end |
|
9eee04a95a25
MUC: Fix nickname registration form error handling (fixes #1930)
Kim Alvefur <zash@zash.se>
parents:
13300
diff
changeset
|
189 origin.send(st.error_reply(stanza, "modify", "bad-request", "Error in form: "..table.concat(errs))); |
|
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
|
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 valid? |
|
10794
4585fe53e21f
MUC: Enforce strict resourceprep when registering room nicknames
Kim Alvefur <zash@zash.se>
parents:
10448
diff
changeset
|
193 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
|
194 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
|
195 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
|
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 -- 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
|
199 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
|
200 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
|
201 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
|
202 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
|
203 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
|
204 -- 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
|
205 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
|
206 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
|
207 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
|
208 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
|
209 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
|
210 |
|
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 if enforce_nick then |
|
9262
37b7cf3470f1
MUC: Move comment for clarity
Matthew Wild <mwild1@gmail.com>
parents:
9240
diff
changeset
|
212 -- 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
|
213 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
|
214 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
|
215 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
|
216 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
|
217 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
|
218 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
|
219 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
|
220 |
|
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 -- 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
|
222 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
|
223 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
|
224 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
|
225 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
|
226 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
|
227 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
|
228 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
|
229 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
|
230 }); |
|
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
|
231 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
|
232 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
|
233 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
|
234 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
|
235 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
|
236 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
|
237 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
|
238 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
|
239 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
|
240 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
|
241 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
|
242 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
|
243 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
|
244 |
|
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
|
245 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
|
246 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
|
247 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
|
248 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
|
249 } |
