예제 #1
0
    def log_deletion(self, request, object, object_repr):
        """Remove users from Jabber server before removing from database.

        This is unfortunately the only good method to hook into.
        """
        username = object.username
        domain = object.domain
        super(RegistrationUserAdmin, self).log_deletion(request, object, object_repr)
        backend.remove(username, domain)
예제 #2
0
    def log_deletion(self, request, object, object_repr):
        """Remove users from Jabber server before removing from database.

        This is unfortunately the only good method to hook into.
        """
        username = object.username
        domain = object.domain
        super(RegistrationUserAdmin,
              self).log_deletion(request, object, object_repr)
        backend.remove(username, domain)
예제 #3
0
    def handle(self, *args, **kwargs):
        if kwargs.get('quiet'):
            log.setLevel('WARN')

        now = pytz.utc.localize(datetime.now())

        # delete old addresses:
        stamp = now - timedelta(days=31)
        UserAddresses.objects.filter(timestamp__lt=stamp).delete()

        # delete old confirmation keys:
        Confirmation.objects.expired().delete()
        expired_timestamp = datetime.now() - timedelta(days=3)

        for domain, config in settings.XMPP_HOSTS.items():
            # lowercase usernames from backend just to be sure
            existing_users = set([u.lower() for u in backend.all_users(domain)])

            if len(existing_users) < 100:
                # A silent safety check if the backend for some reason does not return any users
                # and does not raise an exception.
                log.warn('Skipping %s: Only %s users received.', domain, len(existing_users))
                continue

            # only consider users that have no pending confirmation keys
            users = User.objects.filter(jid__endswith='@%s' % domain, confirmation__isnull=True)

            for user in users:
                username = user.username.lower()
                if username not in existing_users:
                    log.info('%s: Removed from database (gone from backend)', username)
                    user.delete()

            if not config.get('RESERVE', False):
                continue

            expired = users.filter(registration_method=REGISTRATION_WEBSITE,
                                   confirmed__isnull=True, registered__lt=expired_timestamp)
            for user in expired:
                username = user.username.lower()
                log.info('%s: Removed (registration expired)', username)
                backend.remove(username, user.domain)
            if len(expired) > 10:
                # warn, if many users were removed
                log.warn('Removed %s users', len(expired))
            expired.delete()
예제 #4
0
 def after_delete(self, data):
     # actually delete user from the database
     backend.remove(username=self.user.username, domain=self.user.domain)
     self.user.delete()
예제 #5
0
 def after_delete(self, data):
     # actually delete user from the database
     backend.remove(username=self.user.username, domain=self.user.domain)
     self.user.delete()