##// END OF EJS Templates
Removed old users autoremoval
Removed old users autoremoval

File last commit:

r657:cb9d10de default
r657:cb9d10de default
Show More
base.py
127 lines | 3.6 KiB | text/x-python | PythonLexer
neko259
Rewriting views to class-based
r542 from datetime import datetime, timedelta
import hashlib
from django.db import transaction
from django.db.models import Count
from django.template import RequestContext
from django.utils import timezone
from django.views.generic import View
from boards import utils
from boards.models import User, Post
from boards.models.post import SETTING_MODERATE
from boards.models.user import RANK_USER, Ban
import neboard
BAN_REASON_SPAM = 'Autoban: spam bot'
OLD_USER_AGE_DAYS = 90
PARAMETER_FORM = 'form'
class BaseBoardView(View):
def get_context_data(self, **kwargs):
request = kwargs['request']
context = self._default_context(request)
context['version'] = neboard.settings.VERSION
context['site_name'] = neboard.settings.SITE_NAME
return context
def _default_context(self, request):
"""Create context with default values that are used in most views"""
context = RequestContext(request)
user = self._get_user(request)
context['user'] = user
neko259
Optimized thread view and threads list
r649 context['tags'] = user.fav_tags.all()
neko259
Rewriting views to class-based
r542 context['posts_per_day'] = float(Post.objects.get_posts_per_day())
theme = self._get_theme(request, user)
context['theme'] = theme
context['theme_css'] = 'css/' + theme + '/base_page.css'
# This shows the moderator panel
moderate = user.get_setting(SETTING_MODERATE)
if moderate == 'True':
context['moderator'] = user.is_moderator()
else:
context['moderator'] = False
return context
def _get_user(self, 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)
neko259
Removed old users autoremoval
r657 # TODO Move this to manage.py commands
#self._delete_old_users()
neko259
Rewriting views to class-based
r542
session['user_id'] = user.id
else:
neko259
Optimized thread view and threads list
r649 user = User.objects.select_related('fav_tags').get(
id=session['user_id'])
neko259
Rewriting views to class-based
r542
return user
def _get_theme(self, request, user=None):
"""
Get user's CSS theme
"""
if not user:
user = self._get_user(request)
theme = user.get_setting('theme')
if not theme:
theme = neboard.settings.DEFAULT_THEME
return theme
def _delete_old_users(self):
"""
Delete users with no favorite tags and posted messages. These can be spam
bots or just old user accounts
"""
old_registration_date = datetime.now().date() - timedelta(
OLD_USER_AGE_DAYS)
for user in User.objects.annotate(tags_count=Count('fav_tags')).filter(
tags_count=0).filter(
registration_time__lt=old_registration_date):
if not Post.objects.filter(user=user).exists():
user.delete()
@transaction.atomic
def _ban_current_user(self, request):
"""
Add current user to the IP ban list
"""
ip = utils.get_client_ip(request)
ban, created = Ban.objects.get_or_create(ip=ip)
if created:
ban.can_read = False
ban.reason = BAN_REASON_SPAM
ban.save()