Software / code / prosody
Comparison
plugins/mod_register_ibr.lua @ 13170:082c7d856e61
core, plugins: Split prosody:user role into prosody:{guest,registered,member}
This gives us more granular control over different types of user account.
Accounts registered by IBR get assigned prosody:registered by default, while
accounts provisioned by an admin (e.g. via prosodyctl shell) will receive
prosody:member by default.
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Thu, 29 Jun 2023 15:36:13 +0100 |
| parent | 12977:74b9e05af71e |
| child | 13232:e0ab20519ce5 |
comparison
equal
deleted
inserted
replaced
| 13169:7b6e7290265b | 13170:082c7d856e61 |
|---|---|
| 8 | 8 |
| 9 | 9 |
| 10 local st = require "prosody.util.stanza"; | 10 local st = require "prosody.util.stanza"; |
| 11 local dataform_new = require "prosody.util.dataforms".new; | 11 local dataform_new = require "prosody.util.dataforms".new; |
| 12 local usermanager_user_exists = require "prosody.core.usermanager".user_exists; | 12 local usermanager_user_exists = require "prosody.core.usermanager".user_exists; |
| 13 local usermanager_create_user = require "prosody.core.usermanager".create_user; | 13 local usermanager_create_user_with_role = require "prosody.core.usermanager".create_user_with_role; |
| 14 local usermanager_set_password = require "prosody.core.usermanager".create_user; | 14 local usermanager_set_password = require "prosody.core.usermanager".create_user; |
| 15 local usermanager_delete_user = require "prosody.core.usermanager".delete_user; | 15 local usermanager_delete_user = require "prosody.core.usermanager".delete_user; |
| 16 local nodeprep = require "prosody.util.encodings".stringprep.nodeprep; | 16 local nodeprep = require "prosody.util.encodings".stringprep.nodeprep; |
| 17 local util_error = require "prosody.util.error"; | 17 local util_error = require "prosody.util.error"; |
| 18 | 18 |
| 19 local additional_fields = module:get_option("additional_registration_fields", {}); | 19 local additional_fields = module:get_option("additional_registration_fields", {}); |
| 20 local require_encryption = module:get_option_boolean("c2s_require_encryption", | 20 local require_encryption = module:get_option_boolean("c2s_require_encryption", |
| 21 module:get_option_boolean("require_encryption", true)); | 21 module:get_option_boolean("require_encryption", true)); |
| 22 | |
| 23 local default_role = module:get_option_string("register_ibr_default_role", "prosody:registered"); | |
| 22 | 24 |
| 23 pcall(function () | 25 pcall(function () |
| 24 module:depends("register_limits"); | 26 module:depends("register_limits"); |
| 25 end); | 27 end); |
| 26 | 28 |
| 164 log("debug", "The requested username is invalid."); | 166 log("debug", "The requested username is invalid."); |
| 165 session.send(st.error_reply(stanza, "modify", "not-acceptable", "The requested username is invalid.")); | 167 session.send(st.error_reply(stanza, "modify", "not-acceptable", "The requested username is invalid.")); |
| 166 return true; | 168 return true; |
| 167 end | 169 end |
| 168 | 170 |
| 169 local user = { username = username, password = password, host = host, additional = data, ip = session.ip, session = session, allowed = true } | 171 local user = { |
| 172 username = username, password = password, host = host; | |
| 173 additional = data, ip = session.ip, session = session; | |
| 174 role = default_role; | |
| 175 allowed = true; | |
| 176 }; | |
| 170 module:fire_event("user-registering", user); | 177 module:fire_event("user-registering", user); |
| 171 if not user.allowed then | 178 if not user.allowed then |
| 172 local error_type, error_condition, reason; | 179 local error_type, error_condition, reason; |
| 173 local err = user.error; | 180 local err = user.error; |
| 174 if err then | 181 if err then |
| 198 session.send(st.error_reply(stanza, "cancel", "conflict", "The requested username already exists.")); | 205 session.send(st.error_reply(stanza, "cancel", "conflict", "The requested username already exists.")); |
| 199 return true; | 206 return true; |
| 200 end | 207 end |
| 201 end | 208 end |
| 202 | 209 |
| 203 local created, err = usermanager_create_user(username, password, host); | 210 local created, err = usermanager_create_user_with_role(username, password, host, user.role); |
| 204 if created then | 211 if created then |
| 205 data.registered = os.time(); | 212 data.registered = os.time(); |
| 206 if not account_details:set(username, data) then | 213 if not account_details:set(username, data) then |
| 207 log("debug", "Could not store extra details"); | 214 log("debug", "Could not store extra details"); |
| 208 usermanager_delete_user(username, host); | 215 usermanager_delete_user(username, host); |