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)
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()
def after_delete(self, data): # actually delete user from the database backend.remove(username=self.user.username, domain=self.user.domain) self.user.delete()