diff --git a/news/4292.internal b/news/4292.internal new file mode 100644 index 000000000..9743ba52b --- /dev/null +++ b/news/4292.internal @@ -0,0 +1 @@ +Use standalone ``generate_user_id`` / ``generate_login_name`` functions from ``plone.app.users.utils`` instead of instantiating the registration form view. @jensens diff --git a/src/plone/restapi/services/users/add.py b/src/plone/restapi/services/users/add.py index 90a4bf19d..052d0f099 100644 --- a/src/plone/restapi/services/users/add.py +++ b/src/plone/restapi/services/users/add.py @@ -1,5 +1,14 @@ from AccessControl import getSecurityManager from plone.app.users.schema import ICombinedRegisterSchema + +try: + from plone.app.users.utils import generate_login_name + from plone.app.users.utils import generate_user_id + + HAS_STANDALONE_GENERATORS = True +except ImportError: + # BBB: plone.app.users without standalone generators (Plone < 6.2) + HAS_STANDALONE_GENERATORS = False from plone.restapi import _ from plone.restapi.bbb import ISecuritySchema from plone.restapi.deserializer import json_body @@ -234,13 +243,19 @@ def _add_user(self, data, location=True): "fullname": data.get("fullname", ""), } - register_view = getMultiAdapter((self.context, self.request), name="register") - - register_view.generate_user_id(user_id_login_name_data) - register_view.generate_login_name(user_id_login_name_data) + if HAS_STANDALONE_GENERATORS: + user_id = generate_user_id(self.context, user_id_login_name_data) + login_name = generate_login_name(self.context, user_id_login_name_data) + else: + # BBB: plone.app.users without standalone generators (Plone < 6.2) + register_view = getMultiAdapter( + (self.context, self.request), name="register" + ) + user_id = register_view.generate_user_id(user_id_login_name_data) + login_name = register_view.generate_login_name(user_id_login_name_data) - user_id = user_id_login_name_data.get("user_id", data.get("username")) - login_name = user_id_login_name_data.get("login_name", data.get("username")) + user_id = user_id or username or email + login_name = login_name or username or email username = user_id properties["username"] = user_id