improvements for using module in portail citoyen 2

Closes #5373
This commit is contained in:
Serghei Mihai 2014-09-02 11:36:38 +02:00
parent d9fd5d60b7
commit b1e8ae2e83
4 changed files with 33 additions and 16 deletions

View File

@ -1 +1 @@
__version__ = '0.1'

View File

@ -3,6 +3,7 @@ import sys
class AppSettings(object):
__defaults = {
'ADMIN_ROLE': None,
'VERIFY': True,
}
def __init__(self, prefix):

View File

@ -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()

View File

@ -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)