##// END OF EJS Templates
Code cleanup part 2
Code cleanup part 2

File last commit:

r716:a6b9dd95 1.8.1 default
r722:0a4dc1c4 default
Show More
utils.py
128 lines | 3.2 KiB | text/x-python | PythonLexer
"""
This module contains helper functions and helper classes.
"""
import hashlib
import time
from django.utils import timezone
import boards
from neboard import settings
from boards.models import User
from boards.models.user import RANK_USER
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):
"""
Check if request is made by a user.
It contains rules which check for bots.
"""
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
print 'ENABLING' + str(enable_captcha)
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)
print "DELAY TIME = " + str(delay_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
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')
return ip
def datetime_to_epoch(datetime):
return int(time.mktime(timezone.localtime(
datetime,timezone.get_current_timezone()).timetuple())
* 1000000 + datetime.microsecond)
def get_user(request):
"""
Get current user from the session. If the user does not exist, create
a new one.
"""
session = request.session
if not 'user_id' in session:
request.session.save()
md5 = hashlib.md5()
md5.update(session.session_key)
new_id = md5.hexdigest()
while User.objects.filter(user_id=new_id).exists():
md5.update(str(timezone.now()))
new_id = md5.hexdigest()
time_now = timezone.now()
user = User.objects.create(user_id=new_id, rank=RANK_USER,
registration_time=time_now)
session['user_id'] = user.id
else:
user = User.objects.select_related('fav_tags').get(
id=session['user_id'])
return user
def get_theme(request, user=None):
"""
Get user's CSS theme
"""
if not user:
user = get_user(request)
theme = user.get_setting('theme')
if not theme:
theme = boards.settings.DEFAULT_THEME
return theme