from __future__ import absolute_import, print_function from sentry.auth.exceptions import IdentityNotValid from sentry.auth.providers.oauth2 import (OAuth2Callback, OAuth2Login, OAuth2Provider) from .client import PassbookApiError, PassbookClient from .constants import (ACCESS_TOKEN_URL, AUTHORIZE_URL, CLIENT_ID, CLIENT_SECRET, SCOPE) from .views import FetchUser, PassbookConfigureView class PassbookOAuth2Provider(OAuth2Provider): access_token_url = ACCESS_TOKEN_URL authorize_url = AUTHORIZE_URL name = 'Passbook' client_id = CLIENT_ID client_secret = CLIENT_SECRET def __init__(self, **config): super(PassbookOAuth2Provider, self).__init__(**config) def get_configure_view(self): return PassbookConfigureView.as_view() def get_auth_pipeline(self): return [ OAuth2Login( authorize_url=self.authorize_url, client_id=self.client_id, scope=SCOPE, ), OAuth2Callback( access_token_url=self.access_token_url, client_id=self.client_id, client_secret=self.client_secret, ), FetchUser( client_id=self.client_id, client_secret=self.client_secret, ), ] def get_refresh_token_url(self): return ACCESS_TOKEN_URL def build_identity(self, state): data = state['data'] user_data = state['user'] return { 'id': user_data['email'], 'email': user_data['email'], 'name': user_data['name'], 'data': self.get_oauth_data(data), } def build_config(self, state): return {} def refresh_identity(self, auth_identity): client = PassbookClient(self.client_id, self.client_secret) access_token = auth_identity.data['access_token']