summary refs log tree commit diff
path: root/synapse/handlers/register.py
diff options
context:
space:
mode:
Diffstat (limited to 'synapse/handlers/register.py')
-rw-r--r--synapse/handlers/register.py14
1 files changed, 12 insertions, 2 deletions
diff --git a/synapse/handlers/register.py b/synapse/handlers/register.py
index 4631fab94e..5c92960d25 100644
--- a/synapse/handlers/register.py
+++ b/synapse/handlers/register.py
@@ -150,6 +150,7 @@ class RegistrationHandler(BaseHandler):
         threepid=None,
         user_type=None,
         default_display_name=None,
+        require_consent=True,
         address=None,
         bind_emails=[],
     ):
@@ -167,6 +168,7 @@ class RegistrationHandler(BaseHandler):
               will be set to this. Defaults to 'localpart'.
             address (str|None): the IP address used to perform the registration.
             bind_emails (List[str]): list of emails to bind to this account.
+            require_consent (bool): Should the user be required to give consent.
         Returns:
             Deferred[str]: user_id
         Raises:
@@ -211,6 +213,7 @@ class RegistrationHandler(BaseHandler):
                 admin=admin,
                 user_type=user_type,
                 address=address,
+                require_consent=require_consent,
             )
 
             if self.hs.config.user_directory_search_all_users:
@@ -244,7 +247,7 @@ class RegistrationHandler(BaseHandler):
                     user_id = None
                     attempts += 1
 
-        if not self.hs.config.user_consent_at_registration:
+        if not self.hs.config.user_consent_at_registration and require_consent:
             yield self._auto_join_rooms(user_id)
         else:
             logger.info(
@@ -525,6 +528,7 @@ class RegistrationHandler(BaseHandler):
             ratelimit=False,
         )
 
+    @defer.inlineCallbacks
     def register_with_store(
         self,
         user_id,
@@ -536,6 +540,7 @@ class RegistrationHandler(BaseHandler):
         admin=False,
         user_type=None,
         address=None,
+        require_consent=True,
     ):
         """Register user in the datastore.
 
@@ -553,7 +558,7 @@ class RegistrationHandler(BaseHandler):
             user_type (str|None): type of user. One of the values from
                 api.constants.UserTypes, or None for a normal user.
             address (str|None): the IP address used to perform the registration.
-
+            require_consent (bool): Should the user be required to give consent.
         Returns:
             Deferred
         """
@@ -584,8 +589,12 @@ class RegistrationHandler(BaseHandler):
                 admin=admin,
                 user_type=user_type,
                 address=address,
+                require_consent=require_consent,
             )
         else:
+            if require_consent is False:
+                yield self.store.user_set_consent_version(user_id, "no-consent-required")
+
             return self.store.register_user(
                 user_id=user_id,
                 password_hash=password_hash,
@@ -597,6 +606,7 @@ class RegistrationHandler(BaseHandler):
                 user_type=user_type,
             )
 
+
     @defer.inlineCallbacks
     def register_device(self, user_id, device_id, initial_display_name, is_guest=False):
         """Register a device for a user and generate an access token.