Mercurial > prosody-hg
annotate plugins/mod_register.lua @ 8706:e2919978673e
net.http: Fix parameter order to http request callbacks
Commit e3b9dc9dd940 changed the parameter order in 2013, but did not update the names of the parameters in the callback function. Due to this inconsistency, 12df41a5a4b1 accidentally reversed the order when fixing the variable names without fixing where they are used.
Additionally the documentation was incorrect (since 2013), and this has also now been fixed.
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Wed, 04 Apr 2018 18:27:44 +0100 |
| parents | ba9cd8447578 |
| children | 4796fdcb7146 |
| rev | line source |
|---|---|
|
1523
841d61be198f
Remove version number from copyright headers
Matthew Wild <mwild1@gmail.com>
parents:
1189
diff
changeset
|
1 -- Prosody IM |
|
2923
b7049746bd29
Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents:
2448
diff
changeset
|
2 -- Copyright (C) 2008-2010 Matthew Wild |
|
b7049746bd29
Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents:
2448
diff
changeset
|
3 -- Copyright (C) 2008-2010 Waqas Hussain |
|
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5763
diff
changeset
|
4 -- |
| 758 | 5 -- This project is MIT/X11 licensed. Please see the |
| 6 -- COPYING file in the source package for more information. | |
|
519
cccd610a0ef9
Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents:
438
diff
changeset
|
7 -- |
|
cccd610a0ef9
Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents:
438
diff
changeset
|
8 |
|
cccd610a0ef9
Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents:
438
diff
changeset
|
9 |
|
60
44800be871f5
User registration, etc (jabber:iq:register)
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
10 local st = require "util.stanza"; |
|
4398
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
11 local dataform_new = require "util.dataforms".new; |
|
60
44800be871f5
User registration, etc (jabber:iq:register)
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
12 local usermanager_user_exists = require "core.usermanager".user_exists; |
|
44800be871f5
User registration, etc (jabber:iq:register)
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
13 local usermanager_create_user = require "core.usermanager".create_user; |
|
2935
4e4d0d899d9d
mod_register: Use set_password to set passwords instead of create_user.
Waqas Hussain <waqas20@gmail.com>
parents:
2923
diff
changeset
|
14 local usermanager_set_password = require "core.usermanager".set_password; |
|
3996
7f35b292531b
mod_register: Change to use new delete_user auth provider method
Matthew Wild <mwild1@gmail.com>
parents:
3995
diff
changeset
|
15 local usermanager_delete_user = require "core.usermanager".delete_user; |
|
927
cc180d25dbeb
Fixed: mod_register: Node prepping was not being applied to usernames (part of issue #57)
Waqas Hussain <waqas20@gmail.com>
parents:
926
diff
changeset
|
16 local nodeprep = require "util.encodings".stringprep.nodeprep; |
|
3995
e504b06492c6
mod_register: Add registration_compat config option to allow account remove requests addressed to='host' (defaults to true)
Matthew Wild <mwild1@gmail.com>
parents:
3540
diff
changeset
|
17 local jid_bare = require "util.jid".bare; |
|
7025
236e8d1ee96c
mod_register: Switch to using util.throttle for limiting registrations per ip per time
Kim Alvefur <zash@zash.se>
parents:
7018
diff
changeset
|
18 local create_throttle = require "util.throttle".create; |
|
7026
f0dc5cc11d0e
mod_register: Use util.cache to limit the number of per-ip throttles kept
Kim Alvefur <zash@zash.se>
parents:
7025
diff
changeset
|
19 local new_cache = require "util.cache".new; |
|
3995
e504b06492c6
mod_register: Add registration_compat config option to allow account remove requests addressed to='host' (defaults to true)
Matthew Wild <mwild1@gmail.com>
parents:
3540
diff
changeset
|
20 |
|
e504b06492c6
mod_register: Add registration_compat config option to allow account remove requests addressed to='host' (defaults to true)
Matthew Wild <mwild1@gmail.com>
parents:
3540
diff
changeset
|
21 local compat = module:get_option_boolean("registration_compat", true); |
|
4270
d2d47fde9811
mod_register: Change the default for 'allow_registration' from true to false, most users shouldn't be affected as allow_registration is already explicitly set in the default config file.
Matthew Wild <mwild1@gmail.com>
parents:
4269
diff
changeset
|
22 local allow_registration = module:get_option_boolean("allow_registration", false); |
|
4398
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
23 local additional_fields = module:get_option("additional_registration_fields", {}); |
|
7916
72b6d5ab4137
mod_register: Require encryption before registration if c2s_require_encryption is set (fixes #595)
Kim Alvefur <zash@zash.se>
parents:
5637
diff
changeset
|
24 local require_encryption = module:get_option("c2s_require_encryption") or module:get_option("require_encryption"); |
|
4398
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
25 |
|
5500
eeea0eb2602a
mod_auth_internal_hashed, mod_auth_internal_plain, mod_privacy, mod_private, mod_register, mod_vcard, mod_muc: Use module:open_store()
Kim Alvefur <zash@zash.se>
parents:
5371
diff
changeset
|
26 local account_details = module:open_store("account_details"); |
|
eeea0eb2602a
mod_auth_internal_hashed, mod_auth_internal_plain, mod_privacy, mod_private, mod_register, mod_vcard, mod_muc: Use module:open_store()
Kim Alvefur <zash@zash.se>
parents:
5371
diff
changeset
|
27 |
|
4398
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
28 local field_map = { |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
29 username = { name = "username", type = "text-single", label = "Username", required = true }; |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
30 password = { name = "password", type = "text-private", label = "Password", required = true }; |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
31 nick = { name = "nick", type = "text-single", label = "Nickname" }; |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
32 name = { name = "name", type = "text-single", label = "Full Name" }; |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
33 first = { name = "first", type = "text-single", label = "Given Name" }; |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
34 last = { name = "last", type = "text-single", label = "Family Name" }; |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
35 email = { name = "email", type = "text-single", label = "Email" }; |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
36 address = { name = "address", type = "text-single", label = "Street" }; |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
37 city = { name = "city", type = "text-single", label = "City" }; |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
38 state = { name = "state", type = "text-single", label = "State" }; |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
39 zip = { name = "zip", type = "text-single", label = "Postal code" }; |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
40 phone = { name = "phone", type = "text-single", label = "Telephone number" }; |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
41 url = { name = "url", type = "text-single", label = "Webpage" }; |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
42 date = { name = "date", type = "text-single", label = "Birth date" }; |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
43 }; |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
44 |
|
7812
2bc339352dcd
mod_register: Allow 'title' and 'instructions' fields to be customized
Kim Alvefur <zash@zash.se>
parents:
7754
diff
changeset
|
45 local title = module:get_option_string("registration_title", |
|
2bc339352dcd
mod_register: Allow 'title' and 'instructions' fields to be customized
Kim Alvefur <zash@zash.se>
parents:
7754
diff
changeset
|
46 "Creating a new account"); |
|
2bc339352dcd
mod_register: Allow 'title' and 'instructions' fields to be customized
Kim Alvefur <zash@zash.se>
parents:
7754
diff
changeset
|
47 local instructions = module:get_option_string("registration_instructions", |
|
2bc339352dcd
mod_register: Allow 'title' and 'instructions' fields to be customized
Kim Alvefur <zash@zash.se>
parents:
7754
diff
changeset
|
48 "Choose a username and password for use with this service."); |
|
2bc339352dcd
mod_register: Allow 'title' and 'instructions' fields to be customized
Kim Alvefur <zash@zash.se>
parents:
7754
diff
changeset
|
49 |
|
4398
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
50 local registration_form = dataform_new{ |
|
7812
2bc339352dcd
mod_register: Allow 'title' and 'instructions' fields to be customized
Kim Alvefur <zash@zash.se>
parents:
7754
diff
changeset
|
51 title = title; |
|
2bc339352dcd
mod_register: Allow 'title' and 'instructions' fields to be customized
Kim Alvefur <zash@zash.se>
parents:
7754
diff
changeset
|
52 instructions = instructions; |
|
4398
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
53 |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
54 field_map.username; |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
55 field_map.password; |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
56 }; |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
57 |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
58 local registration_query = st.stanza("query", {xmlns = "jabber:iq:register"}) |
|
7812
2bc339352dcd
mod_register: Allow 'title' and 'instructions' fields to be customized
Kim Alvefur <zash@zash.se>
parents:
7754
diff
changeset
|
59 :tag("instructions"):text(instructions):up() |
|
4398
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
60 :tag("username"):up() |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
61 :tag("password"):up(); |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
62 |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
63 for _, field in ipairs(additional_fields) do |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
64 if type(field) == "table" then |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
65 registration_form[#registration_form + 1] = field; |
|
7816
2624f4ee34a2
mod_register: Fix syntax errors
Kim Alvefur <zash@zash.se>
parents:
7815
diff
changeset
|
66 elseif field_map[field] or field_map[field:sub(1, -2)] then |
|
4398
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
67 if field:match("%+$") then |
|
7814
2120d71b0d56
mod_register: Strip '+' char from field names without using length
Kim Alvefur <zash@zash.se>
parents:
7812
diff
changeset
|
68 field = field:sub(1, -2); |
|
4398
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
69 field_map[field].required = true; |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
70 end |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
71 |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
72 registration_form[#registration_form + 1] = field_map[field]; |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
73 registration_query:tag(field):up(); |
|
7815
f8d25a2e80ea
mod_register: Verify that fields are known to prevent traceback
Kim Alvefur <zash@zash.se>
parents:
7814
diff
changeset
|
74 else |
|
f8d25a2e80ea
mod_register: Verify that fields are known to prevent traceback
Kim Alvefur <zash@zash.se>
parents:
7814
diff
changeset
|
75 module:log("error", "Unknown field %q", field); |
|
4398
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
76 end |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
77 end |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
78 registration_query:add_child(registration_form:form()); |
|
60
44800be871f5
User registration, etc (jabber:iq:register)
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
79 |
|
541
3521e0851c9e
Change modules to use the new add_feature module API method.
Waqas Hussain <waqas20@gmail.com>
parents:
519
diff
changeset
|
80 module:add_feature("jabber:iq:register"); |
|
421
63be85693710
Modules now sending disco replies
Waqas Hussain <waqas20@gmail.com>
parents:
386
diff
changeset
|
81 |
|
4268
c249f10eb9bb
Advertise in-band registration support.
Glenn Maynard <glenn@zewt.org>
parents:
3997
diff
changeset
|
82 local register_stream_feature = st.stanza("register", {xmlns="http://jabber.org/features/iq-register"}):up(); |
|
c249f10eb9bb
Advertise in-band registration support.
Glenn Maynard <glenn@zewt.org>
parents:
3997
diff
changeset
|
83 module:hook("stream-features", function(event) |
| 5707 | 84 local session, features = event.origin, event.features; |
|
4268
c249f10eb9bb
Advertise in-band registration support.
Glenn Maynard <glenn@zewt.org>
parents:
3997
diff
changeset
|
85 |
|
c249f10eb9bb
Advertise in-band registration support.
Glenn Maynard <glenn@zewt.org>
parents:
3997
diff
changeset
|
86 -- Advertise registration to unauthorized clients only. |
|
7916
72b6d5ab4137
mod_register: Require encryption before registration if c2s_require_encryption is set (fixes #595)
Kim Alvefur <zash@zash.se>
parents:
5637
diff
changeset
|
87 if not(allow_registration) or session.type ~= "c2s_unauthed" or (require_encryption and not session.secure) then |
|
4268
c249f10eb9bb
Advertise in-band registration support.
Glenn Maynard <glenn@zewt.org>
parents:
3997
diff
changeset
|
88 return |
|
c249f10eb9bb
Advertise in-band registration support.
Glenn Maynard <glenn@zewt.org>
parents:
3997
diff
changeset
|
89 end |
|
c249f10eb9bb
Advertise in-band registration support.
Glenn Maynard <glenn@zewt.org>
parents:
3997
diff
changeset
|
90 |
|
c249f10eb9bb
Advertise in-band registration support.
Glenn Maynard <glenn@zewt.org>
parents:
3997
diff
changeset
|
91 features:add_child(register_stream_feature); |
|
c249f10eb9bb
Advertise in-band registration support.
Glenn Maynard <glenn@zewt.org>
parents:
3997
diff
changeset
|
92 end); |
|
c249f10eb9bb
Advertise in-band registration support.
Glenn Maynard <glenn@zewt.org>
parents:
3997
diff
changeset
|
93 |
|
8194
ba9cd8447578
mod_register: Add comments saying which section handles password change, account deletion and which is in-band registration
Kim Alvefur <zash@zash.se>
parents:
8192
diff
changeset
|
94 -- Password change and account deletion handler |
|
3995
e504b06492c6
mod_register: Add registration_compat config option to allow account remove requests addressed to='host' (defaults to true)
Matthew Wild <mwild1@gmail.com>
parents:
3540
diff
changeset
|
95 local function handle_registration_stanza(event) |
|
3529
3f9cc12308aa
mod_register: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3394
diff
changeset
|
96 local session, stanza = event.origin, event.stanza; |
|
7017
ff734a602886
mod_register: Use session log instance to ease indentification
Kim Alvefur <zash@zash.se>
parents:
5776
diff
changeset
|
97 local log = session.log or module._log; |
|
3529
3f9cc12308aa
mod_register: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3394
diff
changeset
|
98 |
|
3f9cc12308aa
mod_register: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3394
diff
changeset
|
99 local query = stanza.tags[1]; |
|
3f9cc12308aa
mod_register: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3394
diff
changeset
|
100 if stanza.attr.type == "get" then |
|
3f9cc12308aa
mod_register: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3394
diff
changeset
|
101 local reply = st.reply(stanza); |
|
3f9cc12308aa
mod_register: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3394
diff
changeset
|
102 reply:tag("query", {xmlns = "jabber:iq:register"}) |
|
3f9cc12308aa
mod_register: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3394
diff
changeset
|
103 :tag("registered"):up() |
|
3f9cc12308aa
mod_register: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3394
diff
changeset
|
104 :tag("username"):text(session.username):up() |
|
3f9cc12308aa
mod_register: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3394
diff
changeset
|
105 :tag("password"):up(); |
|
3f9cc12308aa
mod_register: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3394
diff
changeset
|
106 session.send(reply); |
|
3f9cc12308aa
mod_register: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3394
diff
changeset
|
107 else -- stanza.attr.type == "set" |
|
3f9cc12308aa
mod_register: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3394
diff
changeset
|
108 if query.tags[1] and query.tags[1].name == "remove" then |
|
3f9cc12308aa
mod_register: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3394
diff
changeset
|
109 local username, host = session.username, session.host; |
|
5098
fca8b5946f6f
mod_register: Hijack the session close call to send the final iq reply when deleting
Kim Alvefur <zash@zash.se>
parents:
5096
diff
changeset
|
110 |
|
7018
5c3d4254d415
mod_register: Add comment explaining the workaround for replying when the account is being deleted
Kim Alvefur <zash@zash.se>
parents:
7017
diff
changeset
|
111 -- This one weird trick sends a reply to this stanza before the user is deleted |
|
5098
fca8b5946f6f
mod_register: Hijack the session close call to send the final iq reply when deleting
Kim Alvefur <zash@zash.se>
parents:
5096
diff
changeset
|
112 local old_session_close = session.close; |
|
7711
c8130995d4d1
mod_register: Rename session reference in wrapped close method [luacheck]
Kim Alvefur <zash@zash.se>
parents:
7710
diff
changeset
|
113 session.close = function(self, ...) |
|
c8130995d4d1
mod_register: Rename session reference in wrapped close method [luacheck]
Kim Alvefur <zash@zash.se>
parents:
7710
diff
changeset
|
114 self.send(st.reply(stanza)); |
|
c8130995d4d1
mod_register: Rename session reference in wrapped close method [luacheck]
Kim Alvefur <zash@zash.se>
parents:
7710
diff
changeset
|
115 return old_session_close(self, ...); |
|
5098
fca8b5946f6f
mod_register: Hijack the session close call to send the final iq reply when deleting
Kim Alvefur <zash@zash.se>
parents:
5096
diff
changeset
|
116 end |
|
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5763
diff
changeset
|
117 |
|
3996
7f35b292531b
mod_register: Change to use new delete_user auth provider method
Matthew Wild <mwild1@gmail.com>
parents:
3995
diff
changeset
|
118 local ok, err = usermanager_delete_user(username, host); |
|
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5763
diff
changeset
|
119 |
|
3996
7f35b292531b
mod_register: Change to use new delete_user auth provider method
Matthew Wild <mwild1@gmail.com>
parents:
3995
diff
changeset
|
120 if not ok then |
|
7017
ff734a602886
mod_register: Use session log instance to ease indentification
Kim Alvefur <zash@zash.se>
parents:
5776
diff
changeset
|
121 log("debug", "Removing user account %s@%s failed: %s", username, host, err); |
|
5098
fca8b5946f6f
mod_register: Hijack the session close call to send the final iq reply when deleting
Kim Alvefur <zash@zash.se>
parents:
5096
diff
changeset
|
122 session.close = old_session_close; |
|
3996
7f35b292531b
mod_register: Change to use new delete_user auth provider method
Matthew Wild <mwild1@gmail.com>
parents:
3995
diff
changeset
|
123 session.send(st.error_reply(stanza, "cancel", "service-unavailable", err)); |
|
7f35b292531b
mod_register: Change to use new delete_user auth provider method
Matthew Wild <mwild1@gmail.com>
parents:
3995
diff
changeset
|
124 return true; |
|
7f35b292531b
mod_register: Change to use new delete_user auth provider method
Matthew Wild <mwild1@gmail.com>
parents:
3995
diff
changeset
|
125 end |
|
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5763
diff
changeset
|
126 |
|
7017
ff734a602886
mod_register: Use session log instance to ease indentification
Kim Alvefur <zash@zash.se>
parents:
5776
diff
changeset
|
127 log("info", "User removed their account: %s@%s", username, host); |
|
3529
3f9cc12308aa
mod_register: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3394
diff
changeset
|
128 module:fire_event("user-deregistered", { username = username, host = host, source = "mod_register", session = session }); |
|
3f9cc12308aa
mod_register: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3394
diff
changeset
|
129 else |
|
5637
991b47778bf3
mod_register: get_child_text()!
Kim Alvefur <zash@zash.se>
parents:
5500
diff
changeset
|
130 local username = nodeprep(query:get_child_text("username")); |
|
991b47778bf3
mod_register: get_child_text()!
Kim Alvefur <zash@zash.se>
parents:
5500
diff
changeset
|
131 local password = query:get_child_text("password"); |
|
3529
3f9cc12308aa
mod_register: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3394
diff
changeset
|
132 if username and password then |
|
3f9cc12308aa
mod_register: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3394
diff
changeset
|
133 if username == session.username then |
|
8192
4354f556c5db
core.usermanager, various modules: Disconnect other resources on password change (thanks waqas) (fixes #512)
Kim Alvefur <zash@zash.se>
parents:
8183
diff
changeset
|
134 if usermanager_set_password(username, password, session.host, session.resource) then |
|
3529
3f9cc12308aa
mod_register: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3394
diff
changeset
|
135 session.send(st.reply(stanza)); |
|
60
44800be871f5
User registration, etc (jabber:iq:register)
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
136 else |
|
3529
3f9cc12308aa
mod_register: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3394
diff
changeset
|
137 -- TODO unable to write file, file may be locked, etc, what's the correct error? |
|
3f9cc12308aa
mod_register: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3394
diff
changeset
|
138 session.send(st.error_reply(stanza, "wait", "internal-server-error")); |
|
60
44800be871f5
User registration, etc (jabber:iq:register)
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
139 end |
|
44800be871f5
User registration, etc (jabber:iq:register)
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
140 else |
|
311
513bd52e8e19
Fixed mod_register to use session.send for sending stanzas
Waqas Hussain <waqas20@gmail.com>
parents:
85
diff
changeset
|
141 session.send(st.error_reply(stanza, "modify", "bad-request")); |
|
60
44800be871f5
User registration, etc (jabber:iq:register)
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
142 end |
|
3529
3f9cc12308aa
mod_register: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3394
diff
changeset
|
143 else |
|
3f9cc12308aa
mod_register: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3394
diff
changeset
|
144 session.send(st.error_reply(stanza, "modify", "bad-request")); |
|
60
44800be871f5
User registration, etc (jabber:iq:register)
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
145 end |
|
44800be871f5
User registration, etc (jabber:iq:register)
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
146 end |
|
3529
3f9cc12308aa
mod_register: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3394
diff
changeset
|
147 end |
|
3f9cc12308aa
mod_register: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3394
diff
changeset
|
148 return true; |
|
3995
e504b06492c6
mod_register: Add registration_compat config option to allow account remove requests addressed to='host' (defaults to true)
Matthew Wild <mwild1@gmail.com>
parents:
3540
diff
changeset
|
149 end |
|
e504b06492c6
mod_register: Add registration_compat config option to allow account remove requests addressed to='host' (defaults to true)
Matthew Wild <mwild1@gmail.com>
parents:
3540
diff
changeset
|
150 |
|
e504b06492c6
mod_register: Add registration_compat config option to allow account remove requests addressed to='host' (defaults to true)
Matthew Wild <mwild1@gmail.com>
parents:
3540
diff
changeset
|
151 module:hook("iq/self/jabber:iq:register:query", handle_registration_stanza); |
|
e504b06492c6
mod_register: Add registration_compat config option to allow account remove requests addressed to='host' (defaults to true)
Matthew Wild <mwild1@gmail.com>
parents:
3540
diff
changeset
|
152 if compat then |
|
e504b06492c6
mod_register: Add registration_compat config option to allow account remove requests addressed to='host' (defaults to true)
Matthew Wild <mwild1@gmail.com>
parents:
3540
diff
changeset
|
153 module:hook("iq/host/jabber:iq:register:query", function (event) |
|
e504b06492c6
mod_register: Add registration_compat config option to allow account remove requests addressed to='host' (defaults to true)
Matthew Wild <mwild1@gmail.com>
parents:
3540
diff
changeset
|
154 local session, stanza = event.origin, event.stanza; |
|
e504b06492c6
mod_register: Add registration_compat config option to allow account remove requests addressed to='host' (defaults to true)
Matthew Wild <mwild1@gmail.com>
parents:
3540
diff
changeset
|
155 if session.type == "c2s" and jid_bare(stanza.attr.to) == session.host then |
|
e504b06492c6
mod_register: Add registration_compat config option to allow account remove requests addressed to='host' (defaults to true)
Matthew Wild <mwild1@gmail.com>
parents:
3540
diff
changeset
|
156 return handle_registration_stanza(event); |
|
e504b06492c6
mod_register: Add registration_compat config option to allow account remove requests addressed to='host' (defaults to true)
Matthew Wild <mwild1@gmail.com>
parents:
3540
diff
changeset
|
157 end |
|
e504b06492c6
mod_register: Add registration_compat config option to allow account remove requests addressed to='host' (defaults to true)
Matthew Wild <mwild1@gmail.com>
parents:
3540
diff
changeset
|
158 end); |
|
e504b06492c6
mod_register: Add registration_compat config option to allow account remove requests addressed to='host' (defaults to true)
Matthew Wild <mwild1@gmail.com>
parents:
3540
diff
changeset
|
159 end |
|
60
44800be871f5
User registration, etc (jabber:iq:register)
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
160 |
|
4398
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
161 local function parse_response(query) |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
162 local form = query:get_child("x", "jabber:x:data"); |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
163 if form then |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
164 return registration_form:data(form); |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
165 else |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
166 local data = {}; |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
167 local errors = {}; |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
168 for _, field in ipairs(registration_form) do |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
169 local name, required = field.name, field.required; |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
170 if field_map[name] then |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
171 data[name] = query:get_child_text(name); |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
172 if (not data[name] or #data[name] == 0) and required then |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
173 errors[name] = "Required value missing"; |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
174 end |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
175 end |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
176 end |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
177 if next(errors) then |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
178 return data, errors; |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
179 end |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
180 return data; |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
181 end |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
182 end |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
183 |
|
5763
0e52f1d5ca71
mod_register: Use more specific get_option variants
Kim Alvefur <zash@zash.se>
parents:
5707
diff
changeset
|
184 local min_seconds_between_registrations = module:get_option_number("min_seconds_between_registrations"); |
|
0e52f1d5ca71
mod_register: Use more specific get_option variants
Kim Alvefur <zash@zash.se>
parents:
5707
diff
changeset
|
185 local whitelist_only = module:get_option_boolean("whitelist_registration_only"); |
|
8183
49a682d6b427
mod_register: Add ::1 to the default registration_whitelist.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
8070
diff
changeset
|
186 local whitelisted_ips = module:get_option_set("registration_whitelist", { "127.0.0.1", "::1" })._items; |
|
5763
0e52f1d5ca71
mod_register: Use more specific get_option variants
Kim Alvefur <zash@zash.se>
parents:
5707
diff
changeset
|
187 local blacklisted_ips = module:get_option_set("registration_blacklist", {})._items; |
|
690
e901a0709005
Added rate limiting to in-band registration, and added IP [black/white]lists
Matthew Wild <mwild1@gmail.com>
parents:
665
diff
changeset
|
188 |
|
7025
236e8d1ee96c
mod_register: Switch to using util.throttle for limiting registrations per ip per time
Kim Alvefur <zash@zash.se>
parents:
7018
diff
changeset
|
189 local throttle_max = module:get_option_number("registration_throttle_max", min_seconds_between_registrations and 1); |
|
236e8d1ee96c
mod_register: Switch to using util.throttle for limiting registrations per ip per time
Kim Alvefur <zash@zash.se>
parents:
7018
diff
changeset
|
190 local throttle_period = module:get_option_number("registration_throttle_period", min_seconds_between_registrations); |
|
7026
f0dc5cc11d0e
mod_register: Use util.cache to limit the number of per-ip throttles kept
Kim Alvefur <zash@zash.se>
parents:
7025
diff
changeset
|
191 local throttle_cache_size = module:get_option_number("registration_throttle_cache_size", 100); |
| 7037 | 192 local blacklist_overflow = module:get_option_boolean("blacklist_on_registration_throttle_overload", false); |
|
690
e901a0709005
Added rate limiting to in-band registration, and added IP [black/white]lists
Matthew Wild <mwild1@gmail.com>
parents:
665
diff
changeset
|
193 |
|
7027
77d838ba91c6
mod_register: Support for blacklisting ips that are still over limit when they get pushed out of the cache
Kim Alvefur <zash@zash.se>
parents:
7026
diff
changeset
|
194 local throttle_cache = new_cache(throttle_cache_size, blacklist_overflow and function (ip, throttle) |
|
77d838ba91c6
mod_register: Support for blacklisting ips that are still over limit when they get pushed out of the cache
Kim Alvefur <zash@zash.se>
parents:
7026
diff
changeset
|
195 if not throttle:peek() then |
|
77d838ba91c6
mod_register: Support for blacklisting ips that are still over limit when they get pushed out of the cache
Kim Alvefur <zash@zash.se>
parents:
7026
diff
changeset
|
196 module:log("info", "Adding ip %s to registration blacklist", ip); |
|
77d838ba91c6
mod_register: Support for blacklisting ips that are still over limit when they get pushed out of the cache
Kim Alvefur <zash@zash.se>
parents:
7026
diff
changeset
|
197 blacklisted_ips[ip] = true; |
|
77d838ba91c6
mod_register: Support for blacklisting ips that are still over limit when they get pushed out of the cache
Kim Alvefur <zash@zash.se>
parents:
7026
diff
changeset
|
198 end |
|
7293
c4af754d1e1b
mod_register: Make sure only an on_evict function or nil is passed to util.cache
Kim Alvefur <zash@zash.se>
parents:
7037
diff
changeset
|
199 end or nil); |
|
7025
236e8d1ee96c
mod_register: Switch to using util.throttle for limiting registrations per ip per time
Kim Alvefur <zash@zash.se>
parents:
7018
diff
changeset
|
200 |
|
236e8d1ee96c
mod_register: Switch to using util.throttle for limiting registrations per ip per time
Kim Alvefur <zash@zash.se>
parents:
7018
diff
changeset
|
201 local function check_throttle(ip) |
|
236e8d1ee96c
mod_register: Switch to using util.throttle for limiting registrations per ip per time
Kim Alvefur <zash@zash.se>
parents:
7018
diff
changeset
|
202 if not throttle_max then return true end |
|
7026
f0dc5cc11d0e
mod_register: Use util.cache to limit the number of per-ip throttles kept
Kim Alvefur <zash@zash.se>
parents:
7025
diff
changeset
|
203 local throttle = throttle_cache:get(ip); |
|
7025
236e8d1ee96c
mod_register: Switch to using util.throttle for limiting registrations per ip per time
Kim Alvefur <zash@zash.se>
parents:
7018
diff
changeset
|
204 if not throttle then |
|
236e8d1ee96c
mod_register: Switch to using util.throttle for limiting registrations per ip per time
Kim Alvefur <zash@zash.se>
parents:
7018
diff
changeset
|
205 throttle = create_throttle(throttle_max, throttle_period); |
|
236e8d1ee96c
mod_register: Switch to using util.throttle for limiting registrations per ip per time
Kim Alvefur <zash@zash.se>
parents:
7018
diff
changeset
|
206 end |
|
7026
f0dc5cc11d0e
mod_register: Use util.cache to limit the number of per-ip throttles kept
Kim Alvefur <zash@zash.se>
parents:
7025
diff
changeset
|
207 throttle_cache:set(ip, throttle); |
|
7025
236e8d1ee96c
mod_register: Switch to using util.throttle for limiting registrations per ip per time
Kim Alvefur <zash@zash.se>
parents:
7018
diff
changeset
|
208 return throttle:poll(1); |
|
236e8d1ee96c
mod_register: Switch to using util.throttle for limiting registrations per ip per time
Kim Alvefur <zash@zash.se>
parents:
7018
diff
changeset
|
209 end |
|
690
e901a0709005
Added rate limiting to in-band registration, and added IP [black/white]lists
Matthew Wild <mwild1@gmail.com>
parents:
665
diff
changeset
|
210 |
|
8194
ba9cd8447578
mod_register: Add comments saying which section handles password change, account deletion and which is in-band registration
Kim Alvefur <zash@zash.se>
parents:
8192
diff
changeset
|
211 -- In-band registration |
|
3529
3f9cc12308aa
mod_register: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3394
diff
changeset
|
212 module:hook("stanza/iq/jabber:iq:register:query", function(event) |
|
3f9cc12308aa
mod_register: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3394
diff
changeset
|
213 local session, stanza = event.origin, event.stanza; |
|
7017
ff734a602886
mod_register: Use session log instance to ease indentification
Kim Alvefur <zash@zash.se>
parents:
5776
diff
changeset
|
214 local log = session.log or module._log; |
|
3529
3f9cc12308aa
mod_register: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3394
diff
changeset
|
215 |
|
4269
cd4011af8b4c
mod_register: Move allow_registration option into an upvalue for efficiency (now it is being checked on every new c2s stream)
Matthew Wild <mwild1@gmail.com>
parents:
4268
diff
changeset
|
216 if not(allow_registration) or session.type ~= "c2s_unauthed" then |
|
7709
0af1783d1592
mod_register: Additional logging for various registration failure cases
Kim Alvefur <zash@zash.se>
parents:
7570
diff
changeset
|
217 log("debug", "Attempted registration when disabled or already authenticated"); |
|
665
09e0e9c722a3
Add allow_registration option to disable account registration
Matthew Wild <mwild1@gmail.com>
parents:
615
diff
changeset
|
218 session.send(st.error_reply(stanza, "cancel", "service-unavailable")); |
|
7916
72b6d5ab4137
mod_register: Require encryption before registration if c2s_require_encryption is set (fixes #595)
Kim Alvefur <zash@zash.se>
parents:
5637
diff
changeset
|
219 elseif require_encryption and not session.secure then |
|
72b6d5ab4137
mod_register: Require encryption before registration if c2s_require_encryption is set (fixes #595)
Kim Alvefur <zash@zash.se>
parents:
5637
diff
changeset
|
220 session.send(st.error_reply(stanza, "modify", "policy-violation", "Encryption is required")); |
|
3529
3f9cc12308aa
mod_register: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3394
diff
changeset
|
221 else |
|
60
44800be871f5
User registration, etc (jabber:iq:register)
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
222 local query = stanza.tags[1]; |
|
44800be871f5
User registration, etc (jabber:iq:register)
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
223 if stanza.attr.type == "get" then |
|
44800be871f5
User registration, etc (jabber:iq:register)
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
224 local reply = st.reply(stanza); |
|
4398
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
225 reply:add_child(registration_query); |
|
311
513bd52e8e19
Fixed mod_register to use session.send for sending stanzas
Waqas Hussain <waqas20@gmail.com>
parents:
85
diff
changeset
|
226 session.send(reply); |
|
60
44800be871f5
User registration, etc (jabber:iq:register)
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
227 elseif stanza.attr.type == "set" then |
|
44800be871f5
User registration, etc (jabber:iq:register)
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
228 if query.tags[1] and query.tags[1].name == "remove" then |
|
311
513bd52e8e19
Fixed mod_register to use session.send for sending stanzas
Waqas Hussain <waqas20@gmail.com>
parents:
85
diff
changeset
|
229 session.send(st.error_reply(stanza, "auth", "registration-required")); |
|
60
44800be871f5
User registration, etc (jabber:iq:register)
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
230 else |
|
4398
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
231 local data, errors = parse_response(query); |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
232 if errors then |
|
7709
0af1783d1592
mod_register: Additional logging for various registration failure cases
Kim Alvefur <zash@zash.se>
parents:
7570
diff
changeset
|
233 log("debug", "Error parsing registration form:"); |
|
0af1783d1592
mod_register: Additional logging for various registration failure cases
Kim Alvefur <zash@zash.se>
parents:
7570
diff
changeset
|
234 for field, err in pairs(errors) do |
|
0af1783d1592
mod_register: Additional logging for various registration failure cases
Kim Alvefur <zash@zash.se>
parents:
7570
diff
changeset
|
235 log("debug", "Field %q: %s", field, err); |
|
0af1783d1592
mod_register: Additional logging for various registration failure cases
Kim Alvefur <zash@zash.se>
parents:
7570
diff
changeset
|
236 end |
|
4398
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
237 session.send(st.error_reply(stanza, "modify", "not-acceptable")); |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
238 else |
|
690
e901a0709005
Added rate limiting to in-band registration, and added IP [black/white]lists
Matthew Wild <mwild1@gmail.com>
parents:
665
diff
changeset
|
239 -- Check that the user is not blacklisted or registering too often |
|
2085
64872e216e23
mod_register: Log a debug message when a session's IP is not available.
Waqas Hussain <waqas20@gmail.com>
parents:
1861
diff
changeset
|
240 if not session.ip then |
|
7017
ff734a602886
mod_register: Use session log instance to ease indentification
Kim Alvefur <zash@zash.se>
parents:
5776
diff
changeset
|
241 log("debug", "User's IP not known; can't apply blacklist/whitelist"); |
|
2085
64872e216e23
mod_register: Log a debug message when a session's IP is not available.
Waqas Hussain <waqas20@gmail.com>
parents:
1861
diff
changeset
|
242 elseif blacklisted_ips[session.ip] or (whitelist_only and not whitelisted_ips[session.ip]) then |
|
1859
c965b0accc7c
mod_register: Added helpful text to registration error responses.
Waqas Hussain <waqas20@gmail.com>
parents:
1858
diff
changeset
|
243 session.send(st.error_reply(stanza, "cancel", "not-acceptable", "You are not allowed to register an account.")); |
|
3529
3f9cc12308aa
mod_register: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3394
diff
changeset
|
244 return true; |
|
7710
08f5b483ff00
mod_register: Use throttle_max as indicator of limits being enabled, in case min_seconds_between_registrations is not used
Kim Alvefur <zash@zash.se>
parents:
7709
diff
changeset
|
245 elseif throttle_max and not whitelisted_ips[session.ip] then |
|
7570
c61ea328fac2
mod_register: Fix inverted throttle check (fixes #724)
Kim Alvefur <zash@zash.se>
parents:
7293
diff
changeset
|
246 if not check_throttle(session.ip) then |
|
7709
0af1783d1592
mod_register: Additional logging for various registration failure cases
Kim Alvefur <zash@zash.se>
parents:
7570
diff
changeset
|
247 log("debug", "Registrations over limit for ip %s", session.ip or "?"); |
|
7025
236e8d1ee96c
mod_register: Switch to using util.throttle for limiting registrations per ip per time
Kim Alvefur <zash@zash.se>
parents:
7018
diff
changeset
|
248 session.send(st.error_reply(stanza, "wait", "not-acceptable")); |
|
236e8d1ee96c
mod_register: Switch to using util.throttle for limiting registrations per ip per time
Kim Alvefur <zash@zash.se>
parents:
7018
diff
changeset
|
249 return true; |
|
690
e901a0709005
Added rate limiting to in-band registration, and added IP [black/white]lists
Matthew Wild <mwild1@gmail.com>
parents:
665
diff
changeset
|
250 end |
|
e901a0709005
Added rate limiting to in-band registration, and added IP [black/white]lists
Matthew Wild <mwild1@gmail.com>
parents:
665
diff
changeset
|
251 end |
|
4398
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
252 local username, password = nodeprep(data.username), data.password; |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
253 data.username, data.password = nil, nil; |
|
1857
ef266aa8e18f
mod_register: Fixed: No error was returned if username failed nodeprep.
Waqas Hussain <waqas20@gmail.com>
parents:
1523
diff
changeset
|
254 local host = module.host; |
|
2448
542335c8a5bc
mod_register: Return a <not-acceptable/> error on empty usernames (thanks Neustradamus).
Waqas Hussain <waqas20@gmail.com>
parents:
2260
diff
changeset
|
255 if not username or username == "" then |
|
7709
0af1783d1592
mod_register: Additional logging for various registration failure cases
Kim Alvefur <zash@zash.se>
parents:
7570
diff
changeset
|
256 log("debug", "The requested username is invalid."); |
|
1859
c965b0accc7c
mod_register: Added helpful text to registration error responses.
Waqas Hussain <waqas20@gmail.com>
parents:
1858
diff
changeset
|
257 session.send(st.error_reply(stanza, "modify", "not-acceptable", "The requested username is invalid.")); |
|
5165
39bb9344f194
mod_register: Fire event to allow blocking user registration
Florian Zeitz <florob@babelmonkeys.de>
parents:
5098
diff
changeset
|
258 return true; |
|
39bb9344f194
mod_register: Fire event to allow blocking user registration
Florian Zeitz <florob@babelmonkeys.de>
parents:
5098
diff
changeset
|
259 end |
|
8070
2db6746d2df8
mod_register: Include additional data in user-registering event
Kim Alvefur <zash@zash.se>
parents:
8069
diff
changeset
|
260 local user = { username = username , host = host, additional = data, allowed = true } |
|
5165
39bb9344f194
mod_register: Fire event to allow blocking user registration
Florian Zeitz <florob@babelmonkeys.de>
parents:
5098
diff
changeset
|
261 module:fire_event("user-registering", user); |
|
39bb9344f194
mod_register: Fire event to allow blocking user registration
Florian Zeitz <florob@babelmonkeys.de>
parents:
5098
diff
changeset
|
262 if not user.allowed then |
|
7709
0af1783d1592
mod_register: Additional logging for various registration failure cases
Kim Alvefur <zash@zash.se>
parents:
7570
diff
changeset
|
263 log("debug", "Registration disallowed by module"); |
|
5165
39bb9344f194
mod_register: Fire event to allow blocking user registration
Florian Zeitz <florob@babelmonkeys.de>
parents:
5098
diff
changeset
|
264 session.send(st.error_reply(stanza, "modify", "not-acceptable", "The requested username is forbidden.")); |
|
1857
ef266aa8e18f
mod_register: Fixed: No error was returned if username failed nodeprep.
Waqas Hussain <waqas20@gmail.com>
parents:
1523
diff
changeset
|
265 elseif usermanager_user_exists(username, host) then |
|
7709
0af1783d1592
mod_register: Additional logging for various registration failure cases
Kim Alvefur <zash@zash.se>
parents:
7570
diff
changeset
|
266 log("debug", "Attempt to register with existing username"); |
|
1859
c965b0accc7c
mod_register: Added helpful text to registration error responses.
Waqas Hussain <waqas20@gmail.com>
parents:
1858
diff
changeset
|
267 session.send(st.error_reply(stanza, "cancel", "conflict", "The requested username already exists.")); |
|
60
44800be871f5
User registration, etc (jabber:iq:register)
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
268 else |
|
4398
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
269 -- TODO unable to write file, file may be locked, etc, what's the correct error? |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
270 local error_reply = st.error_reply(stanza, "wait", "internal-server-error", "Failed to write data to disk."); |
|
1857
ef266aa8e18f
mod_register: Fixed: No error was returned if username failed nodeprep.
Waqas Hussain <waqas20@gmail.com>
parents:
1523
diff
changeset
|
271 if usermanager_create_user(username, password, host) then |
|
7754
560d2e758d4c
mod_register: Record the time of registration in the account details store
Kim Alvefur <zash@zash.se>
parents:
7711
diff
changeset
|
272 data.registered = os.time(); |
|
8069
8f5f197b139d
mod_register: Remove check for empty table (previous line sets a field)
Kim Alvefur <zash@zash.se>
parents:
7917
diff
changeset
|
273 if not account_details:set(username, data) then |
|
7709
0af1783d1592
mod_register: Additional logging for various registration failure cases
Kim Alvefur <zash@zash.se>
parents:
7570
diff
changeset
|
274 log("debug", "Could not store extra details"); |
|
4398
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
275 usermanager_delete_user(username, host); |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
276 session.send(error_reply); |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
277 return true; |
|
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
278 end |
|
311
513bd52e8e19
Fixed mod_register to use session.send for sending stanzas
Waqas Hussain <waqas20@gmail.com>
parents:
85
diff
changeset
|
279 session.send(st.reply(stanza)); -- user created! |
|
7017
ff734a602886
mod_register: Use session log instance to ease indentification
Kim Alvefur <zash@zash.se>
parents:
5776
diff
changeset
|
280 log("info", "User account created: %s@%s", username, host); |
|
3540
bc139431830b
Monster whitespace commit (beware the whitespace monster).
Waqas Hussain <waqas20@gmail.com>
parents:
3529
diff
changeset
|
281 module:fire_event("user-registered", { |
|
1857
ef266aa8e18f
mod_register: Fixed: No error was returned if username failed nodeprep.
Waqas Hussain <waqas20@gmail.com>
parents:
1523
diff
changeset
|
282 username = username, host = host, source = "mod_register", |
|
1189
63ed3902f357
mod_register: Attach session to user-registered and user-deregistered events
Matthew Wild <mwild1@gmail.com>
parents:
1184
diff
changeset
|
283 session = session }); |
|
60
44800be871f5
User registration, etc (jabber:iq:register)
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
284 else |
|
7709
0af1783d1592
mod_register: Additional logging for various registration failure cases
Kim Alvefur <zash@zash.se>
parents:
7570
diff
changeset
|
285 log("debug", "Could not create user"); |
|
4398
acc37e221940
mod_register: Add support for additional registration fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4270
diff
changeset
|
286 session.send(error_reply); |
|
60
44800be871f5
User registration, etc (jabber:iq:register)
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
287 end |
|
44800be871f5
User registration, etc (jabber:iq:register)
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
288 end |
|
44800be871f5
User registration, etc (jabber:iq:register)
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
289 end |
|
44800be871f5
User registration, etc (jabber:iq:register)
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
290 end |
|
44800be871f5
User registration, etc (jabber:iq:register)
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
291 end |
|
3529
3f9cc12308aa
mod_register: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3394
diff
changeset
|
292 end |
|
3f9cc12308aa
mod_register: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3394
diff
changeset
|
293 return true; |
|
60
44800be871f5
User registration, etc (jabber:iq:register)
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
294 end); |
