utils.py
78 lines
| 2.0 KiB
| text/x-python
|
PythonLexer
/ boards / utils.py
Ilyas
|
r78 | """ | ||
This module contains helper functions and helper classes. | ||||
""" | ||||
neko259
|
r690 | import hashlib | ||
neko259
|
r716 | import time | ||
neko259
|
r542 | from django.utils import timezone | ||
wnc_21
|
r95 | |||
neko259
|
r81 | from neboard import settings | ||
Ilyas
|
r78 | |||
wnc_21
|
r95 | KEY_CAPTCHA_FAILS = 'key_captcha_fails' | ||
KEY_CAPTCHA_DELAY_TIME = 'key_captcha_delay_time' | ||||
KEY_CAPTCHA_LAST_ACTIVITY = 'key_captcha_last_activity' | ||||
def need_include_captcha(request): | ||||
Ilyas
|
r78 | """ | ||
Check if request is made by a user. | ||||
It contains rules which check for bots. | ||||
""" | ||||
wnc_21
|
r95 | if not settings.ENABLE_CAPTCHA: | ||
return False | ||||
enable_captcha = False | ||||
#newcomer | ||||
if KEY_CAPTCHA_LAST_ACTIVITY not in request.session: | ||||
return settings.ENABLE_CAPTCHA | ||||
last_activity = request.session[KEY_CAPTCHA_LAST_ACTIVITY] | ||||
current_delay = int(time.time()) - last_activity | ||||
delay_time = (request.session[KEY_CAPTCHA_DELAY_TIME] | ||||
if KEY_CAPTCHA_DELAY_TIME in request.session | ||||
else settings.CAPTCHA_DEFAULT_SAFE_TIME) | ||||
if current_delay < delay_time: | ||||
enable_captcha = True | ||||
return enable_captcha | ||||
def update_captcha_access(request, passed): | ||||
""" | ||||
Update captcha fields. | ||||
It will reduce delay time if user passed captcha verification and | ||||
it will increase it otherwise. | ||||
""" | ||||
session = request.session | ||||
delay_time = (request.session[KEY_CAPTCHA_DELAY_TIME] | ||||
if KEY_CAPTCHA_DELAY_TIME in request.session | ||||
else settings.CAPTCHA_DEFAULT_SAFE_TIME) | ||||
if passed: | ||||
delay_time -= 2 if delay_time >= 7 else 5 | ||||
else: | ||||
delay_time += 10 | ||||
session[KEY_CAPTCHA_LAST_ACTIVITY] = int(time.time()) | ||||
session[KEY_CAPTCHA_DELAY_TIME] = delay_time | ||||
neko259
|
r210 | |||
def get_client_ip(request): | ||||
x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR') | ||||
if x_forwarded_for: | ||||
ip = x_forwarded_for.split(',')[-1].strip() | ||||
else: | ||||
ip = request.META.get('REMOTE_ADDR') | ||||
neko259
|
r542 | return ip | ||
def datetime_to_epoch(datetime): | ||||
return int(time.mktime(timezone.localtime( | ||||
datetime,timezone.get_current_timezone()).timetuple()) | ||||
neko259
|
r765 | * 1000000 + datetime.microsecond) | ||