Advertisement
Guest User

Untitled

a guest
Dec 20th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.02 KB | None | 0 0
  1. class BlockedIpMiddleware:
  2.  
  3. def _get_mem_cache(self, key):
  4. cache_val = cache.get(key)
  5. if cache_val is not None:
  6. return cache_val
  7. else:
  8. self._cache()
  9. return cache.get(key)
  10.  
  11. def _set_mem_cache(self, key, value):
  12. cache.set(key, value)
  13.  
  14. def _cache(self):
  15. ips = {}
  16. masks = set()
  17. for line in open(settings.BLOCKED_IPS_FILE_PATH):
  18. line = line.strip()
  19. if not line:
  20. continue
  21. if line[-1] == '*':
  22. masks.add(line[:-2])
  23. else:
  24. ips[line] = None
  25. self._append_blocked_ips(ips)
  26. self._set_mem_cache(ips_cache_key, ips)
  27. self._set_mem_cache(masks_cache_key, masks)
  28.  
  29. def _append_blocked_ips(self, ips):
  30. for blocked_ip in BlockedIp.objects.all():
  31. ips[blocked_ip.ip] = blocked_ip.created
  32.  
  33. def _cut_last_number(self, ip):
  34. return '.'.join(ip.split('.')[:-1])
  35.  
  36. def process_request(self, request):
  37. x_forwarded_for_header = request.META.get('HTTP_X_FORWARDED_FOR', '')
  38.  
  39. reload_cache = request.META.get('HTTP_RELOAD_BLOCKED_IPS', False)
  40. if reload_cache:
  41. self._cache()
  42.  
  43. response = http.HttpResponseForbidden('<h1>404</h1><div>No page found</div>')
  44. time_minus_20_min = timezone.make_aware(datetime.datetime.now() - datetime.timedelta(minutes=20),
  45. timezone.get_default_timezone())
  46. blocked_ips = self._get_mem_cache(ips_cache_key)
  47. if x_forwarded_for_header in blocked_ips and (blocked_ips[x_forwarded_for_header] is None or
  48. blocked_ips[x_forwarded_for_header] < time_minus_20_min):
  49. return response
  50. x_forwarded_for_header_cut = self._cut_last_number(x_forwarded_for_header)
  51. if x_forwarded_for_header_cut in self._get_mem_cache(masks_cache_key):
  52. return response
  53. return None
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement