OAuth2LoginView, ) from .provider import BoxOAuth2Provider class BoxOAuth2Adapter(OAuth2Adapter): provider_id = BoxOAuth2Provider.id access_token_url = 'https://api.box.com/oauth2/token' authorize_url = 'https://account.box.com/api/oauth2/authorize' profile_url = 'https://api.box.com/2.0/users/me' redirect_uri_protocol = None def complete_login(self, request, app, token, **kwargs): extra_data = requests.get(self.profile_url, params={ 'access_token': token.token }) # This only here because of weird response from the test suite if isinstance(extra_data, list): extra_data = extra_data[0] return self.get_provider().sociallogin_from_response( request, extra_data.json() ) oauth_login = OAuth2LoginView.adapter_view(BoxOAuth2Adapter) oauth_callback = OAuth2CallbackView.adapter_view(BoxOAuth2Adapter)
import requests from authentication.socialaccount.providers.oauth2.views import ( OAuth2Adapter, OAuth2CallbackView, OAuth2LoginView, ) from .provider import LineProvider class LineOAuth2Adapter(OAuth2Adapter): provider_id = LineProvider.id access_token_url = 'https://api.line.me/oauth2/v2.1/token' authorize_url = 'https://access.line.me/oauth2/v2.1/authorize' profile_url = 'https://api.line.me/v2/profile' def complete_login(self, request, app, token, **kwargs): headers = {'Authorization': 'Bearer {0}'.format(token.token)} resp = requests.get(self.profile_url, headers=headers) extra_data = resp.json() return self.get_provider().sociallogin_from_response( request, extra_data) oauth2_login = OAuth2LoginView.adapter_view(LineOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(LineOAuth2Adapter)
import requests from authentication.socialaccount.providers.oauth2.views import ( OAuth2Adapter, OAuth2CallbackView, OAuth2LoginView, ) from .provider import InstagramProvider class InstagramOAuth2Adapter(OAuth2Adapter): provider_id = InstagramProvider.id access_token_url = 'https://api.instagram.com/oauth/access_token' authorize_url = 'https://api.instagram.com/oauth/authorize' profile_url = 'https://api.instagram.com/v1/users/self' def complete_login(self, request, app, token, **kwargs): resp = requests.get(self.profile_url, params={'access_token': token.token}) extra_data = resp.json() return self.get_provider().sociallogin_from_response(request, extra_data) oauth2_login = OAuth2LoginView.adapter_view(InstagramOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(InstagramOAuth2Adapter)
import requests from authentication.socialaccount.providers.discord.provider import DiscordProvider from authentication.socialaccount.providers.oauth2.views import ( OAuth2Adapter, OAuth2CallbackView, OAuth2LoginView, ) class DiscordOAuth2Adapter(OAuth2Adapter): provider_id = DiscordProvider.id access_token_url = 'https://discordapp.com/api/oauth2/token' authorize_url = 'https://discordapp.com/api/oauth2/authorize' profile_url = 'https://discordapp.com/api/users/@me' def complete_login(self, request, app, token, **kwargs): headers = { 'Authorization': 'Bearer {0}'.format(token.token), 'Content-Type': 'application/json', } extra_data = requests.get(self.profile_url, headers=headers) return self.get_provider().sociallogin_from_response( request, extra_data.json()) oauth2_login = OAuth2LoginView.adapter_view(DiscordOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(DiscordOAuth2Adapter)
OAuth2LoginView, ) from .provider import AmazonProvider class AmazonOAuth2Adapter(OAuth2Adapter): provider_id = AmazonProvider.id access_token_url = 'https://api.amazon.com/auth/o2/token' authorize_url = 'http://www.amazon.com/ap/oa' profile_url = 'https://www.amazon.com/ap/user/profile' supports_state = False redirect_uri_protocol = 'https' def complete_login(self, request, app, token, **kwargs): response = requests.get(self.profile_url, params={'access_token': token}) extra_data = response.json() if 'Profile' in extra_data: extra_data = { 'user_id': extra_data['Profile']['CustomerId'], 'name': extra_data['Profile']['Name'], 'email': extra_data['Profile']['PrimaryEmail'] } return self.get_provider().sociallogin_from_response( request, extra_data) oauth2_login = OAuth2LoginView.adapter_view(AmazonOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(AmazonOAuth2Adapter)
class DoubanOAuth2Adapter(OAuth2Adapter): provider_id = DoubanProvider.id access_token_url = 'https://www.douban.com/service/auth2/token' authorize_url = 'https://www.douban.com/service/auth2/auth' profile_url = 'https://api.douban.com/v2/user/~me' def complete_login(self, request, app, token, **kwargs): headers = {'Authorization': 'Bearer %s' % token.token} resp = requests.get(self.profile_url, headers=headers) extra_data = resp.json() """ Douban may return data like this: { 'code': 128, 'request': 'GET /v2/user/~me', 'msg': 'user_is_locked:53358092' } """ if 'id' not in extra_data: msg = extra_data.get('msg', _('Invalid profile data')) raise ProviderException(msg) return self.get_provider().sociallogin_from_response( request, extra_data) oauth2_login = OAuth2LoginView.adapter_view(DoubanOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(DoubanOAuth2Adapter)
import requests from authentication.socialaccount.providers.oauth2.views import ( OAuth2Adapter, OAuth2CallbackView, OAuth2LoginView, ) from .provider import SoundCloudProvider class SoundCloudOAuth2Adapter(OAuth2Adapter): provider_id = SoundCloudProvider.id access_token_url = 'https://api.soundcloud.com/oauth2/token' authorize_url = 'https://soundcloud.com/connect' profile_url = 'https://api.soundcloud.com/me.json' def complete_login(self, request, app, token, **kwargs): resp = requests.get(self.profile_url, params={'oauth_token': token.token}) extra_data = resp.json() return self.get_provider().sociallogin_from_response( request, extra_data) oauth2_login = OAuth2LoginView.adapter_view(SoundCloudOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(SoundCloudOAuth2Adapter)
import requests from authentication.socialaccount.providers.oauth2.views import ( OAuth2Adapter, OAuth2CallbackView, OAuth2LoginView, ) from .provider import DaumProvider class DaumOAuth2Adapter(OAuth2Adapter): provider_id = DaumProvider.id access_token_url = 'https://apis.daum.net/oauth2/token' authorize_url = 'https://apis.daum.net/oauth2/authorize' profile_url = 'https://apis.daum.net/user/v1/show.json' def complete_login(self, request, app, token, **kwargs): resp = requests.get(self.profile_url, params={'access_token': token.token}) extra_data = resp.json().get('result') return self.get_provider().sociallogin_from_response( request, extra_data) oauth2_login = OAuth2LoginView.adapter_view(DaumOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(DaumOAuth2Adapter)
import requests from authentication.socialaccount.providers.oauth2.views import ( OAuth2Adapter, OAuth2CallbackView, OAuth2LoginView, ) from .provider import TwentyThreeAndMeProvider class TwentyTreeAndMeOAuth2Adapter(OAuth2Adapter): provider_id = TwentyThreeAndMeProvider.id access_token_url = 'https://api.23andme.com/token' authorize_url = 'https://api.23andme.com/authorize' profile_url = 'https://api.23andme.com/1/user/' def complete_login(self, request, app, token, **kwargs): headers = {'Authorization': 'Bearer {0}'.format(token.token)} resp = requests.get(self.profile_url, headers=headers) extra_data = resp.json() return self.get_provider().sociallogin_from_response( request, extra_data) oauth2_login = OAuth2LoginView.adapter_view(TwentyTreeAndMeOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(TwentyTreeAndMeOAuth2Adapter)
import requests from authentication.socialaccount.providers.oauth2.views import ( OAuth2Adapter, OAuth2CallbackView, OAuth2LoginView, ) from .provider import HubicProvider class HubicOAuth2Adapter(OAuth2Adapter): provider_id = HubicProvider.id access_token_url = 'https://api.hubic.com/oauth/token' authorize_url = 'https://api.hubic.com/oauth/auth' profile_url = 'https://api.hubic.com/1.0/account' redirect_uri_protocol = 'https' def complete_login(self, request, app, token, **kwargs): token_type = kwargs['response']['token_type'] resp = requests.get( self.profile_url, headers={'Authorization': '%s %s' % (token_type, token.token)}) extra_data = resp.json() return self.get_provider().sociallogin_from_response( request, extra_data) oauth2_login = OAuth2LoginView.adapter_view(HubicOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(HubicOAuth2Adapter)
) class AgaveAdapter(OAuth2Adapter): provider_id = AgaveProvider.id settings = app_settings.PROVIDERS.get(provider_id, {}) provider_base_url = settings.get("API_URL", 'https://public.agaveapi.co') access_token_url = '{0}/token'.format(provider_base_url) authorize_url = '{0}/authorize'.format(provider_base_url) profile_url = '{0}/profiles/v2/me'.format(provider_base_url) def complete_login(self, request, app, token, response): extra_data = requests.get(self.profile_url, params={'access_token': token.token}, headers={ 'Authorization': 'Bearer ' + token.token, }) user_profile = extra_data.json()['result'] \ if 'result' in extra_data.json() \ else {} return self.get_provider().sociallogin_from_response( request, user_profile) oauth2_login = OAuth2LoginView.adapter_view(AgaveAdapter) oauth2_callback = OAuth2CallbackView.adapter_view(AgaveAdapter)
class DwollaOAuth2Adapter(OAuth2Adapter): """Dwolla Views Adapter""" scope_delimiter = '|' provider_id = DwollaProvider.id access_token_url = TOKEN_URL authorize_url = AUTH_URL def complete_login(self, request, app, token, response, **kwargs): resp = requests.get( response['_links']['account']['href'], headers={ 'authorization': 'Bearer %s' % token.token, 'accept': 'application/vnd.dwolla.v1.hal+json', }, ) extra_data = resp.json() return self.get_provider().sociallogin_from_response( request, extra_data ) oauth2_login = OAuth2LoginView.adapter_view(DwollaOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(DwollaOAuth2Adapter)
import requests from authentication.socialaccount.providers.oauth2.views import ( OAuth2Adapter, OAuth2CallbackView, OAuth2LoginView, ) from .provider import DigitalOceanProvider class DigitalOceanOAuth2Adapter(OAuth2Adapter): provider_id = DigitalOceanProvider.id access_token_url = 'https://cloud.digitalocean.com/v1/oauth/token' authorize_url = 'https://cloud.digitalocean.com/v1/oauth/authorize' profile_url = 'https://api.digitalocean.com/v2/account' def complete_login(self, request, app, token, **kwargs): headers = {'Authorization': 'Bearer {0}'.format(token.token)} resp = requests.get(self.profile_url, headers=headers) extra_data = resp.json() return self.get_provider().sociallogin_from_response( request, extra_data) oauth2_login = OAuth2LoginView.adapter_view(DigitalOceanOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(DigitalOceanOAuth2Adapter)
class ShopifyOAuth2LoginView(OAuth2LoginView): def dispatch(self, request): response = super(ShopifyOAuth2LoginView, self).dispatch(request) is_embedded = getattr(settings, 'SOCIALACCOUNT_PROVIDERS', {}).get( 'shopify', {}).get('IS_EMBEDDED', False) if is_embedded: """ Shopify embedded apps (that run within an iFrame) require a JS (not server) redirect for starting the oauth2 process. See Also: https://help.shopify.com/api/sdks/embedded-app-sdk/getting-started#oauth """ js = ''.join(( '<!DOCTYPE html><html><head>' '<script type="text/javascript">', 'window.top.location.href = "{url}";'.format(url=response.url), '</script></head><body></body></html>' )) response = HttpResponse(content=js) # Because this view will be within shopify's iframe response.xframe_options_exempt = True return response oauth2_login = ShopifyOAuth2LoginView.adapter_view(ShopifyOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(ShopifyOAuth2Adapter)
) from .provider import CoinbaseProvider class CoinbaseOAuth2Adapter(OAuth2Adapter): provider_id = CoinbaseProvider.id @property def authorize_url(self): return 'https://coinbase.com/oauth/authorize' @property def access_token_url(self): return 'https://coinbase.com/oauth/token' @property def profile_url(self): return 'https://coinbase.com/api/v1/users' def complete_login(self, request, app, token, **kwargs): response = requests.get(self.profile_url, params={'access_token': token}) extra_data = response.json()['users'][0]['user'] return self.get_provider().sociallogin_from_response( request, extra_data) oauth2_login = OAuth2LoginView.adapter_view(CoinbaseOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(CoinbaseOAuth2Adapter)
@property def authorize_url(self): return self.battlenet_base_url + "/oauth/authorize" @property def profile_url(self): return self.battlenet_base_url + "/oauth/userinfo" def complete_login(self, request, app, token, **kwargs): params = {"access_token": token.token} response = requests.get(self.profile_url, params=params) data = _check_errors(response) # Add the region to the data so that we can have it in `extra_data`. data["region"] = self.battlenet_region return self.get_provider().sociallogin_from_response(request, data) def get_callback_url(self, request, app): r = super(BattleNetOAuth2Adapter, self).get_callback_url(request, app) region = request.GET.get("region", "").lower() # Pass the region down to the callback URL if we specified it if region and region in self.valid_regions: r += "?region=%s" % (region) return r oauth2_login = OAuth2LoginView.adapter_view(BattleNetOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(BattleNetOAuth2Adapter)
import requests from authentication.socialaccount.providers.oauth2.views import ( OAuth2Adapter, OAuth2CallbackView, OAuth2LoginView, ) from .provider import EventbriteProvider class EventbriteOAuth2Adapter(OAuth2Adapter): """OAuth2Adapter for Eventbrite API v3.""" provider_id = EventbriteProvider.id authorize_url = 'https://www.eventbrite.com/oauth/authorize' access_token_url = 'https://www.eventbrite.com/oauth/token' profile_url = 'https://www.eventbriteapi.com/v3/users/me/' def complete_login(self, request, app, token, **kwargs): """Complete login.""" resp = requests.get(self.profile_url, params={'token': token.token}) extra_data = resp.json() return self.get_provider().sociallogin_from_response( request, extra_data) oauth2_login = OAuth2LoginView.adapter_view(EventbriteOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(EventbriteOAuth2Adapter)
def complete_login(self, request, app, token, **kwargs): params = {'access_token': token.token} resp = requests.get(self.profile_url, params=params) extra_data = resp.json() if app_settings.QUERY_EMAIL and not extra_data.get('email'): extra_data['email'] = self.get_email(token) return self.get_provider().sociallogin_from_response( request, extra_data ) def get_email(self, token): email = None params = {'access_token': token.token} resp = requests.get(self.emails_url, params=params) emails = resp.json() if resp.status_code == 200 and emails: email = emails[0] primary_emails = [ e for e in emails if not isinstance(e, dict) or e.get('primary') ] if primary_emails: email = primary_emails[0] if isinstance(email, dict): email = email.get('email', '') return email oauth2_login = OAuth2LoginView.adapter_view(GitHubOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(GitHubOAuth2Adapter)
'https://accounts.platform.intuit.com/v1/openid_connect/userinfo' profile_url_method = 'GET' access_token_method = 'POST' def complete_login(self, request, app, token, **kwargs): resp = self.get_user_info(token) extra_data = resp return self.get_provider().sociallogin_from_response( request, extra_data) def get_user_info(self, token): auth_header = 'Bearer ' + token.token headers = { 'Accept': 'application/json', 'Authorization': auth_header, 'accept': 'application/json' } QBO_sandbox = self.get_provider().get_settings().get('SANDBOX', False) if QBO_sandbox: r = requests.get(self.profile_test, headers=headers) else: r = requests.get(self.profile_url, headers=headers) # status_code = r.status_code response = json.loads(r.text) return response oauth2_login = OAuth2LoginView.adapter_view(QuickBooksOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(QuickBooksOAuth2Adapter)
import requests from authentication.socialaccount.providers.oauth2.views import ( OAuth2Adapter, OAuth2CallbackView, OAuth2LoginView, ) from .provider import KakaoProvider class KakaoOAuth2Adapter(OAuth2Adapter): provider_id = KakaoProvider.id access_token_url = 'https://kauth.kakao.com/oauth/token' authorize_url = 'https://kauth.kakao.com/oauth/authorize' profile_url = 'https://kapi.kakao.com/v2/user/me' def complete_login(self, request, app, token, **kwargs): headers = {'Authorization': 'Bearer {0}'.format(token.token)} resp = requests.get(self.profile_url, headers=headers) extra_data = resp.json() return self.get_provider().sociallogin_from_response( request, extra_data) oauth2_login = OAuth2LoginView.adapter_view(KakaoOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(KakaoOAuth2Adapter)
from authentication.socialaccount.providers.oauth2.views import ( OAuth2Adapter, OAuth2CallbackView, OAuth2LoginView, ) from .provider import ( FXA_OAUTH_ENDPOINT, FXA_PROFILE_ENDPOINT, FirefoxAccountsProvider, ) class FirefoxAccountsOAuth2Adapter(OAuth2Adapter): provider_id = FirefoxAccountsProvider.id access_token_url = FXA_OAUTH_ENDPOINT + '/token' authorize_url = FXA_OAUTH_ENDPOINT + '/authorization' profile_url = FXA_PROFILE_ENDPOINT + '/profile' def complete_login(self, request, app, token, **kwargs): headers = {'Authorization': 'Bearer {0}'.format(token.token)} resp = requests.get(self.profile_url, headers=headers) extra_data = resp.json() return self.get_provider().sociallogin_from_response(request, extra_data) oauth2_login = OAuth2LoginView.adapter_view(FirefoxAccountsOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(FirefoxAccountsOAuth2Adapter)
) class JupyterHubAdapter(OAuth2Adapter): provider_id = JupyterHubProvider.id settings = app_settings.PROVIDERS.get(provider_id, {}) provider_base_url = settings.get("API_URL", '') access_token_url = '{0}/hub/api/oauth2/token'.format(provider_base_url) authorize_url = '{0}/hub/api/oauth2/authorize'.format(provider_base_url) profile_url = '{0}/hub/api/user'.format(provider_base_url) def complete_login(self, request, app, access_token, **kwargs): headers = { 'Authorization': 'Bearer {0}'.format(access_token) } extra_data = requests.get(self.profile_url, headers=headers) user_profile = extra_data.json() return self.get_provider().sociallogin_from_response( request, user_profile ) oauth2_login = OAuth2LoginView.adapter_view(JupyterHubAdapter) oauth2_callback = OAuth2CallbackView.adapter_view(JupyterHubAdapter)
class Auth0OAuth2Adapter(OAuth2Adapter): provider_id = Auth0Provider.id supports_state = True settings = app_settings.PROVIDERS.get(provider_id, {}) provider_base_url = settings.get("AUTH0_URL") access_token_url = '{0}/oauth/token'.format(provider_base_url) authorize_url = '{0}/authorize'.format(provider_base_url) profile_url = '{0}/userinfo'.format(provider_base_url) def complete_login(self, request, app, token, response): extra_data = requests.get(self.profile_url, params={ 'access_token': token.token }).json() extra_data = { 'user_id': extra_data['sub'], 'id': extra_data['sub'], 'name': extra_data['name'], 'email': extra_data['email'] } return self.get_provider().sociallogin_from_response( request, extra_data) oauth2_login = OAuth2LoginView.adapter_view(Auth0OAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(Auth0OAuth2Adapter)
from .provider import WindowsLiveProvider class WindowsLiveOAuth2Adapter(OAuth2Adapter): provider_id = WindowsLiveProvider.id access_token_url = 'https://login.live.com/oauth20_token.srf' authorize_url = 'https://login.live.com/oauth20_authorize.srf' profile_url = 'https://apis.live.net/v5.0/me' def complete_login(self, request, app, token, **kwargs): headers = {'Authorization': 'Bearer {0}'.format(token.token)} resp = requests.get(self.profile_url, headers=headers) # example of whats returned (in python format): # {'first_name': 'James', 'last_name': 'Smith', # 'name': 'James Smith', 'locale': 'en_US', 'gender': None, # 'emails': {'personal': None, 'account': '*****@*****.**', # 'business': None, 'preferred': '*****@*****.**'}, # 'link': 'https://profile.live.com/', # 'updated_time': '2014-02-07T00:35:27+0000', # 'id': '83605e110af6ff98'} resp.raise_for_status() extra_data = resp.json() return self.get_provider().sociallogin_from_response( request, extra_data) oauth2_login = OAuth2LoginView.adapter_view(WindowsLiveOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(WindowsLiveOAuth2Adapter)
OAuth2LoginView, ) from .provider import FoursquareProvider class FoursquareOAuth2Adapter(OAuth2Adapter): provider_id = FoursquareProvider.id access_token_url = 'https://foursquare.com/oauth2/access_token' # Issue ?? -- this one authenticates over and over again... # authorize_url = 'https://foursquare.com/oauth2/authorize' authorize_url = 'https://foursquare.com/oauth2/authenticate' profile_url = 'https://api.foursquare.com/v2/users/self' def complete_login(self, request, app, token, **kwargs): # Foursquare needs a version number for their API requests as # documented here # https://developer.foursquare.com/overview/versioning resp = requests.get(self.profile_url, params={ 'oauth_token': token.token, 'v': '20140116' }) extra_data = resp.json()['response']['user'] return self.get_provider().sociallogin_from_response( request, extra_data) oauth2_login = OAuth2LoginView.adapter_view(FoursquareOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(FoursquareOAuth2Adapter)
import requests from authentication.socialaccount.providers.oauth2.views import ( OAuth2Adapter, OAuth2CallbackView, OAuth2LoginView, ) from .provider import BitlyProvider class BitlyOAuth2Adapter(OAuth2Adapter): provider_id = BitlyProvider.id access_token_url = 'https://api-ssl.bitly.com/oauth/access_token' authorize_url = 'https://bitly.com/oauth/authorize' profile_url = 'https://api-ssl.bitly.com/v3/user/info' supports_state = False def complete_login(self, request, app, token, **kwargs): resp = requests.get( self.profile_url, params={'access_token': token.token} ) extra_data = resp.json()['data'] return self.get_provider().sociallogin_from_response(request, extra_data) oauth2_login = OAuth2LoginView.adapter_view(BitlyOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(BitlyOAuth2Adapter)
https://www.patreon.com/platform/documentation/oauth """ import requests from authentication.socialaccount.providers.oauth2.views import ( OAuth2Adapter, OAuth2CallbackView, OAuth2LoginView, ) from .provider import PatreonProvider class PatreonOAuth2Adapter(OAuth2Adapter): provider_id = PatreonProvider.id access_token_url = 'https://www.patreon.com/api/oauth2/token' authorize_url = 'https://www.patreon.com/oauth2/authorize' profile_url = 'https://www.patreon.com/api/oauth2/api/current_user' def complete_login(self, request, app, token, **kwargs): resp = requests.get(self.profile_url, headers={'Authorization': 'Bearer ' + token.token}) extra_data = resp.json().get('data') return self.get_provider().sociallogin_from_response( request, extra_data) oauth2_login = OAuth2LoginView.adapter_view(PatreonOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(PatreonOAuth2Adapter)
OAuth2CallbackView, OAuth2LoginView, ) class GlobusAdapter(OAuth2Adapter): provider_id = GlobusProvider.id provider_default_url = 'https://auth.globus.org/v2/oauth2' provider_base_url = 'https://auth.globus.org/v2/oauth2' access_token_url = '{0}/token'.format(provider_base_url) authorize_url = '{0}/authorize'.format(provider_base_url) profile_url = '{0}/userinfo'.format(provider_base_url) def complete_login(self, request, app, token, response): extra_data = requests.get(self.profile_url, params={ 'access_token': token.token }, headers={ 'Authorization': 'Bearer ' + token.token, }) return self.get_provider().sociallogin_from_response( request, extra_data.json() ) oauth2_login = OAuth2LoginView.adapter_view(GlobusAdapter) oauth2_callback = OAuth2CallbackView.adapter_view(GlobusAdapter)
@property def access_token_url(self): path = "v1/identity/openidconnect/tokenservice" return 'https://api.{0}/{1}'.format(self._get_endpoint(), path) @property def profile_url(self): path = 'v1/identity/openidconnect/userinfo' return 'https://api.{0}/{1}'.format(self._get_endpoint(), path) def _get_endpoint(self): settings = self.get_provider().get_settings() if settings.get('MODE') == 'live': return 'paypal.com' else: return 'sandbox.paypal.com' def complete_login(self, request, app, token, **kwargs): response = requests.post(self.profile_url, params={ 'schema': 'openid', 'access_token': token }) extra_data = response.json() return self.get_provider().sociallogin_from_response( request, extra_data) oauth2_login = OAuth2LoginView.adapter_view(PaypalOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(PaypalOAuth2Adapter)
import requests from authentication.socialaccount.providers.oauth2.views import ( OAuth2Adapter, OAuth2CallbackView, OAuth2LoginView, ) from .provider import NaverProvider class NaverOAuth2Adapter(OAuth2Adapter): provider_id = NaverProvider.id access_token_url = 'https://nid.naver.com/oauth2.0/token' authorize_url = 'https://nid.naver.com/oauth2.0/authorize' profile_url = 'https://openapi.naver.com/v1/nid/me' def complete_login(self, request, app, token, **kwargs): headers = {'Authorization': 'Bearer {0}'.format(token.token)} resp = requests.get(self.profile_url, headers=headers) extra_data = resp.json().get('response') return self.get_provider().sociallogin_from_response( request, extra_data) oauth2_login = OAuth2LoginView.adapter_view(NaverOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(NaverOAuth2Adapter)