Esempio n. 1
0
    def create_user(self, claims):
        """
        Create a user account for the given claims.

        This method is overridden to ensure we create a user account
        which will work in the DUA world.
        """
        username = claims.get("preferred_username", default_username_algo(claims["email"]))
        user = self.UserModel(username=username, email=claims["email"])
        user._disable_account_creation = True
        user.set_unusable_password()
        user.save()
        extra = {}
        if claims.get("zoneinfo"):
            extra["timezone"] = claims["zoneinfo"]
        if claims.get("locale"):
            extra["language"] = claims["locale"]
        Account.create(**{
            "request": self.request,
            "user": user,
            "create_email": False,
            **extra,
        })
        if claims.get("email_verified", False):
            EmailAddress.objects.create(
                email=user.email,
                verified=True,
                primary=True,
            )
        else:
            EmailAddress.objects.add_email(user, user.email, confirm=True)
        return user
Esempio n. 2
0
def create_user(backend,
                details,
                response,
                uid,
                username,
                user=None,
                *args,
                **kwargs):
    """Create user. Depends on get_username pipeline."""
    if user:
        return {'user': user}
    if not username:
        return None

    warn_setting('SOCIAL_AUTH_CREATE_USERS', 'create_user')

    if not setting('SOCIAL_AUTH_CREATE_USERS', True):
        # Send signal for cases where tracking failed registering is useful.
        socialauth_not_registered.send(sender=backend.__class__,
                                       uid=uid,
                                       response=response,
                                       details=details)
        return None

    email = details.get('email')
    request = kwargs["request"]

    user = User.objects.create_user(username=username, email=email)

    Account.create(request=request, user=user)
    EmailAddress.objects.add_email(user, user.email, primary=True)

    return {'user': user, 'is_new': True}
Esempio n. 3
0
def create_user(backend, details, response, uid, username, user=None, *args, **kwargs):
    """Create user. Depends on get_username pipeline."""
    if user:
        return {'user': user}
    if not username:
        return None

    warn_setting('SOCIAL_AUTH_CREATE_USERS', 'create_user')

    if not setting('SOCIAL_AUTH_CREATE_USERS', True):
        # Send signal for cases where tracking failed registering is useful.
        socialauth_not_registered.send(sender=backend.__class__, uid=uid, response=response, details=details)
        return None

    email = details.get('email')
    request = kwargs["request"]

    user = User.objects.create_user(username=username, email=email)

    Account.create(request=request, user=user)
    EmailAddress.objects.add_email(user, user.email, primary=True)

    return {
        'user': user,
        'is_new': True
    }
Esempio n. 4
0
	def setUp(self):
		Account.create(**{
			'username': '******',
			'email': '*****@*****.**',
			'password': '******'
		}).save()
		response = self.client.post('/api/v1/login', data={
			'username': '******',
			'password': '******'
		})
		self.header = {'HTTP_AUTHORIZATION': 'Token {}'.format(response.json().get('key'))}
Esempio n. 5
0
 def setUp(self):
     account = Account.create(
         **{
             'username': '******',
             'email': '*****@*****.**',
             'password': '******'
         })
     account.save()
     response = self.client.post('/api/v1/login',
                                 data={
                                     'username': '******',
                                     'password': '******'
                                 })
     self.auth_token_header = {
         'HTTP_AUTHORIZATION': 'Token {}'.format(response.json().get('key'))
     }
     account_1 = Account.create(
         **{
             'username': '******',
             'email': '*****@*****.**',
             'password': '******'
         })
     account_1.save()
     backup = Backup(
         **{
             'account': account,
             'digest': 'somedigest',
             'timestamp': self.timestamp,
             'backup': 'encoded backup data'
         })
     backup.save()
     backup_1 = Backup(
         **{
             'account': account,
             'digest': 'somedigest_1',
             'timestamp': self.timestamp,
             'backup': 'encoded backup data 1'
         })
     backup_1.save()
     Backup(
         **{
             'account': account_1,
             'digest': 'somedigest_2',
             'timestamp': self.timestamp,
             'backup': 'encoded backup data 2'
         }).save()
     self.expected_list = [{
         'digest': backup_1.digest,
         'timestamp': backup_1.timestamp
     }, {
         'digest': backup.digest,
         'timestamp': backup.timestamp
     }]
def user_post_save(sender, **kwargs):
    """
    After User.save is called we check to see if it was a created user. If so,
    we check if the User object wants account creation. If all passes we
    create an Account object.
    
    We only run on user creation to avoid having to check for existence on
    each call to User.save.
    """
    user, created = kwargs["instance"], kwargs["created"]
    disabled = getattr(user, "_disable_account_creation", not settings.ACCOUNT_CREATE_ON_SAVE)
    if created and not disabled:
        from account.models import Account
        Account.create(user=user)
Esempio n. 7
0
 def test_create_failed_incorrect_password(self):
     account = Account.create(
         **{
             'username': '******',
             'email': '*****@*****.**',
             'password': None
         })
     self.assertIsNone(account)
     account = Account.create(
         **{
             'username': '******',
             'email': '*****@*****.**',
             'password': ''
         })
     self.assertIsNone(account)
Esempio n. 8
0
 def setUp(self):
     account = Account.create(
         **{
             'username': '******',
             'email': '*****@*****.**',
             'password': '******'
         })
     account.save()
     response = self.client.post('/api/v1/login',
                                 data={
                                     'username': '******',
                                     'password': '******'
                                 })
     self.auth_token_header = {
         'HTTP_AUTHORIZATION': 'Token {}'.format(response.json().get('key'))
     }
     self.backup = Backup(
         **{
             'account': account,
             'digest':
             'somedigestsomedigestsomedigestsomedigestsomedigestsomedigestsomedigestsomedigestsomedigestsomedigestsomedigestsomedigestmedigest',
             'timestamp': self.timestamp,
             'backup': 'encoded backup data'
         })
     self.backup.save()
Esempio n. 9
0
 def create_account(self, form):
     account = Account.create(request=self.request, user=self.created_user, create_email=False)
     fields = {}
     if "street" in form.cleaned_data:
         fields["street"] = form.cleaned_data["street"]
     if "plz_city" in form.cleaned_data:
         fields["plz_city"] = form.cleaned_data["plz_city"]
     if "phone" in form.cleaned_data:
         fields["phone"] = form.cleaned_data["phone"]
     for k, v in fields.items():
         setattr(account, k, v)
     account.save()
     return account
Esempio n. 10
0
 def create_account(self, form):
     account = Account.create(request=self.request,
                              user=self.created_user,
                              create_email=False)
     fields = {}
     if "street" in form.cleaned_data:
         fields["street"] = form.cleaned_data["street"]
     if "plz_city" in form.cleaned_data:
         fields["plz_city"] = form.cleaned_data["plz_city"]
     if "phone" in form.cleaned_data:
         fields["phone"] = form.cleaned_data["phone"]
     for k, v in fields.items():
         setattr(account, k, v)
     account.save()
     return account
Esempio n. 11
0
 def test_create(self):
     actual_account = Account.create(
         **{
             'username': '******',
             'email': '*****@*****.**',
             'password': '******',
             'max_backups': 8,
         })
     actual_account.save()
     expected_account = Account.objects.get(pk='test_username_1')
     self.assertEqual(actual_account.username, expected_account.username)
     self.assertEqual(actual_account.email, expected_account.email)
     self.assertEqual(actual_account.password, expected_account.password)
     self.assertEqual(actual_account.max_backups,
                      expected_account.max_backups)
Esempio n. 12
0
 def setUp(self):
     self.account = Account.create(
         **{
             'username': '******',
             'email': '*****@*****.**',
             'password': '******'
         })
     self.account.save()
     response = self.client.post('/api/v1/login',
                                 data={
                                     'username': '******',
                                     'password': '******'
                                 })
     self.auth_token_header = {
         'HTTP_AUTHORIZATION': 'Token {}'.format(response.json().get('key'))
     }
     for i in range(4):
         Backup(
             **{
                 'account': self.account,
                 'digest': 'some_digest_{}'.format(i),
                 'timestamp': now(),
                 'backup': 'encoded backup data {}'.format(i)
             }).save()
Esempio n. 13
0
 def create_account(self, form):
     return Account.create(request=self.request, user=self.created_user, create_email=False)
Esempio n. 14
0
 def create_account(self, new_user, form):
     return Account.create(request=self.request, user=new_user)
Esempio n. 15
0
    def create_account(self, form):
        return Account.create(request=self.request, user=self.created_user, create_email=False, 
				subscribe_to_newsletter=form.cleaned_data["subscribe_to_newsletter"])
Esempio n. 16
0
 def create_account(self, form):
     return Account.create(request=self.request,
                           user=self.created_user,
                           create_email=False,
                           timezone=form.cleaned_data["timezone"])
Esempio n. 17
0
File: views.py Progetto: PyCon/pycon
    def post(self, request, *args, **kwargs):
        try:
            data = json.loads(request.body)
        except:
            return HttpResponseBadRequest(self.format_error)

        # Data should be a list of registration info in dictionary format.
        if not (isinstance(data, list) and all([isinstance(d, dict) for d in data])):
            return HttpResponseBadRequest(self.format_error)

        all_valid = True
        seen_emails = []
        user_data = []
        for registration in data:
            form = GroupRegistrationForm(data=registration)
            if form.is_valid():
                # Check if this is a duplicate of an email provided in this request.
                email = User.objects.normalize_email(form.cleaned_data['email'])
                if email in seen_emails:
                    all_valid = False
                    user_data.append({
                        'valid': False,
                        'error_message': 'This email is a duplicate of one above.',
                        'user': None,
                    })
                else:
                    seen_emails.append(email)
                    created, user = form.save(commit=False)
                    if created:
                        # Delay account creation until the transaction is
                        # committed.
                        user._disable_account_creation = True
                        user.save()
                    user_data.append({
                        'valid': True,
                        'created': created,
                        'user': {
                            'pycon_id': user.pk,
                            'email': form.cleaned_data.get('email'),
                            'first_name': form.cleaned_data.get('first_name', ''),
                            'last_name': form.cleaned_data.get('last_name', ''),
                        }
                    })
            else:
                all_valid = False
                user_data.append({
                    'valid': False,
                    'errors': [e for errors in form.errors.values() for e in errors],
                    'user': None,
                })

        # The request is atomic - all users are created (or found), or none
        # are.
        if all_valid:
            for d in user_data:
                if d['created']:
                    # Now that the transaction has been committed,
                    # create an Account for the user so that they can log in.
                    user = User.objects.get(pk=d['user']['pycon_id'])
                    Account.create(user=user)
        else:
            for d in user_data:
                d['user'] = None
                d.pop('created', None)
            transaction.set_rollback(True)

        return_data = {'success': all_valid, 'users': user_data}
        return HttpResponse(json.dumps(return_data))
Esempio n. 18
0
	def setUp(self):
		Account.create(**{
			'username': '******',
			'email': '*****@*****.**',
			'password': '******'
		}).save()
Esempio n. 19
0
            content = urllib2.urlopen(url)
            # Facebook default image check
            if sender.name == 'facebook' and 'image/gif' in str(content.info()):
                return

            filename = user.username + "_profile" + '.' + content.headers.subtype
            profile.photo.save(filename, ContentFile(content.read()))
        except IOError, e:
            logger.debug(e)
    try:
        profile.language = response.get('locale').split("_")[0]
        profile.full_clean()
    except Exception:
        pass
    profile.time_zone = response.get('timezone')
    profile.save()
    account = user.account_set.all()[0] or Account.create(user=user, create_email=False)
    try:
        account.language = response.get('locale').split("_")[0]
        tz_offset = int(response.get('timezone'))
        tz_joiner = "" if tz_offset < 0 else "+"
        account.timezone = coerce_timezone_value(tz_joiner.join(("Etc/GMT", str(tz_offset))))
        account.full_clean()
    except Exception:
        pass
    account.save()
    email, created = EmailAddress.objects.get_or_create(user=user, email=user.email)
    email.verified = True
    email.save()
    return True
Esempio n. 20
0
            if sender.name == 'facebook' and 'image/gif' in str(
                    content.info()):
                return

            filename = user.username + "_profile" + '.' + content.headers.subtype
            profile.photo.save(filename, ContentFile(content.read()))
        except IOError, e:
            logger.debug(e)
    try:
        profile.language = response.get('locale').split("_")[0]
        profile.full_clean()
    except Exception:
        pass
    profile.time_zone = response.get('timezone')
    profile.save()
    account = user.account_set.all()[0] or Account.create(user=user,
                                                          create_email=False)
    try:
        account.language = response.get('locale').split("_")[0]
        tz_offset = int(response.get('timezone'))
        tz_joiner = "" if tz_offset < 0 else "+"
        account.timezone = coerce_timezone_value(
            tz_joiner.join(("Etc/GMT", str(tz_offset))))
        account.full_clean()
    except Exception:
        pass
    account.save()
    email, created = EmailAddress.objects.get_or_create(user=user,
                                                        email=user.email)
    email.verified = True
    email.save()
    return True
Esempio n. 21
0
 def create_account(self, form):
     return Account.create(request=self.request,
                           user=self.created_user,
                           create_email=False)
Esempio n. 22
0
    def post(self, request, *args, **kwargs):
        try:
            data = json.loads(request.body)
        except:
            return HttpResponseBadRequest(self.format_error)

        # Data should be a list of registration info in dictionary format.
        if not (isinstance(data, list)
                and all([isinstance(d, dict) for d in data])):
            return HttpResponseBadRequest(self.format_error)

        all_valid = True
        seen_emails = []
        user_data = []
        for registration in data:
            form = GroupRegistrationForm(data=registration)
            if form.is_valid():
                # Check if this is a duplicate of an email provided in this request.
                email = User.objects.normalize_email(
                    form.cleaned_data['email'])
                if email in seen_emails:
                    all_valid = False
                    user_data.append({
                        'valid': False,
                        'error_message':
                        'This email is a duplicate of one above.',
                        'user': None,
                    })
                else:
                    seen_emails.append(email)
                    created, user = form.save(commit=False)
                    if created:
                        # Delay account creation until the transaction is
                        # committed.
                        user._disable_account_creation = True
                        user.save()
                    user_data.append({
                        'valid': True,
                        'created': created,
                        'user': {
                            'pycon_id': user.pk,
                            'email': form.cleaned_data.get('email'),
                            'first_name':
                            form.cleaned_data.get('first_name', ''),
                            'last_name':
                            form.cleaned_data.get('last_name', ''),
                        }
                    })
            else:
                all_valid = False
                user_data.append({
                    'valid':
                    False,
                    'errors':
                    [e for errors in form.errors.values() for e in errors],
                    'user':
                    None,
                })

        # The request is atomic - all users are created (or found), or none
        # are.
        if all_valid:
            for d in user_data:
                if d['created']:
                    # Now that the transaction has been committed,
                    # create an Account for the user so that they can log in.
                    user = User.objects.get(pk=d['user']['pycon_id'])
                    Account.create(user=user)
        else:
            for d in user_data:
                d['user'] = None
                d.pop('created', None)
            transaction.set_rollback(True)

        return_data = {'success': all_valid, 'users': user_data}
        return HttpResponse(json.dumps(return_data))
Esempio n. 23
0
 def create(self, validated_data):
     account = Account.create(**validated_data)
     account.save()
     return account