Software / code / prosody
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(); |