__init__.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. from django.conf import settings
  2. from django.core.urlresolvers import reverse
  3. from django.shortcuts import render as dj_render
  4. from misago.admin import site
  5. from misago.admin.auth import is_admin_session, update_admin_session
  6. from misago.admin.views.auth import login
  7. def get_protected_namespace(request):
  8. for namespace in settings.MISAGO_ADMIN_NAMESPACES:
  9. admin_path = reverse('%s:index' % namespace)
  10. if request.path.startswith(admin_path):
  11. return namespace
  12. else:
  13. return None
  14. def render(request, template, context=None):
  15. context = context or {}
  16. navigation = site.visible_branches(request)
  17. sections = navigation[0]
  18. try:
  19. actions = navigation[1]
  20. except IndexError:
  21. actions = []
  22. try:
  23. pages = navigation[2]
  24. except IndexError:
  25. pages = []
  26. context.update({
  27. 'sections': sections,
  28. 'actions': actions,
  29. 'pages': pages
  30. })
  31. return dj_render(request, template, context)
  32. # Decorator for views
  33. def protected_admin_view(f):
  34. def decorator(request, *args, **kwargs):
  35. protected_view = get_protected_namespace(request)
  36. if protected_view:
  37. if is_admin_session(request):
  38. update_admin_session(request)
  39. return f(request, *args, **kwargs)
  40. else:
  41. request.admin_namespace = protected_view
  42. return login(request)
  43. else:
  44. return f(request, *args, **kwargs)
  45. return decorator