def authorize(self, username, password, hosting_url, local_site_name=None, two_factor_auth_code=None, *args, **kwargs): if username == 'baduser': raise AuthorizationError('The username is very very bad.') elif username == '2fa-user' and two_factor_auth_code != '123456': raise TwoFactorAuthCodeRequiredError('Enter your 2FA code.') self.account.data.update({ 'username': username, 'password': password, 'hosting_url': hosting_url, 'local_site_name': local_site_name, })
def _check_api_error(self, e): data = e.read() try: rsp = json.loads(data) except: rsp = None if rsp and 'message' in rsp: response_info = e.info() x_github_otp = response_info.get('X-GitHub-OTP', '') if x_github_otp.startswith('required;'): raise TwoFactorAuthCodeRequiredError( _('Enter your two-factor authentication code. ' 'This code will be sent to you by GitHub.')) if e.code == 401: raise AuthorizationError(rsp['message']) raise HostingServiceError(rsp['message']) else: raise HostingServiceError(six.text_type(e))
def authorize(self, username, password, hosting_url, two_factor_auth_code=None, local_site_name=None, *args, **kwargs): site = Site.objects.get_current() siteconfig = SiteConfiguration.objects.get_current() site_base_url = '%s%s' % (site.domain, local_site_reverse( 'root', local_site_name=local_site_name)) site_url = '%s://%s' % (siteconfig.get('site_domain_method'), site_base_url) note = 'Access for Review Board (%s - %s)' % (site_base_url, uuid.uuid4().hex[:7]) try: body = { 'scopes': [ 'user', 'repo', ], 'note': note, 'note_url': site_url, } # If the site is using a registered GitHub application, # send it in the requests. This will gain the benefits of # a GitHub application, such as higher rate limits. if (hasattr(settings, 'GITHUB_CLIENT_ID') and hasattr(settings, 'GITHUB_CLIENT_SECRET')): body.update({ 'client_id': settings.GITHUB_CLIENT_ID, 'client_secret': settings.GITHUB_CLIENT_SECRET, }) headers = {} if two_factor_auth_code: headers['X-GitHub-OTP'] = two_factor_auth_code rsp, headers = self.client.json_post( url=self.get_api_url(hosting_url) + 'authorizations', username=username, password=password, headers=headers, body=json.dumps(body)) except (HTTPError, URLError) as e: data = e.read() try: rsp = json.loads(data) except: rsp = None if rsp and 'message' in rsp: response_info = e.info() x_github_otp = response_info.get('X-GitHub-OTP', '') if x_github_otp.startswith('required;'): raise TwoFactorAuthCodeRequiredError( _('Enter your two-factor authentication code ' 'and re-enter your password to link your account. ' 'This code will be sent to you by GitHub.')) raise AuthorizationError(rsp['message']) else: raise AuthorizationError(six.text_type(e)) self._save_auth_data(rsp)