import requests from allauth.socialaccount.providers.oauth2.views import (OAuth2Adapter, OAuth2LoginView, OAuth2CallbackView) from .provider import WeiboProvider class WeiboOAuth2Adapter(OAuth2Adapter): provider_id = WeiboProvider.id access_token_url = 'https://api.weibo.com/oauth2/access_token' authorize_url = 'https://api.weibo.com/oauth2/authorize' profile_url = 'https://api.weibo.com/2/users/show.json' def complete_login(self, request, app, token, **kwargs): uid = kwargs.get('response', {}).get('uid') resp = requests.get(self.profile_url, params={ 'access_token': token.token, 'uid': uid }) extra_data = resp.json() return self.get_provider().sociallogin_from_response( request, extra_data) oauth2_login = OAuth2LoginView.adapter_view(WeiboOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(WeiboOAuth2Adapter)
import requests from allauth.socialaccount.providers.oauth2.views import (OAuth2Adapter, OAuth2LoginView, OAuth2CallbackView) 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)
from allauth.socialaccount.providers.oauth2.views import ( OAuth2Adapter, OAuth2CallbackView, OAuth2LoginView, ) from .provider import StackExchangeProvider class StackExchangeOAuth2Adapter(OAuth2Adapter): provider_id = StackExchangeProvider.id access_token_url = 'https://stackexchange.com/oauth/access_token' authorize_url = 'https://stackexchange.com/oauth' profile_url = 'https://api.stackexchange.com/2.1/me' def complete_login(self, request, app, token, **kwargs): provider = self.get_provider() site = provider.get_site() resp = requests.get(self.profile_url, params={'access_token': token.token, 'key': app.key, 'site': site}) extra_data = resp.json()['items'][0] return self.get_provider().sociallogin_from_response(request, extra_data) oauth2_login = OAuth2LoginView.adapter_view(StackExchangeOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(StackExchangeOAuth2Adapter)
from allauth.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)
from provider import RedboothProvider User = get_user_model() class RedboothOAuth2Adapter(OAuth2Adapter): provider_id = RedboothProvider.id access_token_url = "https://redbooth.com/oauth/token" authorize_url = "https://redbooth.com/oauth/authorize" profile_url = "https://redbooth.com/api/1/account" def complete_login(self, request, app, token): resp = requests.get( self.profile_url, params={"access_token": token.token}, disable_ssl_certificate_validation=True ) extra_data = resp.json uid = str(extra_data["id"]) user = User( username=extra_data.get("username", ""), email=extra_data.get("email", ""), first_name=extra_data.get("first_name", ""), last_name=extra_data.get("last_name", ""), ) account = SocialAccount(user=user, uid=uid, extra_data=extra_data, provider=self.provider_id) return SocialLogin(account) oauth2_login = OAuth2LoginView.adapter_view(RedboothOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(RedboothOAuth2Adapter)
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'] uid = str(extra_data['login']) user = get_adapter().populate_new_user( username=extra_data['login'], name=extra_data.get('full_name') ) account = SocialAccount( user=user, uid=uid, extra_data=extra_data, provider=self.provider_id ) return SocialLogin(account) oauth2_login = OAuth2LoginView.adapter_view(BitlyOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(BitlyOAuth2Adapter)
OAuth2LoginView, ) from .provider import DropboxOAuth2Provider class DropboxOAuth2Adapter(OAuth2Adapter): provider_id = DropboxOAuth2Provider.id access_token_url = 'https://api.dropbox.com/oauth2/token' authorize_url = 'https://www.dropbox.com/oauth2/authorize' profile_url = 'https://api.dropbox.com/2/users/get_current_account' redirect_uri_protocol = 'https' def complete_login(self, request, app, token, **kwargs): extra_data = requests.post(self.profile_url, headers={ 'Authorization': 'Bearer %s' % (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(DropboxOAuth2Adapter) oauth_callback = OAuth2CallbackView.adapter_view(DropboxOAuth2Adapter)
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)
import requests from allauth.socialaccount.providers.oauth2.views import ( OAuth2Adapter, OAuth2LoginView, OAuth2CallbackView ) from .provider import HelsinkiOIDCProvider class HelsinkiOIDCOAuth2Adapter(OAuth2Adapter): provider_id = HelsinkiOIDCProvider.id access_token_url = 'https://api.hel.fi/sso/openid/token/' authorize_url = 'https://api.hel.fi/sso/openid/authorize/' profile_url = 'https://api.hel.fi/sso/openid/userinfo/' def complete_login(self, request, app, token, **kwargs): headers = {'Authorization': 'Bearer {0}'.format(token.token)} resp = requests.get(self.profile_url, headers=headers) assert resp.status_code == 200 extra_data = resp.json() return self.get_provider().sociallogin_from_response(request, extra_data) oauth2_login = OAuth2LoginView.adapter_view(HelsinkiOIDCOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(HelsinkiOIDCOAuth2Adapter)
from allauth.socialaccount.providers.oauth2.views import (OAuth2Adapter, OAuth2LoginView, OAuth2CallbackView) from .provider import LinkedInOAuth2Provider class LinkedInOAuth2Adapter(OAuth2Adapter): provider_id = LinkedInOAuth2Provider.id access_token_url = 'https://api.linkedin.com/uas/oauth2/accessToken' authorize_url = 'https://www.linkedin.com/uas/oauth2/authorization' profile_url = 'https://api.linkedin.com/v1/people/~' # See: # http://developer.linkedin.com/forum/unauthorized-invalid-or-expired-token-immediately-after-receiving-oauth2-token?page=1 # noqa access_token_method = 'GET' def complete_login(self, request, app, token, **kwargs): extra_data = self.get_user_info(token) return self.get_provider().sociallogin_from_response( request, extra_data) def get_user_info(self, token): fields = self.get_provider().get_profile_fields() url = self.profile_url + ':(%s)?format=json' % ','.join(fields) resp = requests.get(url, params={'oauth2_access_token': token.token}) return resp.json() oauth2_login = OAuth2LoginView.adapter_view(LinkedInOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(LinkedInOAuth2Adapter)
import requests from allauth.socialaccount.providers.oauth2.views import (OAuth2Adapter, OAuth2LoginView, OAuth2CallbackView) from .provider import OrcidProvider class OrcidOAuth2Adapter(OAuth2Adapter): provider_id = OrcidProvider.id # http://support.orcid.org/knowledgebase/articles/335483-the-public- # client-orcid-api authorize_url = 'https://orcid.org/oauth/authorize' access_token_url = 'https://pub.orcid.org/oauth/token' profile_url = 'https://pub.orcid.org/v1.1/%s/orcid-profile' def complete_login(self, request, app, token, **kwargs): resp = requests.get(self.profile_url % kwargs['response']['orcid'], params={'access_token': token.token}, headers={'accept': 'application/orcid+json'}) extra_data = resp.json() return self.get_provider().sociallogin_from_response(request, extra_data) oauth2_login = OAuth2LoginView.adapter_view(OrcidOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(OrcidOAuth2Adapter)
import requests from allauth.socialaccount.providers.discord.provider import DiscordProvider from allauth.socialaccount.providers.oauth2.views import ( OAuth2Adapter, OAuth2CallbackView, OAuth2LoginView, ) class DiscordOAuth2Adapter(OAuth2Adapter): provider_id = DiscordProvider.id access_token_url = "https://discord.com/api/oauth2/token" authorize_url = "https://discord.com/api/oauth2/authorize" profile_url = "https://discord.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)
import requests from allauth.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}) resp.raise_for_status() 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 .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)
# ORCID Public API (not Member API): # http://support.orcid.org/knowledgebase/articles/335483-the-public- # client-orcid-api #authorize_url = 'http://sandbox.orcid.org/oauth/authorize' #access_token_url = 'https://api.sandbox.orcid.org/oauth/token' #profile_url = 'http://pub.sandbox.orcid.org//v1.2/%s/orcid-profile' authorize_url = 'https://orcid.org/oauth/authorize' access_token_url = 'https://pub.orcid.org/oauth/token' profile_url = 'http://pub.orcid.org/v1.2/%s/orcid-profile' def complete_login(self, request, app, token, **kwargs): resp = requests.get(self.profile_url % kwargs['response']['orcid'], #TODO - uncomment this for production registry - params={'access_token': token.token}, headers={'accept': 'application/orcid+json'}) extra_data = resp.json() prov = self.get_provider().sociallogin_from_response(request, extra_data) return prov oauth2_login = OAuth2LoginView.adapter_view(OrcidOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(OrcidOAuth2Adapter)
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://api.coinbase.com/v2/user' def complete_login(self, request, app, token, **kwargs): response = requests.get(self.profile_url, params={'access_token': token}) extra_data = response.json()['data'] # 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) oauth2_login = OAuth2LoginView.adapter_view(CoinbaseOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(CoinbaseOAuth2Adapter)
OAuth2CallbackView) from allauth.socialaccount.models import SocialAccount, SocialLogin from allauth.socialaccount.adapter import get_adapter 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() uid = str(extra_data['id']) user = get_adapter() \ .populate_new_user(name=extra_data.get('full_name'), username=extra_data.get('username'), email=extra_data.get('email')) account = SocialAccount(user=user, uid=uid, extra_data=extra_data, provider=self.provider_id) return SocialLogin(account) oauth2_login = OAuth2LoginView.adapter_view(SoundCloudOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(SoundCloudOAuth2Adapter)
from allauth.socialaccount.providers.oauth2.views import ( OAuth2Adapter, OAuth2CallbackView, OAuth2LoginView, ) from .client import UntappdOAuth2Client from .provider import UntappdProvider class UntappdOAuth2Adapter(OAuth2Adapter): client_cls = UntappdOAuth2Client provider_id = UntappdProvider.id access_token_url = 'https://untappd.com/oauth/authorize/' access_token_method = 'GET' authorize_url = 'https://untappd.com/oauth/authenticate/' user_info_url = 'https://api.untappd.com/v4/user/info/' supports_state = False def complete_login(self, request, app, token, **kwargs): resp = requests.get(self.user_info_url, params={'access_token': token.token}) extra_data = resp.json() # TODO: get and store the email from the user info json return self.get_provider().sociallogin_from_response( request, extra_data) oauth2_login = OAuth2LoginView.adapter_view(UntappdOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(UntappdOAuth2Adapter)
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)
request, extra_data) 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 LinkedInOAuth2Provider class LinkedInOAuth2Adapter(OAuth2Adapter): provider_id = LinkedInOAuth2Provider.id access_token_url = 'https://api.linkedin.com/uas/oauth2/accessToken' authorize_url = 'https://www.linkedin.com/uas/oauth2/authorization' profile_url = 'https://api.linkedin.com/v1/people/~' # See: # http://developer.linkedin.com/forum/unauthorized-invalid-or-expired-token-immediately-after-receiving-oauth2-token?page=1 # noqa access_token_method = 'GET' def complete_login(self, request, app, token, **kwargs): extra_data = self.get_user_info(token) return self.get_provider().sociallogin_from_response( request, extra_data) def get_user_info(self, token): fields = self.get_provider().get_profile_fields() url = self.profile_url + ':(%s)?format=json' % ','.join(fields) resp = requests.get(url, headers={'Authorization': ' '.join(('Bearer', token.token)), 'x-li-src': 'msdk'}) resp.raise_for_status() return resp.json() oauth2_login = OAuth2LoginView.adapter_view(LinkedInOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(LinkedInOAuth2Adapter)
from allauth.socialaccount.providers.oauth2.views import ( OAuth2Adapter, OAuth2CallbackView, OAuth2LoginView, ) from .provider import MicrosoftGraphProvider class MicrosoftGraphOAuth2Adapter(OAuth2Adapter): provider_id = MicrosoftGraphProvider.id def __init__(self, request): super(MicrosoftGraphOAuth2Adapter, self).__init__(request) provider = self.get_provider() tenant = provider.get_settings().get("tenant") or "common" base_url = "https://login.microsoftonline.com/{0}".format(tenant) self.access_token_url = "{0}/oauth2/v2.0/token".format(base_url) self.authorize_url = "{0}/oauth2/v2.0/authorize".format(base_url) self.profile_url = "https://graph.microsoft.com/v1.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) extra_data = resp.json() return self.get_provider().sociallogin_from_response(request, extra_data) oauth2_login = OAuth2LoginView.adapter_view(MicrosoftGraphOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(MicrosoftGraphOAuth2Adapter)
profile_test = 'https://sandbox-accounts.platform.intuit.com/v1/openid_connect/userinfo' # NOQA profile_url = \ '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)
from allauth.socialaccount.providers.oauth2.views import ( OAuth2Adapter, OAuth2CallbackView, OAuth2LoginView, ) import requests from .provider import TwentyThreeAndMeProvider class TwentyTreeAndMeOAuth2Adapter(OAuth2Adapter): provider_id = TwentyThreeAndMeProvider.id access_token_url = 'https://api.twentythreeandme.com/token' authorize_url = 'https://api.twentythreeandme.com/authorize' profile_url = 'https://api.twentythreeandme.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 allauth.socialaccount.providers.oauth2.views import ( OAuth2Adapter, OAuth2CallbackView, OAuth2LoginView, ) from .provider import EveOnlineProvider class EveOnlineOAuth2Adapter(OAuth2Adapter): provider_id = EveOnlineProvider.id access_token_url = 'https://login.eveonline.com/oauth/token' authorize_url = 'https://login.eveonline.com/oauth/authorize' profile_url = 'https://login.eveonline.com/oauth/verify' def complete_login(self, request, app, token, **kwargs): resp = requests.get(self.profile_url, headers={'Authorization': 'Bearer ' + token.token}) extra_data = resp.json() return self.get_provider().sociallogin_from_response(request, extra_data) oauth2_login = OAuth2LoginView.adapter_view(EveOnlineOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(EveOnlineOAuth2Adapter)
from allauth.socialaccount.providers.oauth2.views import ( OAuth2Adapter, OAuth2CallbackView, OAuth2LoginView, ) from .provider import SpotifyOAuth2Provider class SpotifyOAuth2Adapter(OAuth2Adapter): provider_id = SpotifyOAuth2Provider.id access_token_url = 'https://accounts.spotify.com/api/token' authorize_url = 'https://accounts.spotify.com/authorize' profile_url = 'https://api.spotify.com/v1/me' def complete_login(self, request, app, token, **kwargs): extra_data_response = requests.get( self.profile_url, params={'access_token': token.token}) extra_data = extra_data_response.json() if "response" in kwargs and "scope" in kwargs["response"]: extra_data["scope"] = kwargs["response"]["scope"] return self.get_provider().sociallogin_from_response( request, extra_data) oauth_login = OAuth2LoginView.adapter_view(SpotifyOAuth2Adapter) oauth_callback = OAuth2CallbackView.adapter_view(SpotifyOAuth2Adapter)
import requests from allauth.socialaccount.providers.oauth2.views import (OAuth2Adapter, OAuth2LoginView, OAuth2CallbackView) from .provider import WeiboProvider class WeiboOAuth2Adapter(OAuth2Adapter): provider_id = WeiboProvider.id access_token_url = 'https://api.weibo.com/oauth2/access_token' authorize_url = 'https://api.weibo.com/oauth2/authorize' profile_url = 'https://api.weibo.com/2/users/show.json' def complete_login(self, request, app, token, **kwargs): uid = kwargs.get('response', {}).get('uid') resp = requests.get(self.profile_url, params={'access_token': token.token, 'uid': uid}) extra_data = resp.json() return self.get_provider().sociallogin_from_response(request, extra_data) oauth2_login = OAuth2LoginView.adapter_view(WeiboOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(WeiboOAuth2Adapter)
headers={ "kid": settings.SOCIAL_AUTH_APPLE_KEY_ID }, ).decode("utf-8") return client_secret def apple_complete_login(self, request, access_token): client_secret = AppleOAuth2Adapter.create_apple_client_secret() data = { "grant_type": "authorization_code", "code": access_token, "client_id": settings.SOCIAL_AUTH_APPLE_CLIENT_ID, "client_secret": client_secret, } response = AppleOAuth2Adapter.get_apple_token_verification(data) id_token = response.get("id_token", None) decoded = jwt.decode(id_token, "", verify=False) response.update(decoded) login = self.get_provider().sociallogin_from_response( request, response) return login def complete_login(self, request, app, token, **kwargs): return self.apple_complete_login(request, token.token) oauth2_login = OAuth2LoginView.adapter_view(AppleOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(AppleOAuth2Adapter)
OAuth2CallbackView) 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'} 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)
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 allauth.socialaccount.providers.oauth2.views import ( OAuth2Adapter, OAuth2CallbackView, OAuth2LoginView, ) from .provider import TwentyThreeAndMeProvider class TwentyTreeAndMeOAuth2Adapter(OAuth2Adapter): provider_id = TwentyThreeAndMeProvider.id access_token_url = 'https://api.twentythreeandme.com/token' authorize_url = 'https://api.twentythreeandme.com/authorize' profile_url = 'https://api.twentythreeandme.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)
email_url = "https://api.github.com/user/emails" def complete_login(self, request, app, token, **kwargs): session = requests_retry_session() headers = {"Authorization": f"token {token.token}"} profile_data = session.get(self.profile_url, headers=headers) profile_data.raise_for_status() extra_data = profile_data.json() email_data = session.get(self.email_url, headers=headers) email_data.raise_for_status() extra_data["email_addresses"] = email_data.json() return self.get_provider().sociallogin_from_response( request, extra_data) class KumaOAuth2LoginView(OAuth2LoginView): def dispatch(self, request): track_event(CATEGORY_SIGNUP_FLOW, ACTION_AUTH_STARTED, "github") next_url = get_next_redirect_url(request) or reverse( "users.my_edit_page") request.session["sociallogin_next_url"] = next_url request.session.modified = True return super(KumaOAuth2LoginView, self).dispatch(request) oauth2_login = redirect_in_maintenance_mode( KumaOAuth2LoginView.adapter_view(KumaGitHubOAuth2Adapter)) oauth2_callback = redirect_in_maintenance_mode( OAuth2CallbackView.adapter_view(KumaGitHubOAuth2Adapter))
import jwt from allauth.socialaccount.providers.oauth2.views import OAuth2Adapter, OAuth2CallbackView, OAuth2LoginView from django.conf import settings from .provider import YleTunnusProvider class YleTunnusOAuth2Adapter(OAuth2Adapter): provider_id = YleTunnusProvider.id access_token_url = 'https://auth.api.yle.fi/v1/token' authorize_url = 'https://auth.api.yle.fi/v1/authorize' def __init__(self, *args, **kwargs): self.auth_conf = settings.SOCIALACCOUNT_PROVIDERS['yletunnus']['AUTH_PARAMS'] app_params = '?app_id={}&app_key={}'.format(self.auth_conf['app_id'], self.auth_conf['app_key']) self.access_token_url += app_params return super(YleTunnusOAuth2Adapter, self).__init__(*args, **kwargs) def complete_login(self, request, app, token, **kwargs): data = jwt.decode(token.token, secret=app.secret, verify=False) return self.get_provider().sociallogin_from_response(request, data) oauth2_login = OAuth2LoginView.adapter_view(YleTunnusOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(YleTunnusOAuth2Adapter)
from allauth.socialaccount.providers.oauth2.views import ( OAuth2Adapter, OAuth2CallbackView, OAuth2LoginView, ) import requests from .provider import EveOnlineProvider class EveOnlineOAuth2Adapter(OAuth2Adapter): provider_id = EveOnlineProvider.id access_token_url = 'https://login.eveonline.com/oauth/token' authorize_url = 'https://login.eveonline.com/oauth/authorize' profile_url = 'https://login.eveonline.com/oauth/verify' def complete_login(self, request, app, token, **kwargs): resp = requests.get(self.profile_url, headers={'Authorization': 'Bearer ' + token.token}) extra_data = resp.json() return self.get_provider().sociallogin_from_response(request, extra_data) oauth2_login = OAuth2LoginView.adapter_view(EveOnlineOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(EveOnlineOAuth2Adapter)
provider_id = PinterestProvider.id provider_default_url = 'api.pinterest.com' provider_default_api_version = 'v1' settings = app_settings.PROVIDERS.get(provider_id, {}) provider_base_url = settings.get('PINTEREST_URL', provider_default_url) provider_api_version = settings.get( 'PINTEREST_VERSION', provider_default_api_version) access_token_url = 'https://{0}/{1}/oauth/token'.format( provider_base_url, provider_api_version ) authorize_url = 'https://{0}/oauth/'.format(provider_base_url) profile_url = 'https://{0}/{1}/me'.format( provider_base_url, provider_api_version ) def complete_login(self, request, app, token, **kwargs): response = requests.get(self.profile_url, params={'access_token': token.token}) extra_data = response.json() return self.get_provider().sociallogin_from_response( request, extra_data) oauth2_login = OAuth2LoginView.adapter_view(PinterestOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(PinterestOAuth2Adapter)
import requests from allauth.socialaccount.providers.oauth2.views import ( OAuth2Adapter, OAuth2CallbackView, OAuth2LoginView, ) from .provider import ExistProvider class ExistOAuth2Adapter(OAuth2Adapter): provider_id = ExistProvider.id access_token_url = "https://exist.io/oauth2/access_token" authorize_url = "https://exist.io/oauth2/authorize" profile_url = "https://exist.io/api/1/users/$self/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(ExistOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(ExistOAuth2Adapter)
import requests from allauth.socialaccount.providers.oauth2.views import ( OAuth2Adapter, OAuth2CallbackView, OAuth2LoginView, ) from .provider import BaiduProvider class BaiduOAuth2Adapter(OAuth2Adapter): provider_id = BaiduProvider.id access_token_url = 'https://openapi.baidu.com/oauth/2.0/token' authorize_url = 'https://openapi.baidu.com/oauth/2.0/authorize' profile_url = 'https://openapi.baidu.com/rest/2.0/passport/users/getLoggedInUser' # noqa 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(BaiduOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(BaiduOAuth2Adapter)
from allauth.socialaccount.providers.oauth2.views import ( OAuth2Adapter, OAuth2CallbackView, 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)
user=user) return SocialLogin(account) class FacebookOAuth2Adapter(OAuth2Adapter): provider_id = FacebookProvider.id authorize_url = 'https://www.facebook.com/dialog/oauth' access_token_url = 'https://graph.facebook.com/oauth/access_token' def complete_login(self, request, app, access_token): return fb_complete_login(app, access_token) oauth2_login = OAuth2LoginView.adapter_view(FacebookOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(FacebookOAuth2Adapter) def login_by_token(request): ret = None if request.method == 'POST': form = FacebookConnectForm(request.POST) if form.is_valid(): try: app = providers.registry.by_id(FacebookProvider.id) \ .get_app(request) access_token = form.cleaned_data['access_token'] token = SocialToken(app=app, token=access_token) login = fb_complete_login(app, token) login.token = token
OAuth2Adapter, 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)
import requests from allauth.socialaccount.providers.oauth2.views import (OAuth2Adapter, OAuth2LoginView, OAuth2CallbackView) from .provider import GoogleProvider class GoogleOAuth2Adapter(OAuth2Adapter): provider_id = GoogleProvider.id access_token_url = 'https://accounts.google.com/o/oauth2/token' authorize_url = 'https://accounts.google.com/o/oauth2/auth' profile_url = 'https://www.googleapis.com/oauth2/v1/userinfo' def complete_login(self, request, app, token, **kwargs): resp = requests.get(self.profile_url, params={'access_token': token.token, 'alt': 'json'}) resp.raise_for_status() extra_data = resp.json() login = self.get_provider() \ .sociallogin_from_response(request, extra_data) return login oauth2_login = OAuth2LoginView.adapter_view(GoogleOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(GoogleOAuth2Adapter)
import requests from allauth.socialaccount.providers.oauth2.views import (OAuth2Adapter, OAuth2LoginView, OAuth2CallbackView) 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)
import requests from allauth.socialaccount.providers.oauth2.views import OAuth2Adapter, OAuth2LoginView, OAuth2CallbackView from allauth.socialaccount.models import SocialAccount, SocialLogin from allauth.socialaccount.adapter import get_adapter from .provider import TwitchProvider class TwitchOAuth2Adapter(OAuth2Adapter): provider_id = TwitchProvider.id access_token_url = "https://api.twitch.tv/kraken/oauth2/token" authorize_url = "https://api.twitch.tv/kraken/oauth2/authorize" profile_url = "https://api.twitch.tv/kraken/user" def complete_login(self, request, app, token, **kwargs): resp = requests.get(self.profile_url, params={"oauth_token": token.token}) extra_data = resp.json() uid = str(extra_data["_id"]) user = get_adapter().populate_new_user( username=extra_data.get("display_name"), name=extra_data.get("name"), email=extra_data.get("email") ) account = SocialAccount(user=user, uid=uid, extra_data=extra_data, provider=self.provider_id) return SocialLogin(account) oauth2_login = OAuth2LoginView.adapter_view(TwitchOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(TwitchOAuth2Adapter)
TOKEN_URL = ENVIRONMENTS[ENV]["token_url"] 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 allauth.socialaccount.providers.oauth2.views import ( OAuth2Adapter, OAuth2CallbackView, OAuth2LoginView, ) from .provider import SpotifyOAuth2Provider class SpotifyOAuth2Adapter(OAuth2Adapter): provider_id = SpotifyOAuth2Provider.id access_token_url = 'https://accounts.spotify.com/api/token' authorize_url = 'https://accounts.spotify.com/authorize' profile_url = 'https://api.spotify.com/v1/me' def complete_login(self, request, app, token, **kwargs): extra_data = requests.get(self.profile_url, params={ 'access_token': token.token }) return self.get_provider().sociallogin_from_response( request, extra_data.json() ) oauth_login = OAuth2LoginView.adapter_view(SpotifyOAuth2Adapter) oauth_callback = OAuth2CallbackView.adapter_view(SpotifyOAuth2Adapter)
OAuth2CallbackView) 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'] uid = str(extra_data['login']) account = SocialAccount(uid=uid, extra_data=extra_data, provider=self.provider_id) account.user = get_adapter().populate_new_user( request, account, username=extra_data['login'], name=extra_data.get('full_name')) return SocialLogin(account) oauth2_login = OAuth2LoginView.adapter_view(BitlyOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(BitlyOAuth2Adapter)
class OdnoklassnikiOAuth2Adapter(OAuth2Adapter): provider_id = OdnoklassnikiProvider.id access_token_url = 'http://api.odnoklassniki.ru/oauth/token.do' authorize_url = 'http://www.odnoklassniki.ru/oauth/authorize' profile_url = 'http://api.odnoklassniki.ru/fb.do' access_token_method = 'POST' def complete_login(self, request, app, token, **kwargs): data = {'method': 'users.getCurrentUser', 'access_token': token.token, 'fields': ','.join(USER_FIELDS), 'format': 'JSON', 'application_key': app.key} suffix = md5( '{0:s}{1:s}'.format( data['access_token'], app.secret).encode('utf-8')).hexdigest() check_list = sorted(['{0:s}={1:s}'.format(k, v) for k, v in data.items() if k != 'access_token']) data['sig'] = md5( (''.join(check_list) + suffix).encode('utf-8')).hexdigest() response = requests.get(self.profile_url, params=data) extra_data = response.json() return self.get_provider().sociallogin_from_response(request, extra_data) oauth2_login = OAuth2LoginView.adapter_view(OdnoklassnikiOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(OdnoklassnikiOAuth2Adapter)
from allauth.socialaccount.providers.oauth2.views import (OAuth2Adapter, OAuth2LoginView, OAuth2CallbackView) from .provider import RedditProvider class RedditAdapter(OAuth2Adapter): provider_id = RedditProvider.id access_token_url = 'https://www.reddit.com/api/v1/access_token' authorize_url = 'https://www.reddit.com/api/v1/authorize' profile_url = 'https://oauth.reddit.com/api/v1/me' basic_auth = True headers = {"User-Agent": "django-allauth-header"} # After successfully logging in, use access token to retrieve user info def complete_login(self, request, app, token, **kwargs): headers = {"Authorization": "bearer " + token.token} headers.update(self.headers) extra_data = requests.get(self.profile_url, headers=headers) # 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()) oauth2_login = OAuth2LoginView.adapter_view(RedditAdapter) oauth2_callback = OAuth2CallbackView.adapter_view(RedditAdapter)
OAuth2LoginView, OAuth2CallbackView) from .provider import CoinbaseProvider class CoinbaseOAuth2Adapter(OAuth2Adapter): provider_id = CoinbaseProvider.id supports_state = False @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)
import requests from allauth.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)
import requests from allauth.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/v1/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)
return login class FacebookOAuth2Adapter(OAuth2Adapter): provider_id = FacebookProvider.id authorize_url = 'https://www.facebook.com/dialog/oauth' access_token_url = GRAPH_API_URL + '/oauth/access_token' expires_in_key = 'expires' def complete_login(self, request, app, access_token, **kwargs): return fb_complete_login(request, app, access_token) oauth2_login = OAuth2LoginView.adapter_view(FacebookOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(FacebookOAuth2Adapter) def login_by_token(request): ret = None auth_exception = None if request.method == 'POST': form = FacebookConnectForm(request.POST) if form.is_valid(): try: provider = providers.registry.by_id(FacebookProvider.id, request) login_options = provider.get_fb_login_options(request) app = provider.get_app(request) access_token = form.cleaned_data['access_token'] if login_options.get('auth_type') == 'reauthenticate':
import requests class GitLabOAuth2Adapter(OAuth2Adapter): provider_id = GitLabProvider.id provider_default_url = 'https://gitlab.com' provider_api_version = 'v3' settings = app_settings.PROVIDERS.get(provider_id, {}) provider_base_url = settings.get('GITLAB_URL', provider_default_url) access_token_url = '{0}/oauth/token'.format(provider_base_url) authorize_url = '{0}/oauth/authorize'.format(provider_base_url) profile_url = '{0}/api/{1}/user'.format( provider_base_url, provider_api_version ) def complete_login(self, request, app, token, response): extra_data = requests.get(self.profile_url, params={ 'access_token': token.token }) return self.get_provider().sociallogin_from_response( request, extra_data.json() ) oauth2_login = OAuth2LoginView.adapter_view(GitLabOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(GitLabOAuth2Adapter)
# from the same host as the request. # Note! This is the same in kuma.users.providers.github.KumaOAuth2LoginView # See https://github.com/mdn/kuma/issues/6759 http_referer = request.META.get("HTTP_REFERER") if http_referer: if urlparse(http_referer).netloc == request.get_host(): track_event(CATEGORY_SIGNUP_FLOW, ACTION_AUTH_STARTED, "google") # This is a temporary solution whilst Kuma needs to work for the prod # old Kuma front-end and at the same time the new redirects-based Yari. # If `allauth` decides to render the `signup` view rather than redirect # back based on the `?next=`, then that view will know this is Yari. # We can remove this hack once Kuma does 0% HTML responses and just # does redirects + JSON to back up Yari. if request.GET.get("yarisignup"): request.session["yari_signup"] = True next_url = get_next_redirect_url(request) if next_url: request.session["sociallogin_next_url"] = next_url return super().dispatch(request) oauth2_login = redirect_in_maintenance_mode( KumaOAuth2LoginView.adapter_view(GoogleOAuth2Adapter) ) oauth2_callback = redirect_in_maintenance_mode( OAuth2CallbackView.adapter_view(GoogleOAuth2Adapter) )
class VKOAuth2Adapter(OAuth2Adapter): provider_id = VKProvider.id access_token_url = 'https://oauth.vk.com/access_token' authorize_url = 'https://oauth.vk.com/authorize' profile_url = 'https://api.vk.com/method/users.get' def complete_login(self, request, app, token, **kwargs): uid = kwargs['response'].get('user_id') params = { 'v': '3.0', 'access_token': token.token, 'fields': ','.join(USER_FIELDS), } if uid: params['user_ids'] = uid resp = requests.get(self.profile_url, params=params) resp.raise_for_status() extra_data = resp.json()['response'][0] email = kwargs['response'].get('email') if email: extra_data['email'] = email return self.get_provider().sociallogin_from_response(request, extra_data) oauth2_login = OAuth2LoginView.adapter_view(VKOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(VKOAuth2Adapter)
from allauth.socialaccount.providers.oauth2.views import (OAuth2Adapter, OAuth2LoginView, OAuth2CallbackView) from .provider import StackExchangeProvider class StackExchangeOAuth2Adapter(OAuth2Adapter): provider_id = StackExchangeProvider.id access_token_url = 'https://stackexchange.com/oauth/access_token' authorize_url = 'https://stackexchange.com/oauth' profile_url = 'https://api.stackexchange.com/2.1/me' def complete_login(self, request, app, token, **kwargs): provider = self.get_provider() site = provider.get_site() resp = requests.get(self.profile_url, params={ 'access_token': token.token, 'key': app.key, 'site': site }) extra_data = resp.json()['items'][0] return self.get_provider().sociallogin_from_response( request, extra_data) oauth2_login = OAuth2LoginView.adapter_view(StackExchangeOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(StackExchangeOAuth2Adapter)
We store those email addresses in the extra data of each account. """ email_url = 'https://api.github.com/user/emails' def complete_login(self, request, app, token, **kwargs): params = {'access_token': token.token} profile_data = requests.get(self.profile_url, params=params) extra_data = profile_data.json() email_data = requests.get(self.email_url, params=params) extra_data['email_addresses'] = email_data.json() return self.get_provider().sociallogin_from_response(request, extra_data) class KumaOAuth2LoginView(OAuth2LoginView): def dispatch(self, request): next_url = (get_next_redirect_url(request) or reverse('users.my_edit_page')) request.session['sociallogin_next_url'] = next_url request.session.modified = True return super(KumaOAuth2LoginView, self).dispatch(request) oauth2_login = redirect_in_maintenance_mode( KumaOAuth2LoginView.adapter_view(KumaGitHubOAuth2Adapter) ) oauth2_callback = redirect_in_maintenance_mode( OAuth2CallbackView.adapter_view(KumaGitHubOAuth2Adapter) )
class RedditAdapter(OAuth2Adapter): provider_id = RedditProvider.id access_token_url = 'https://www.reddit.com/api/v1/access_token' authorize_url = 'https://www.reddit.com/api/v1/authorize' profile_url = 'https://oauth.reddit.com/api/v1/me' basic_auth = True settings = app_settings.PROVIDERS.get(provider_id, {}) # Allow custom User Agent to comply with reddit API limits headers = { 'User-Agent': settings.get('USER_AGENT', 'django-allauth-header')} def complete_login(self, request, app, token, **kwargs): headers = { "Authorization": "bearer " + token.token} headers.update(self.headers) extra_data = requests.get(self.profile_url, headers=headers) # 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() ) oauth2_login = OAuth2LoginView.adapter_view(RedditAdapter) oauth2_callback = OAuth2CallbackView.adapter_view(RedditAdapter)
# -*- coding: utf-8 -*- import requests from allauth.socialaccount.providers.oauth2.views import (OAuth2Adapter, OAuth2LoginView, OAuth2CallbackView) from .provider import YandexProvider class YandexOAuth2Adapter(OAuth2Adapter): provider_id = YandexProvider.id access_token_url = 'https://oauth.yandex.ru/token' authorize_url = 'https://oauth.yandex.ru/authorize' profile_url = 'https://login.yandex.ru/info' def complete_login(self, request, app, token, **kwargs): resp = requests.get(self.profile_url, params={'format': 'json', 'oauth_token': token.token}) extra_data = resp.json() return self.get_provider().sociallogin_from_response(request, extra_data) oauth2_login = OAuth2LoginView.adapter_view(YandexOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(YandexOAuth2Adapter)
profile_url = '{}/profile/'.format(settings.OAUTH_SERVER_BASEURL) # Accessed by the user browser, must be reachable by the host authorize_url = '{}/o/authorize/'.format(settings.OAUTH_SERVER_BASEURL) # NOTE: trailing slashes in URLs are important, don't miss it 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) def authentication_error(self, request, provider_id, error=None, exception=None, extra_context=None): logging.error( 'Error in social authentication cycle. [Provider: {}]'.format( provider_id)) if exception: logging.exception(exception) oauth2_login = OAuth2LoginView.adapter_view(NewOAuth2Adapter) oauth2_callback = OAuth2CallbackView.adapter_view(NewOAuth2Adapter)