parent
d9fd5d60b7
commit
b1e8ae2e83
|
@ -1 +1 @@
|
|||
__version__ = '0.1'
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@ import sys
|
|||
class AppSettings(object):
|
||||
__defaults = {
|
||||
'ADMIN_ROLE': None,
|
||||
'VERIFY': True,
|
||||
}
|
||||
|
||||
def __init__(self, prefix):
|
||||
|
|
|
@ -3,8 +3,12 @@ from allauth.socialaccount.providers.base import ProviderAccount
|
|||
from allauth.socialaccount.providers.oauth2.provider import OAuth2Provider
|
||||
from allauth.account.models import EmailAddress
|
||||
|
||||
import logging
|
||||
|
||||
from . import app_settings
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
class Authentic2Account(ProviderAccount):
|
||||
def to_str(self):
|
||||
return self.account.uid
|
||||
|
@ -13,7 +17,7 @@ class Authentic2Account(ProviderAccount):
|
|||
class Authentic2Provider(OAuth2Provider):
|
||||
id = 'authentic2'
|
||||
name = 'Authentic2'
|
||||
package = 'allauth_a2'
|
||||
package = 'allauth_authentic2'
|
||||
account_class = Authentic2Account
|
||||
|
||||
def extract_uid(self, data):
|
||||
|
@ -21,8 +25,8 @@ class Authentic2Provider(OAuth2Provider):
|
|||
|
||||
def extract_common_fields(self, data):
|
||||
return dict(email=data.get('email'),
|
||||
username=data.get('username'),
|
||||
name=data.get('displayname'))
|
||||
first_name=data.get('first_name'),
|
||||
last_name=data.get('last_name'))
|
||||
|
||||
def extract_email_addresses(self, data):
|
||||
ret = [EmailAddress(email=data['email'],
|
||||
|
@ -30,15 +34,22 @@ class Authentic2Provider(OAuth2Provider):
|
|||
primary=True)]
|
||||
return ret
|
||||
|
||||
def sociallogin_from_response(self, request, response):
|
||||
sociallogin = self(Authentic2Provider, self).sociallogin_from_response(
|
||||
request, response)
|
||||
if app_settings.ADMIN_ROLE in response.get('role', []):
|
||||
sociallogin.account.user.is_superuser = True
|
||||
sociallogin.account.user.is_staff = True
|
||||
return sociallogin
|
||||
|
||||
|
||||
|
||||
|
||||
providers.registry.register(Authentic2Provider)
|
||||
|
||||
from allauth.socialaccount.signals import pre_social_login
|
||||
from django.dispatch import receiver
|
||||
|
||||
@receiver(pre_social_login)
|
||||
def pre_social_login_populate_user(sender, request, sociallogin, **kwargs):
|
||||
account = sociallogin.account
|
||||
data = account.extra_data
|
||||
user = account.user
|
||||
if 'first_name' in data:
|
||||
user.first_name = data['first_name']
|
||||
if 'last_name' in data:
|
||||
user.last_name = data['last_name']
|
||||
if app_settings.ADMIN_ROLE in data.get('role', []):
|
||||
user.is_superuser = True
|
||||
user.is_staff = True
|
||||
if user.id:
|
||||
user.save()
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import urlparse
|
||||
import requests
|
||||
import logging
|
||||
|
||||
from django.core.exceptions import ImproperlyConfigured
|
||||
|
||||
|
@ -8,6 +9,8 @@ from allauth.socialaccount.providers.oauth2.views import (OAuth2Adapter,
|
|||
OAuth2CallbackView)
|
||||
from .provider import Authentic2Provider
|
||||
|
||||
from . import app_settings
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
class Authentic2OAuth2Adapter(OAuth2Adapter):
|
||||
provider_id = Authentic2Provider.id
|
||||
|
@ -33,8 +36,10 @@ class Authentic2OAuth2Adapter(OAuth2Adapter):
|
|||
|
||||
def complete_login(self, request, app, token, **kwargs):
|
||||
resp = requests.get(self.profile_url,
|
||||
headers={'authorization': 'Bearer %s' % token.token})
|
||||
headers={'authorization': 'Bearer %s' % token.token},
|
||||
verify=bool(app_settings.VERIFY))
|
||||
extra_data = resp.json()
|
||||
logger.debug('received profile data: %r', extra_data)
|
||||
return self.get_provider().sociallogin_from_response(request,
|
||||
extra_data)
|
||||
|
||||
|
|
Reference in New Issue