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);