Merge pull request #4184 from matrix-org/rav/fix_public_consent

Fix an internal server error when viewing the public privacy policy
This commit is contained in:
Richard van der Hoff 2018-11-14 11:32:43 +00:00 committed by GitHub
commit 4b60c969d8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 16 additions and 5 deletions

1
changelog.d/4184.feature Normal file
View File

@ -0,0 +1 @@
Include flags to optionally add `m.login.terms` to the registration flow when consent tracking is enabled.

View File

@ -142,10 +142,10 @@ class ConsentResource(Resource):
userhmac = None userhmac = None
has_consented = False has_consented = False
public_version = username == "" public_version = username == ""
if not public_version or not self.hs.config.user_consent_at_registration: if not public_version:
userhmac = parse_string(request, "h", required=True, encoding=None) userhmac_bytes = parse_string(request, "h", required=True, encoding=None)
self._check_hash(username, userhmac) self._check_hash(username, userhmac_bytes)
if username.startswith('@'): if username.startswith('@'):
qualified_user_id = username qualified_user_id = username
@ -155,15 +155,18 @@ class ConsentResource(Resource):
u = yield self.store.get_user_by_id(qualified_user_id) u = yield self.store.get_user_by_id(qualified_user_id)
if u is None: if u is None:
raise NotFoundError("Unknown user") raise NotFoundError("Unknown user")
has_consented = u["consent_version"] == version has_consented = u["consent_version"] == version
userhmac = userhmac_bytes.decode("ascii")
try: try:
self._render_template( self._render_template(
request, "%s.html" % (version,), request, "%s.html" % (version,),
user=username, user=username,
userhmac=userhmac.decode('ascii'), userhmac=userhmac,
version=version, version=version,
has_consented=has_consented, public_version=public_version, has_consented=has_consented,
public_version=public_version,
) )
except TemplateNotFound: except TemplateNotFound:
raise NotFoundError("Unknown policy version") raise NotFoundError("Unknown policy version")

View File

@ -60,6 +60,13 @@ class ConsentResourceTestCase(unittest.HomeserverTestCase):
hs = self.setup_test_homeserver(config=config) hs = self.setup_test_homeserver(config=config)
return hs return hs
def test_render_public_consent(self):
"""You can observe the terms form without specifying a user"""
resource = consent_resource.ConsentResource(self.hs)
request, channel = self.make_request("GET", "/consent?v=1", shorthand=False)
render(request, resource, self.reactor)
self.assertEqual(channel.code, 200)
def test_accept_consent(self): def test_accept_consent(self):
""" """
A user can use the consent form to accept the terms. A user can use the consent form to accept the terms.