From f948969b203952b028f2fc68394cfb5089535c01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Fri, 8 Dec 2017 14:04:11 +0100 Subject: [PATCH] Fixed webhook so that users' full_name isn't reset to the empty string. --- cloud/webhooks.py | 8 ++++++-- tests/test_webhooks.py | 23 +++++++++++++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/cloud/webhooks.py b/cloud/webhooks.py index 9341ca9..6c9473a 100644 --- a/cloud/webhooks.py +++ b/cloud/webhooks.py @@ -78,9 +78,13 @@ def user_modified(): updates['email'] = payload['email'] if payload['full_name'] != db_user['full_name']: - my_log.info('User changed full name from %s to %s', + my_log.info('User changed full name from %r to %r', payload['full_name'], db_user['full_name']) - updates['full_name'] = payload['full_name'] + if payload['full_name']: + updates['full_name'] = payload['full_name'] + else: + # Fall back to the username when the full name was erased. + updates['full_name'] = db_user['username'] if updates: update_res = users_coll.update_one({'_id': db_user['_id']}, diff --git a/tests/test_webhooks.py b/tests/test_webhooks.py index e08b074..05238ea 100644 --- a/tests/test_webhooks.py +++ b/tests/test_webhooks.py @@ -35,6 +35,29 @@ class UserModifiedTest(AbstractCloudTest): self.assertEqual('ကြယ်ဆွတ်', db_user['full_name']) self.assertEqual(['subscriber'], db_user['roles']) + def test_clear_full_name(self): + """An empty full name should make it fall back to the username""" + payload = {'id': 1112333, + 'old_email': 'old@email.address', + 'full_name': '', + 'email': 'old@email.address', + 'roles': ['cloud_subscriber']} + as_json = json.dumps(payload).encode() + mac = hmac.new(self.hmac_secret, + as_json, hashlib.sha256) + self.post('/api/webhooks/user-modified', + data=as_json, + content_type='application/json', + headers={'X-Webhook-HMAC': mac.hexdigest()}, + expected_status=204) + + # Check the effect on the user + db_user = self.fetch_user_from_db(self.uid) + self.assertNotEqual('', db_user['username']) + self.assertEqual('old@email.address', db_user['email']) + self.assertEqual(db_user['username'], db_user['full_name']) + self.assertEqual(['subscriber'], db_user['roles']) + def test_change_email(self): payload = {'id': 1112333, 'old_email': 'old@email.address',