Comparison

plugins/mod_register_ibr.lua @ 10939:99ae457c2459

mod_register_ibr: Allow registration to reset an existing account password if permitted by a plugin
author Matthew Wild <mwild1@gmail.com>
date Thu, 18 Jun 2020 16:42:22 +0100
parent 10767:a0166932479f
child 10946:84441c19750e
comparison
equal deleted inserted replaced
10938:a5b8ae066688 10939:99ae457c2459
7 -- 7 --
8 8
9 9
10 local st = require "util.stanza"; 10 local st = require "util.stanza";
11 local dataform_new = require "util.dataforms".new; 11 local dataform_new = require "util.dataforms".new;
12 local usermanager_user_exists = require "core.usermanager".user_exists; 12 local usermanager_user_exists = require "core.usermanager".user_exists;
13 local usermanager_create_user = require "core.usermanager".create_user; 13 local usermanager_create_user = require "core.usermanager".create_user;
14 local usermanager_delete_user = require "core.usermanager".delete_user; 14 local usermanager_set_password = require "core.usermanager".create_user;
15 local usermanager_delete_user = require "core.usermanager".delete_user;
15 local nodeprep = require "util.encodings".stringprep.nodeprep; 16 local nodeprep = require "util.encodings".stringprep.nodeprep;
17 local util_error = require "util.error";
16 18
17 local additional_fields = module:get_option("additional_registration_fields", {}); 19 local additional_fields = module:get_option("additional_registration_fields", {});
18 local require_encryption = module:get_option_boolean("c2s_require_encryption", 20 local require_encryption = module:get_option_boolean("c2s_require_encryption",
19 module:get_option_boolean("require_encryption", false)); 21 module:get_option_boolean("require_encryption", false));
20 22
179 session.send(st.error_reply(stanza, error_type or "modify", error_condition or "not-acceptable", reason)); 181 session.send(st.error_reply(stanza, error_type or "modify", error_condition or "not-acceptable", reason));
180 return true; 182 return true;
181 end 183 end
182 184
183 if usermanager_user_exists(username, host) then 185 if usermanager_user_exists(username, host) then
184 log("debug", "Attempt to register with existing username"); 186 if user.allow_reset == username then
185 session.send(st.error_reply(stanza, "cancel", "conflict", "The requested username already exists.")); 187 local ok, err = util_error.coerce(usermanager_set_password(username, password, host));
186 return true; 188 if ok then
189 session.send(st.reply(stanza)); -- reset ok!
190 else
191 session.log("error", "Unable to reset password for %s@%s: %s", username, host, err);
192 session.send(st.error_reply(stanza, err.type, err.condition, err.text));
193 end
194 return true;
195 else
196 log("debug", "Attempt to register with existing username");
197 session.send(st.error_reply(stanza, "cancel", "conflict", "The requested username already exists."));
198 return true;
199 end
187 end 200 end
188 201
189 local created, err = usermanager_create_user(username, password, host); 202 local created, err = usermanager_create_user(username, password, host);
190 if created then 203 if created then
191 data.registered = os.time(); 204 data.registered = os.time();