context_processors.py 1.3 KB

123456789101112131415161718192021222324252627282930313233343536
  1. from django.core.exceptions import PermissionDenied
  2. from django.urls import reverse
  3. from django.utils import six
  4. from .searchproviders import searchproviders
  5. def search_providers(request):
  6. allowed_providers = []
  7. try:
  8. if request.user.acl_cache['can_search']:
  9. allowed_providers = searchproviders.get_allowed_providers(request)
  10. except AttributeError:
  11. # is user has no acl_cache attribute, cease entire middleware
  12. # this is edge case that occurs when debug toolbar intercepts
  13. # the redirect response from logout page and runs context providers
  14. # with non-misago's anonymous user model that has no acl support
  15. return {}
  16. request.frontend_context['SEARCH_URL'] = reverse('misago:search')
  17. request.frontend_context['SEARCH_API'] = reverse('misago:api:search')
  18. request.frontend_context['SEARCH_PROVIDERS'] = []
  19. for provider in allowed_providers:
  20. request.frontend_context['SEARCH_PROVIDERS'].append({
  21. 'id': provider.url,
  22. 'name': six.text_type(provider.name),
  23. 'icon': provider.icon,
  24. 'url': reverse('misago:search', kwargs={'search_provider': provider.url}),
  25. 'api': reverse('misago:api:search', kwargs={'search_provider': provider.url}),
  26. 'results': None,
  27. 'time': None,
  28. })
  29. return {}