forked from MirrorHub/synapse
Add "require_consent" parameter for registration
This commit is contained in:
parent
1b09cf8658
commit
3320aaab3a
3 changed files with 18 additions and 3 deletions
|
@ -150,6 +150,7 @@ class RegistrationHandler(BaseHandler):
|
||||||
threepid=None,
|
threepid=None,
|
||||||
user_type=None,
|
user_type=None,
|
||||||
default_display_name=None,
|
default_display_name=None,
|
||||||
|
require_consent=True,
|
||||||
address=None,
|
address=None,
|
||||||
bind_emails=[],
|
bind_emails=[],
|
||||||
):
|
):
|
||||||
|
@ -167,6 +168,7 @@ class RegistrationHandler(BaseHandler):
|
||||||
will be set to this. Defaults to 'localpart'.
|
will be set to this. Defaults to 'localpart'.
|
||||||
address (str|None): the IP address used to perform the registration.
|
address (str|None): the IP address used to perform the registration.
|
||||||
bind_emails (List[str]): list of emails to bind to this account.
|
bind_emails (List[str]): list of emails to bind to this account.
|
||||||
|
require_consent (bool): Should the user be required to give consent.
|
||||||
Returns:
|
Returns:
|
||||||
Deferred[str]: user_id
|
Deferred[str]: user_id
|
||||||
Raises:
|
Raises:
|
||||||
|
@ -211,6 +213,7 @@ class RegistrationHandler(BaseHandler):
|
||||||
admin=admin,
|
admin=admin,
|
||||||
user_type=user_type,
|
user_type=user_type,
|
||||||
address=address,
|
address=address,
|
||||||
|
require_consent=require_consent,
|
||||||
)
|
)
|
||||||
|
|
||||||
if self.hs.config.user_directory_search_all_users:
|
if self.hs.config.user_directory_search_all_users:
|
||||||
|
@ -244,7 +247,7 @@ class RegistrationHandler(BaseHandler):
|
||||||
user_id = None
|
user_id = None
|
||||||
attempts += 1
|
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)
|
yield self._auto_join_rooms(user_id)
|
||||||
else:
|
else:
|
||||||
logger.info(
|
logger.info(
|
||||||
|
@ -525,6 +528,7 @@ class RegistrationHandler(BaseHandler):
|
||||||
ratelimit=False,
|
ratelimit=False,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@defer.inlineCallbacks
|
||||||
def register_with_store(
|
def register_with_store(
|
||||||
self,
|
self,
|
||||||
user_id,
|
user_id,
|
||||||
|
@ -536,6 +540,7 @@ class RegistrationHandler(BaseHandler):
|
||||||
admin=False,
|
admin=False,
|
||||||
user_type=None,
|
user_type=None,
|
||||||
address=None,
|
address=None,
|
||||||
|
require_consent=True,
|
||||||
):
|
):
|
||||||
"""Register user in the datastore.
|
"""Register user in the datastore.
|
||||||
|
|
||||||
|
@ -553,7 +558,7 @@ class RegistrationHandler(BaseHandler):
|
||||||
user_type (str|None): type of user. One of the values from
|
user_type (str|None): type of user. One of the values from
|
||||||
api.constants.UserTypes, or None for a normal user.
|
api.constants.UserTypes, or None for a normal user.
|
||||||
address (str|None): the IP address used to perform the registration.
|
address (str|None): the IP address used to perform the registration.
|
||||||
|
require_consent (bool): Should the user be required to give consent.
|
||||||
Returns:
|
Returns:
|
||||||
Deferred
|
Deferred
|
||||||
"""
|
"""
|
||||||
|
@ -584,8 +589,12 @@ class RegistrationHandler(BaseHandler):
|
||||||
admin=admin,
|
admin=admin,
|
||||||
user_type=user_type,
|
user_type=user_type,
|
||||||
address=address,
|
address=address,
|
||||||
|
require_consent=require_consent,
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
|
if require_consent is False:
|
||||||
|
yield self.store.user_set_consent_version(user_id, "no-consent-required")
|
||||||
|
|
||||||
return self.store.register_user(
|
return self.store.register_user(
|
||||||
user_id=user_id,
|
user_id=user_id,
|
||||||
password_hash=password_hash,
|
password_hash=password_hash,
|
||||||
|
@ -597,6 +606,7 @@ class RegistrationHandler(BaseHandler):
|
||||||
user_type=user_type,
|
user_type=user_type,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
def register_device(self, user_id, device_id, initial_display_name, is_guest=False):
|
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.
|
"""Register a device for a user and generate an access token.
|
||||||
|
|
|
@ -72,6 +72,7 @@ class ReplicationRegisterServlet(ReplicationEndpoint):
|
||||||
"admin": admin,
|
"admin": admin,
|
||||||
"user_type": user_type,
|
"user_type": user_type,
|
||||||
"address": address,
|
"address": address,
|
||||||
|
"require_consent": require_consent,
|
||||||
}
|
}
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
|
@ -88,6 +89,7 @@ class ReplicationRegisterServlet(ReplicationEndpoint):
|
||||||
admin=content["admin"],
|
admin=content["admin"],
|
||||||
user_type=content["user_type"],
|
user_type=content["user_type"],
|
||||||
address=content["address"],
|
address=content["address"],
|
||||||
|
require_consent=content["require_consent"],
|
||||||
)
|
)
|
||||||
|
|
||||||
return (200, {})
|
return (200, {})
|
||||||
|
|
|
@ -525,6 +525,9 @@ class RegisterRestServlet(RestServlet):
|
||||||
# downcased one in `username` for the mac calculation
|
# downcased one in `username` for the mac calculation
|
||||||
user = body["username"].encode("utf-8")
|
user = body["username"].encode("utf-8")
|
||||||
|
|
||||||
|
# do not require consent for this user (for example, bots)
|
||||||
|
require_consent = body.get("require_consent", True)
|
||||||
|
|
||||||
# str() because otherwise hmac complains that 'unicode' does not
|
# str() because otherwise hmac complains that 'unicode' does not
|
||||||
# have the buffer interface
|
# have the buffer interface
|
||||||
got_mac = str(body["mac"])
|
got_mac = str(body["mac"])
|
||||||
|
@ -542,7 +545,7 @@ class RegisterRestServlet(RestServlet):
|
||||||
raise SynapseError(403, "HMAC incorrect")
|
raise SynapseError(403, "HMAC incorrect")
|
||||||
|
|
||||||
user_id = yield self.registration_handler.register_user(
|
user_id = yield self.registration_handler.register_user(
|
||||||
localpart=username, password=password
|
localpart=username, password=password, require_consent=require_consent,
|
||||||
)
|
)
|
||||||
|
|
||||||
result = yield self._create_registration_details(user_id, body)
|
result = yield self._create_registration_details(user_id, body)
|
||||||
|
|
Loading…
Reference in a new issue