from misago.utils.strings import random_string class CSRFProtection(object): def __init__(self, csrf_token): self.csrf_id = '_csrf_token' self.csrf_token = csrf_token def request_secure(self, request): return request.method == 'POST' and request.POST.get(self.csrf_id) == self.csrf_token class CSRFMiddleware(object): def process_request(self, request): if request.user.is_crawler(): return None if 'csrf_token' in request.session: csrf_token = request.session['csrf_token'] else: csrf_token = random_string(16); request.session['csrf_token'] = csrf_token request.csrf = CSRFProtection(csrf_token)