Exemplo n.º 1
0
 def test_search_fullname_case_insensitive(self):
     _make_user(email='*****@*****.**', fullname=u'AAAAA')
     _make_user(email='*****@*****.**', fullname=u'aaaaa')
     _make_user(email='*****@*****.**', fullname=u'BBBBB')
     _make_user(email='*****@*****.**', fullname=u'bbbbb')
     users = User.get_all(search='aaaaa').all()
     self.assertEqual(len(users), 2)
     self.assertEqual(users[0].email, '*****@*****.**')
     self.assertEqual(users[1].email, '*****@*****.**')
     users = User.get_all(search='AAAAA').all()
     self.assertEqual(len(users), 2)
     self.assertEqual(users[0].email, '*****@*****.**')
     self.assertEqual(users[1].email, '*****@*****.**')
Exemplo n.º 2
0
 def test_search_email(self):
     _make_user(email='*****@*****.**')
     _make_user(email='*****@*****.**')
     _make_user(email='*****@*****.**')
     users = User.get_all(search='baz').all()
     self.assertEqual(len(users), 1)
     self.assertEqual(users[0].email, '*****@*****.**')
Exemplo n.º 3
0
 def test_search_fullname(self):
     _make_user(email='*****@*****.**', fullname=u'aaaaa')
     _make_user(email='*****@*****.**', fullname=u'ccccc')
     _make_user(email='*****@*****.**', fullname=u'bbbbb')
     users = User.get_all(search='ccccc').all()
     self.assertEqual(len(users), 1)
     self.assertEqual(users[0].email, '*****@*****.**')
Exemplo n.º 4
0
 def test_offset(self):
     _make_user(email='*****@*****.**')
     _make_user(email='*****@*****.**')
     _make_user(email='*****@*****.**')
     users = User.get_all(offset=(1, 2)).all()
     self.assertEqual(len(users), 1)
     self.assertEqual(users[0].email, '*****@*****.**')
Exemplo n.º 5
0
 def test_ordered_by_modified(self):
     _make_user(email='*****@*****.**')
     _make_user(email='*****@*****.**')
     _make_user(email='*****@*****.**')
     users = User.get_all(order_by='modified', order_direction='desc').all()
     self.assertEqual(len(users), 3)
     self.assertEqual(users[0].email, '*****@*****.**')
     self.assertEqual(users[1].email, '*****@*****.**')
     self.assertEqual(users[2].email, '*****@*****.**')
Exemplo n.º 6
0
 def test_override_ordered_by(self):
     _make_user(email='*****@*****.**', fullname=u'A')
     _make_user(email='*****@*****.**', fullname=u'C')
     _make_user(email='*****@*****.**', fullname=u'B')
     users = User.get_all(order_by='fullname').all()
     self.assertEqual(len(users), 3)
     self.assertEqual(users[0].fullname, 'A')
     self.assertEqual(users[1].fullname, 'B')
     self.assertEqual(users[2].fullname, 'C')
Exemplo n.º 7
0
 def test_ordered_by_email_by_default(self):
     _make_user(email='*****@*****.**')
     _make_user(email='*****@*****.**')
     _make_user(email='*****@*****.**')
     users = User.get_all().all()
     self.assertEqual(len(users), 3)
     self.assertEqual(users[0].email, '*****@*****.**')
     self.assertEqual(users[1].email, '*****@*****.**')
     self.assertEqual(users[2].email, '*****@*****.**')
Exemplo n.º 8
0
    def __call__(self):
        warnings = []
        for user in User.get_all():
            if user.fullname is None or not user.fullname.strip():
                warnings.append(
                    'User {} ({}) has an empty fullname.'.format(
                        user.email, user.id))

        return warnings
Exemplo n.º 9
0
 def test_ordered_by_created(self):
     _make_user(email='*****@*****.**')
     _make_user(email='*****@*****.**')
     _make_user(email='*****@*****.**')
     users = User.get_all(order_by='created').all()
     self.assertEqual(len(users), 3)
     self.assertEqual(users[0].email, '*****@*****.**')
     self.assertEqual(users[1].email, '*****@*****.**')
     self.assertEqual(users[2].email, '*****@*****.**')
Exemplo n.º 10
0
    def __call__(self):
        warnings = []
        enabled_event_id = AuditLogEventType.by_name('UserEnabled').id
        disabled_event_id = AuditLogEventType.by_name('UserDisabled').id
        for user in User.get_all():
            last_enabled_entry = AuditLogEntry.get_all(
                security=False,
                filter_by={
                    'event_type_id': enabled_event_id,
                    'user_id': user.id
                },
                order_by='timestamp'
            ).first()
            last_disabled_entry = AuditLogEntry.get_all(
                security=False,
                filter_by={
                    'event_type_id': disabled_event_id,
                    'user_id': user.id
                },
                order_by='timestamp'
            ).first()

            if user.enabled:
                if not last_enabled_entry:
                    warnings.append(
                        'User {} ({}) is enabled, '
                        'but has no UserEnabled entry.'.format(
                            user.email, user.id))

                elif last_disabled_entry and (
                        last_enabled_entry.timestamp < last_disabled_entry.timestamp):  # noqa
                    warnings.append(
                        'User {} ({}) is enabled, '
                        'but has an UserDisabled entry '
                        'after UserEnabled entry.'.format(
                            user.email, user.id))

            else:
                if not last_disabled_entry:
                    warnings.append(
                        'User {} ({}) is disabled, '
                        'but has no UserDisabled entry.'.format(
                            user.email, user.id))

                elif last_enabled_entry and (
                        last_disabled_entry.timestamp < last_enabled_entry.timestamp):  # noqa
                    warnings.append(
                        'User {} ({}) is disabled, '
                        'but has an UserEnabled entry '
                        'after UserDisabled entry.'.format(
                            user.email, user.id))

        return warnings
Exemplo n.º 11
0
    def __call__(self):
        warnings = []
        for user in User.get_all():
            try:
                user.product_group
            except NoResultFound:
                pass  # continue to next user
            except MultipleResultsFound:
                warnings.append(
                    'User {} ({}) has multiple product groups.'.format(
                        user.email, user.id))

        return warnings
Exemplo n.º 12
0
def expire_subscriptions():
    """Find all outstanding subscriptions and expire them."""
    with transaction.manager:
        for user in User.get_all():
            if user.enabled:
                if user.valid_to < date.today():
                    user.disable()
                    msg = u'Disabled user {} ({}) because its valid_to ({}) ' \
                        'has expired.'.format(
                            user.email, user.id, user.valid_to)
                    Session.add(
                        AuditLogEntry(
                            user_id=user.id,
                            event_type_id=AuditLogEventType.by_name(
                                'UserDisabled').id,
                            comment=msg,
                        ))
                    logger.info(msg)
                    continue

                # handle addons
                for prop in user.properties:
                    if not prop.key.startswith('addon_'):
                        continue
                    if not prop.key.endswith('_valid_to'):
                        continue
                    valid_to = datetime.strptime(prop.value, '%Y-%m-%d').date()
                    if valid_to >= date.today():
                        continue
                    group = Group.by_product_id(
                        prop.key.split('addon_')[1].split('_valid_to')[0])
                    user.groups.remove(group)
                    msg = u'Addon "{}" disabled for user {} ({}) because ' \
                        'its valid_to ({}) has expired.'.format(
                            group.name, user.email, user.id, prop.value)
                    Session.add(
                        AuditLogEntry(
                            user_id=user.id,
                            event_type_id=AuditLogEventType.by_name(
                                'UserDisabled').id,
                            comment=msg,
                        ))
Exemplo n.º 13
0
    def __init__(self, request):
        self.request = request
        self.schema = SQLAlchemySchemaNode(
            Group,
            includes=self.fields,
            overrides={
                'properties': {
                    'includes': ['key', 'value']
                },
                'name': {
                    'validator': deferred_group_name_validator
                },
                'product_id': {
                    'validator': deferred_group_product_id_validator
                }  # noqa
            })
        # we don't like the way ColanderAlchemy renders SA Relationships so
        # we manually inject a suitable SchemaNode for users
        choices = [(user.id, user.email) for user in User.get_all()]
        self.schema.add(node=colander.SchemaNode(
            colander.Set(),
            name='users',
            missing=[],
            widget=deform.widget.CheckboxChoiceWidget(values=choices,
                                                      inline=True),
        ), )

        choices = [
            (group.id, group.name)
            for group in Group.get_all().filter(Group.product_id != None)
        ]  # noqa
        self.schema.add(node=colander.SchemaNode(
            colander.Set(),
            name='upgrade_groups',
            missing=[],
            widget=deform.widget.CheckboxChoiceWidget(values=choices,
                                                      inline=True),
        ), )
Exemplo n.º 14
0
 def list(self):
     self.request.layout_manager.layout.hide_sidebar = True
     self.request.layout_manager.layout.title = u'Users'
     return {'count': User.get_all().count()}
Exemplo n.º 15
0
 def test_no_users(self):
     users = User.get_all().all()
     self.assertEqual(len(users), 0)
Exemplo n.º 16
0
 def test_all_users(self):
     _make_user(email='*****@*****.**')
     _make_user(email='*****@*****.**')
     _make_user(email='*****@*****.**')
     users = User.get_all().all()
     self.assertEqual(len(users), 3)
Exemplo n.º 17
0
 def test_filter_by(self):
     _make_user(email='*****@*****.**', affiliate=u'John')
     _make_user(email='*****@*****.**', affiliate=u'Jane')
     users = User.get_all(filter_by={'affiliate': u'John'}).all()
     self.assertEqual(len(users), 1)
     self.assertEqual(users[0].affiliate, 'John')
Exemplo n.º 18
0
 def test_limit(self):
     _make_user(email='*****@*****.**')
     _make_user(email='*****@*****.**')
     users = User.get_all(limit=1).all()
     self.assertEqual(len(users), 1)
     self.assertEqual(users[0].email, '*****@*****.**')