123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- from datetime import timedelta
- from unidecode import unidecode
- from django.http import Http404
- from django.core.urlresolvers import resolve, reverse
- from django.template.defaultfilters import (slugify as django_slugify,
- date as dj_date_format)
- from django.utils import html, timezone
- from django.utils.translation import ugettext_lazy as _, ungettext_lazy
- def slugify(string):
- string = unicode(string)
- string = unidecode(string)
- return django_slugify(string.replace('_', ' ').strip())
- def format_plaintext_for_html(string):
- return html.linebreaks(html.urlize(html.escape(string)))
- """
- Mark request as having sensitive parameters
- We can't use decorator because of DRF uses custom HttpRequest
- that is incompatibile with Django's decorator
- """
- def hide_post_parameters(request):
- request.sensitive_post_parameters = '__ALL__'
- """
- Return path utility
- """
- def clean_return_path(request):
- if request.method == 'POST' and 'return_path' in request.POST:
- return _get_return_path_from_post(request)
- else:
- return _get_return_path_from_referer(request)
- def _get_return_path_from_post(request):
- return_path = request.POST.get('return_path')
- try:
- if not return_path:
- raise ValueError()
- if not return_path.startswith('/'):
- raise ValueError()
- resolve(return_path)
- return return_path
- except (Http404, ValueError):
- return None
- def _get_return_path_from_referer(request):
- referer = request.META.get('HTTP_REFERER')
- try:
- if not referer:
- raise ValueError()
- if not referer.startswith(request.scheme):
- raise ValueError()
- referer = referer[len(request.scheme) + 3:]
- if not referer.startswith(request.META['HTTP_HOST']):
- raise ValueError()
- referer = referer[len(request.META['HTTP_HOST'].rstrip('/')):]
- if not referer.startswith('/'):
- raise ValueError()
- resolve(referer)
- return referer
- except (Http404, KeyError, ValueError):
- return None
- """
- Utils for resolving requests destination
- """
- def _is_request_path_under_misago(request):
- # We are assuming that forum_index link is root of all Misago links
- forum_index = reverse('misago:index')
- path_info = request.path_info
- if len(forum_index) > len(path_info):
- return False
- return path_info[:len(forum_index)] == forum_index
- def is_request_to_misago(request):
- try:
- return request._request_to_misago
- except AttributeError:
- request._request_to_misago = _is_request_path_under_misago(request)
- return request._request_to_misago
- def is_referer_local(request):
- referer = request.META.get('HTTP_REFERER')
- if not referer:
- return False
- if not referer.startswith(request.scheme):
- return False
- referer = referer[len(request.scheme) + 3:]
- if not referer.startswith(request.META['HTTP_HOST']):
- return False
- referer = referer[len(request.META['HTTP_HOST'].rstrip('/')):]
- if not referer.startswith('/'):
- return False
- return True
|