def get_request_ip_ban(request): """ Utility for checking if request came from banned IP This check may be performed frequently, which is why there is extra boilerplate that caches ban check result in session """ session_ban_cache = _get_session_bancache(request) if session_ban_cache: if session_ban_cache['is_banned']: return session_ban_cache else: return False found_ban = get_ip_ban(request.user_ip) ban_cache = request.session[CACHE_SESSION_KEY] = { 'version': cachebuster.get_version(VERSION_KEY), 'ip': request.user_ip, } if found_ban: if found_ban.expires_on: ban_cache['expires_on'] = found_ban.expires_on.isoformat() else: ban_cache['expires_on'] = None ban_cache.update({'is_banned': True, 'message': found_ban.user_message}) request.session[CACHE_SESSION_KEY] = ban_cache return _hydrate_session_cache(request.session[CACHE_SESSION_KEY]) else: ban_cache['is_banned'] = False request.session[CACHE_SESSION_KEY] = ban_cache return None
def get_request_ip_ban(request): session_ban_cache = _get_session_bancache(request) if session_ban_cache: if session_ban_cache["is_banned"]: return session_ban_cache else: return False found_ban = get_ip_ban(request.user_ip) ban_cache = request.session[BAN_CACHE_SESSION_KEY] = { "version": cachebuster.get_version(BAN_VERSION_KEY), "ip": request.user_ip, } if found_ban: if found_ban.expires_on: ban_cache["expires_on"] = found_ban.expires_on.isoformat() else: ban_cache["expires_on"] = None ban_cache.update({"is_banned": True, "message": found_ban.user_message}) request.session[BAN_CACHE_SESSION_KEY] = ban_cache return _hydrate_session_cache(request.session[BAN_CACHE_SESSION_KEY]) else: ban_cache["is_banned"] = False request.session[BAN_CACHE_SESSION_KEY] = ban_cache return None
def get_request_ip_ban(request): session_ban_cache = _get_session_bancache(request) if session_ban_cache: if session_ban_cache['is_banned']: return session_ban_cache else: return False found_ban = get_ip_ban(request.user_ip) ban_cache = request.session[BAN_CACHE_SESSION_KEY] = { 'version': cachebuster.get_version(BAN_VERSION_KEY), 'ip': request.user_ip, } if found_ban: if found_ban.expires_on: ban_cache['expires_on'] = found_ban.expires_on.isoformat() else: ban_cache['expires_on'] = None ban_cache.update({ 'is_banned': True, 'message': found_ban.user_message }) request.session[BAN_CACHE_SESSION_KEY] = ban_cache return _hydrate_session_cache(request.session[BAN_CACHE_SESSION_KEY]) else: ban_cache['is_banned'] = False request.session[BAN_CACHE_SESSION_KEY] = ban_cache return None
def get_request_ip_ban(request): session_ban_cache = _get_session_bancache(request) if session_ban_cache: if session_ban_cache['is_banned']: return session_ban_cache else: return False found_ban = get_ip_ban(request._misago_real_ip) ban_cache = request.session[BAN_CACHE_SESSION_KEY] = { 'version': cachebuster.get_version(BAN_VERSION_KEY), 'ip': request._misago_real_ip, } if found_ban: if found_ban.valid_until: valid_until_as_string = found_ban.valid_until.strftime('%Y-%m-%d') ban_cache['valid_until'] = valid_until_as_string else: ban_cache['valid_until'] = None ban_cache.update({ 'is_banned': True, 'message': found_ban.user_message }) request.session[BAN_CACHE_SESSION_KEY] = ban_cache return _hydrate_session_cache(request.session[BAN_CACHE_SESSION_KEY]) else: ban_cache['is_banned'] = False request.session[BAN_CACHE_SESSION_KEY] = ban_cache return None
def test_cache_validation(self): """cache correctly validates""" version = cachebuster.get_version(self.cache_name) self.assertEqual(version, 0) db_version = CacheVersion.objects.get(cache=self.cache_name).version self.assertEqual(db_version, 0) self.assertEqual(db_version, version) self.assertTrue(cachebuster.is_valid(self.cache_name, version)) self.assertTrue(cachebuster.is_valid(self.cache_name, db_version))
def handle_bans_caches(self): queryset = BanCache.objects.filter(expires_on__lt=timezone.now()) expired_count = queryset.count() queryset.delete() bans_version = cachebuster.get_version('misago_bans') queryset = BanCache.objects.filter(bans_version__lt=bans_version) expired_count += queryset.count() queryset.delete() self.stdout.write('Ban caches emptied: %s' % expired_count)
def handle_bans_caches(self): queryset = BanCache.objects.filter(expires_on__lt=timezone.now()) expired_count = queryset.count() queryset.delete() bans_version = cachebuster.get_version('misago_bans') queryset = BanCache.objects.filter(bans_version__lt=bans_version) expired_count += queryset.count() queryset.delete() self.stdout.write("Ban caches emptied: {}".format(expired_count))
def test_cache_invalidation(self): """invalidate has increased valid version number""" db_version = CacheVersion.objects.get(cache=self.cache_name).version cachebuster.invalidate(self.cache_name) new_version = cachebuster.get_version(self.cache_name) new_db_version = CacheVersion.objects.get(cache=self.cache_name) new_db_version = new_db_version.version self.assertEqual(new_version, 1) self.assertEqual(new_db_version, 1) self.assertEqual(new_version, new_db_version) self.assertFalse(cachebuster.is_valid(self.cache_name, db_version)) self.assertTrue(cachebuster.is_valid(self.cache_name, new_db_version))
def handle_bans_caches(self): queryset = BanCache.objects.filter(valid_until__isnull=False) queryset = queryset.filter(valid_until__lte=timezone.now().date()) expired_count = queryset.count() queryset.delete() bans_version = cachebuster.get_version('misago_bans') queryset = BanCache.objects.filter(bans_version__lt=bans_version) expired_count += queryset.count() queryset.delete() self.stdout.write('Ban caches emptied: %s' % expired_count)
def _set_user_ban_cache(user): ban_cache = user.ban_cache ban_cache.bans_version = cachebuster.get_version(BAN_VERSION_KEY) try: user_ban = Ban.objects.get_ban(username=user.username, email=user.email) ban_cache.ban = user_ban ban_cache.expires_on = user_ban.expires_on ban_cache.user_message = user_ban.user_message ban_cache.staff_message = user_ban.staff_message except Ban.DoesNotExist: ban_cache.ban = None ban_cache.expires_on = None ban_cache.user_message = None ban_cache.staff_message = None ban_cache.save() return ban_cache
def _set_user_ban_cache(user): ban_cache = user.ban_cache ban_cache.bans_version = cachebuster.get_version(BAN_VERSION_KEY) try: user_ban = Ban.objects.find_ban(username=user.username, email=user.email) ban_cache.ban = user_ban ban_cache.valid_until = user_ban.valid_until ban_cache.user_message = user_ban.user_message ban_cache.staff_message = user_ban.staff_message except Ban.DoesNotExist: ban_cache.ban = None ban_cache.valid_until = None ban_cache.user_message = None ban_cache.staff_message = None ban_cache.save() return ban_cache
def _set_user_ban_cache(user): ban_cache = user.ban_cache ban_cache.bans_version = cachebuster.get_version(BANS_CACHEBUSTER) try: user_ban = Ban.objects.get_ban(username=user.username, email=user.email) ban_cache.ban = user_ban ban_cache.expires_on = user_ban.expires_on ban_cache.user_message = user_ban.user_message ban_cache.staff_message = user_ban.staff_message except Ban.DoesNotExist: ban_cache.ban = None ban_cache.expires_on = None ban_cache.user_message = None ban_cache.staff_message = None ban_cache.save() return ban_cache
def _set_user_ban_cache(user): ban_cache = user.ban_cache ban_cache.bans_version = cachebuster.get_version(VERSION_KEY) try: user_ban = Ban.objects.get_ban( username=user.username, email=user.email, registration_only=False, ) ban_cache.ban = user_ban ban_cache.expires_on = user_ban.expires_on ban_cache.user_message = user_ban.user_message ban_cache.staff_message = user_ban.staff_message except Ban.DoesNotExist: ban_cache.ban = None ban_cache.expires_on = None ban_cache.user_message = None ban_cache.staff_message = None ban_cache.save() return ban_cache
def get_version(): return cachebuster.get_version(ACL_CACHEBUSTER)
def get_version(): return cb.get_version(ACL_CACHE_NAME)