views.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. from hashlib import md5
  2. from django.http import Http404
  3. from django.shortcuts import redirect, render
  4. from django.utils.encoding import force_bytes
  5. from django.utils.translation import gettext as _
  6. from misago.conf import settings
  7. from misago.core.cache import cache
  8. from misago.markup import common_flavour
  9. def get_parsed_content(request, setting_name):
  10. cache_name = 'misago_legal_%s' % setting_name
  11. cached_content = cache.get(cache_name)
  12. unparsed_content = settings.get_lazy_setting(setting_name)
  13. checksum_source = force_bytes('%s:%s' % (unparsed_content, settings.SECRET_KEY))
  14. unparsed_checksum = md5(checksum_source).hexdigest()
  15. if cached_content and cached_content.get('checksum') == unparsed_checksum:
  16. return cached_content['parsed']
  17. else:
  18. parsed = common_flavour(request, None, unparsed_content)['parsed_text']
  19. cached_content = {
  20. 'checksum': unparsed_checksum,
  21. 'parsed': parsed,
  22. }
  23. cache.set(cache_name, cached_content)
  24. return cached_content['parsed']
  25. def privacy_policy(request):
  26. if not (settings.privacy_policy or settings.privacy_policy_link):
  27. raise Http404()
  28. if settings.privacy_policy_link:
  29. return redirect(settings.privacy_policy_link)
  30. parsed_content = get_parsed_content(request, 'privacy_policy')
  31. return render(request, 'misago/privacy_policy.html', {
  32. 'id': 'privacy-policy',
  33. 'title': settings.privacy_policy_title or _("Privacy policy"),
  34. 'link': settings.privacy_policy_link,
  35. 'body': parsed_content,
  36. })
  37. def terms_of_service(request):
  38. if not (settings.terms_of_service or settings.terms_of_service_link):
  39. raise Http404()
  40. if settings.terms_of_service_link:
  41. return redirect(settings.terms_of_service_link)
  42. parsed_content = get_parsed_content(request, 'terms_of_service')
  43. return render(request, 'misago/terms_of_service.html', {
  44. 'id': 'terms-of-service',
  45. 'title': settings.terms_of_service_title or _("Terms of service"),
  46. 'link': settings.terms_of_service_link,
  47. 'body': parsed_content,
  48. })