grim/reviewboard_jetbrains_hub
Initial revision. Logins works, but we neet set the profile details yet
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rbjbhub/extension.py Tue Jun 16 00:27:11 2020 -0500
@@ -0,0 +1,103 @@
+from __future__ import unicode_literals +from django import forms +from django.contrib.auth.models import User +from django.utils.translation import ugettext_lazy as _ +from djblets.siteconfig.forms import SiteSettingsForm +from djblets.siteconfig.models import SiteConfiguration +from requests.auth import HTTPBasicAuth +from reviewboard.accounts.backends import AuthBackend +from reviewboard.extensions.base import Extension +from reviewboard.extensions.hooks import AuthBackendHook +class JetBrainsHubSettingsForm(SiteSettingsForm): + """ JetBrains Hub Settings Form """ + auth_jetbrains_hub_url = forms.CharField( + label=_('JetBrains Hub instance URL'), + help_text=_('The URL of your JetBrains Hub instance.'), + widget=forms.TextInput(attrs={'size': '40'}), + auth_jetbrains_hub_client_id = forms.CharField( + help_text=_('The client ID for the JetBrains Hub Service'), + widget=forms.TextInput(attrs={'size': '40'}), + auth_jetbrains_hub_client_secret = forms.CharField( + label=_('Client Secret'), + help_text=_('The client secret for the JetBrains Hub Service'), + widget=forms.PasswordInput(render_value=True, attrs={'size': '40'}), + auth_jetbrains_hub_scopes = forms.CharField( + help_text=_('A space separated list scopes that you are requesting ' + widget=forms.TextInput(attrs={'size': '40'}), +class JetBrainsHubAuthBackend(AuthBackend): + backend_id = 'grim-jbhub' + name = _('JetBrains Hub') + settings_form = JetBrainsHubSettingsForm + def authenticate(self, username, password, **kwargs): + siteconfig = SiteConfiguration.objects.get_current() + username = username.strip() + 'grant_type': 'password', + 'scope': siteconfig.get('auth_jetbrains_hub_scopes'), + siteconfig.get('auth_jetbrains_hub_url'), + 'api/rest/oauth2/token', + siteconfig.get('auth_jetbrains_hub_client_id'), + siteconfig.get('auth_jetbrains_hub_client_secret'), + resp = requests.post(uri, auth=auth, data=data) + if resp.status_code != 200: + return self.get_or_create_user(username) + def get_or_create_user(self, username, request=None): + user = User.objects.get(username=username) + except User.DoesNotExist: + user = User.objects.create_user(username=username) +class JetBrainsHubExtension(Extension): + 'Name': _('JetBrains Hub Authentication'), + 'Summary': _('Support for JetBrains Hub'), + AuthBackendHook(self, JetBrainsHubAuthBackend) --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/setup.py Tue Jun 16 00:27:11 2020 -0500
@@ -0,0 +1,32 @@
+from __future__ import unicode_literals +from reviewboard.extensions.packaging import setup +from setuptools import find_packages + author='Gary Kramlich', + author_email='grim@reaperworld.com', + url='https://keep.imfreedom.org/grim/reviewboard_jetbrains_hub', + description='JetBrains Hub Support for ReviewBoard', + packages=find_packages(), + install_requires=['requests'], + 'reviewboard.extensions': [ + 'jbhub = rbjbhub.extension:JetBrainsHubExtension', + 'Development Status :: 3 - Alpha', + 'Environment :: Web Framework', + 'Framework :: Review Board', + 'Operating System :: OS Independent', + 'Programming Language :: Python', + 'License :: OSI Approved :: GNU General Public License v2 (GPLv2)',