--- a/rbjbhub/extension.py Tue Jun 16 00:27:11 2020 -0500
+++ b/rbjbhub/extension.py Tue Jun 16 22:09:20 2020 -0500
@@ -18,6 +18,49 @@
from reviewboard.extensions.hooks import AuthBackendHook
+def _update_user(user, token): + """ Updates a user according to what is set it hub. This is mostly to deal + with email changes, but they can also change their name and username so + this just updates everything. + siteconfig = SiteConfiguration.objects.get_current() + # look up the user in hub + base_url = siteconfig.get('auth_jetbrains_hub_url') + uri = os.path.join(base_url, 'api/rest/oauth2/userinfo') + 'Authorization': 'Bearer ' + token + resp = requests.get(uri, headers=headers) + resp.raise_for_status() + # we don't have a good way to split the username to a first name/last name, + # so we split on the first space and then treat the two parts as the first + name_parts = hub_user['name'].split(' ', 1) + # figure the users email address + email = hub_user.get('email', '') + # only set the users email address if it is verified. This is problematic + # when a user is anonymized, but we'll come back to that. + if hub_user.get('email_verified', False): + # now update the django user + user.first_name = name_parts[0] + user.last_name = len(name_parts) > 1 and name_parts[1] or '' class JetBrainsHubSettingsForm(SiteSettingsForm):
""" JetBrains Hub Settings Form """
@@ -82,15 +125,18 @@
if resp.status_code != 200:
- return self.get_or_create_user(username)
+ token = json.get('access_token', '') - def get_or_create_user(self, username, request=None):
+ return self.get_or_create_user(username, token) + def get_or_create_user(self, username, token, request=None): user = User.objects.get(username=username)
except User.DoesNotExist:
user = User.objects.create_user(username=username)
+ return _update_user(user, token) class JetBrainsHubExtension(Extension):