context_processors.py 1.4 KB

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