__init__.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. from django.conf import settings
  2. from django.core.urlresolvers import reverse, NoReverseMatch
  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. try:
  10. admin_path = reverse('%s:index' % namespace)
  11. if request.path.startswith(admin_path):
  12. return namespace
  13. except NoReverseMatch:
  14. pass
  15. else:
  16. return None
  17. def render(request, template, context=None):
  18. context = context or {}
  19. navigation = site.visible_branches(request)
  20. sections = navigation[0]
  21. try:
  22. actions = navigation[1]
  23. except IndexError:
  24. actions = []
  25. try:
  26. pages = navigation[2]
  27. except IndexError:
  28. pages = []
  29. context.update({
  30. 'sections': sections,
  31. 'actions': actions,
  32. 'pages': pages
  33. })
  34. return dj_render(request, template, context)
  35. # Decorator for views
  36. def protected_admin_view(f):
  37. def decorator(request, *args, **kwargs):
  38. protected_view = get_protected_namespace(request)
  39. if protected_view:
  40. if is_admin_session(request):
  41. update_admin_session(request)
  42. return f(request, *args, **kwargs)
  43. else:
  44. request.admin_namespace = protected_view
  45. return login(request)
  46. else:
  47. return f(request, *args, **kwargs)
  48. return decorator