Exemplo n.º 1
0
    def test_get_accounts_user_multiple_providers(self):
        user_id = self.db.users.insert({
            'email': '*****@*****.**',
            'twitter_id': 1234,
            'google_id': 4321,
            'email_verified': True,
        })
        self.db.passwords.insert({'password': '******', 'owner': user_id})

        self.assertEqual([{
            'providers': [],
            'is_current': False,
            'passwords': 0,
            'id': '',
            'is_verified': False,
        }, {
            'providers': [{
                'name': 'google',
                'is_current': True,
            }, {
                'name': 'twitter',
                'is_current': False,
            }],
            'passwords': 1,
            'id': str(user_id),
            'is_current': True,
            'is_verified': True,
        }], get_accounts(self.db, {
            'email': '*****@*****.**',
            '_id': '',
        }, 'google'))
Exemplo n.º 2
0
 def test_get_accounts_one_user_with_provider_email_verified(self):
     user_id = self.db.users.insert({
         'email': '*****@*****.**',
         'twitter_id': 1234,
         'email_verified': True,
     })
     self.assertEqual([{
         'providers': [],
         'is_current': False,
         'passwords': 0,
         'id': '',
         'is_verified': False,
     }, {
         'providers': [{
             'name': 'twitter',
             'is_current': True,
         }],
         'passwords': 0,
         'id': str(user_id),
         'is_current': True,
         'is_verified': True,
     }], get_accounts(self.db, {
         'email': '*****@*****.**',
         '_id': '',
     }, 'twitter'))
Exemplo n.º 3
0
 def test_get_accounts_empty_provider(self):
     self.assertEqual([{
         'providers': [],
         'is_current': False,
         'passwords': 0,
         'id': '',
         'is_verified': False,
     }], get_accounts(self.db, {
         'email': '*****@*****.**',
         '_id': '',
     }, ''))
Exemplo n.º 4
0
def identity_providers(request):
    current_provider = request.session.get('current_provider', None)
    accounts = get_accounts(request.db, request.user, current_provider)
    context = {
        'accounts': accounts
    }
    verified = [ac for ac in accounts if ac['is_verified']]
    context['can_merge'] = len(verified) > 1

    if 'submit' in request.POST:
        if not context['can_merge']:
            return HTTPBadRequest('You do not have enough accounts to merge')

        def is_verified(ac):
            for a in accounts:
                if a['id'] == ac:
                    return a['is_verified']
            return False

        accounts_to_merge = [account.replace('account-', '')
                             for account in request.POST.keys()
                             if account != 'submit']
        accounts_to_merge = [account
                             for account in accounts_to_merge
                             if is_verified(account)]

        if len(accounts_to_merge) > 1:
            merged = merge_accounts(request.db, request.user,
                                    accounts_to_merge)
            localizer = get_localizer(request)
            msg = localizer.pluralize(
                _('Congratulations, ${n_merged} of your accounts has been merged into the current one'),
                _('Congratulations, ${n_merged} of your accounts have been merged into the current one'),
                merged,
                domain=translation_domain,
                mapping={'n_merged': merged},
            )
            request.session.flash(msg, 'success')
        else:
            request.session.flash(
                _('Not enough accounts for merging'),
                'error',
            )

        return HTTPFound(
            location=request.route_path('user_identity_providers'))

    return context
Exemplo n.º 5
0
 def test_get_accounts_one_user_no_provider(self):
     user_id = self.db.users.insert({'email': '*****@*****.**'})
     self.assertEqual([{
         'providers': [],
         'is_current': False,
         'passwords': 0,
         'id': '',
         'is_verified': False,
     }, {
         'providers': [],
         'is_current': False,
         'passwords': 0,
         'id': str(user_id),
         'is_verified': False,
     }], get_accounts(self.db, {
         'email': '*****@*****.**',
         '_id': '',
     }, ''))
    def test_get_accounts(self):
        self.assertEqual([], get_accounts(self.db, {}, ''))
        self.assertEqual([{
                    'providers': [],
                    'is_current': False,
                    'passwords': 0,
                    'id': '',
                    'is_verified': False,
                    }], get_accounts(self.db, {
                    'email': '*****@*****.**',
                    '_id': '',
                    }, ''))

        user_id = self.db.users.insert({'email': '*****@*****.**'},
                                       safe=True)
        self.assertEqual([{
                    'providers': [],
                    'is_current': False,
                    'passwords': 0,
                    'id': '',
                    'is_verified': False,
                    }, {
                    'providers': [],
                    'is_current': False,
                    'passwords': 0,
                    'id': str(user_id),
                    'is_verified': False,
                    }], get_accounts(self.db, {
                    'email': '*****@*****.**',
                    '_id': '',
                    }, ''))

        self.db.users.update({'email': '*****@*****.**'}, {
                '$set': {'twitter_id': 1234},
                }, safe=True)
        self.assertEqual([{
                    'providers': [],
                    'is_current': False,
                    'passwords': 0,
                    'id': '',
                    'is_verified': False,
                    }, {
                    'providers': [{
                            'name': 'twitter',
                            'is_current': False,
                            }],
                    'is_current': False,
                    'passwords': 0,
                    'id': str(user_id),
                    'is_verified': False,
                    }], get_accounts(self.db, {
                    'email': '*****@*****.**',
                    '_id': '',
                    }, ''))

        self.db.users.update({'email': '*****@*****.**'}, {
                '$set': {'email_verified': True},
                }, safe=True)
        self.assertEqual([{
                    'providers': [],
                    'is_current': False,
                    'passwords': 0,
                    'id': '',
                    'is_verified': False,
                    }, {
                    'providers': [{
                            'name': 'twitter',
                            'is_current': True,
                            }],
                    'passwords': 0,
                    'id': str(user_id),
                    'is_current': True,
                    'is_verified': True,
                    }], get_accounts(self.db, {
                    'email': '*****@*****.**',
                    '_id': '',
                    }, 'twitter'))

        self.db.passwords.insert({'password': '******', 'owner': user_id},
                                 safe=True)
        self.db.users.update({'email': '*****@*****.**'}, {
                '$set': {'twitter_id': 1234},
                }, safe=True)
        self.assertEqual([{
                    'providers': [],
                    'is_current': False,
                    'passwords': 0,
                    'id': '',
                    'is_verified': False,
                    }, {
                    'providers': [{
                            'name': 'twitter',
                            'is_current': False,
                            }],
                    'passwords': 1,
                    'id': str(user_id),
                    'is_current': False,
                    'is_verified': True,
                    }], get_accounts(self.db, {
                    'email': '*****@*****.**',
                    '_id': '',
                    }, 'google'))

        self.db.users.update({'email': '*****@*****.**'}, {
                '$set': {'google_id': 4321},
                }, safe=True)
        self.assertEqual([{
                    'providers': [],
                    'is_current': False,
                    'passwords': 0,
                    'id': '',
                    'is_verified': False,
                    }, {
                    'providers': [{
                            'name': 'google',
                            'is_current': True,
                            }, {
                            'name': 'twitter',
                            'is_current': False,
                            }],
                    'passwords': 1,
                    'id': str(user_id),
                    'is_current': True,
                    'is_verified': True,
                    }], get_accounts(self.db, {
                    'email': '*****@*****.**',
                    '_id': '',
                    }, 'google'))
Exemplo n.º 7
0
 def test_get_accounts_empty_user(self):
     self.assertEqual([], get_accounts(self.db, {}, ''))