default_controller.py 4.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. # coding=utf-8
  2. from tracim.views.controllers import Controller
  3. from pyramid.config import Configurator
  4. from pyramid.response import Response
  5. from pyramid.exceptions import NotFound
  6. from pyramid.httpexceptions import HTTPUnauthorized
  7. from pyramid.httpexceptions import HTTPForbidden
  8. from pyramid.security import forget
  9. from tracim.lib.utils.auth import MANAGE_CONTENT_PERM
  10. from tracim.lib.utils.auth import MANAGE_WORKSPACE_PERM
  11. from tracim.lib.utils.auth import MANAGE_GLOBAL_PERM
  12. from tracim.lib.utils.auth import READ_PERM
  13. from tracim.lib.utils.auth import CONTRIBUTE_PERM
  14. from tracim.lib.utils.auth import ADMIN_PERM
  15. from tracim.lib.utils.auth import USER_PERM
  16. class DefaultController(Controller):
  17. @classmethod
  18. def notfound_view(cls, request):
  19. request.response.status = 404
  20. return {}
  21. @classmethod
  22. def forbidden_view(cls, request):
  23. if request.authenticated_userid is None:
  24. response = HTTPUnauthorized()
  25. response.headers.update(forget(request))
  26. # user is logged in but doesn't have permissions, reject wholesale
  27. else:
  28. response = HTTPForbidden()
  29. return response
  30. @classmethod
  31. def test_config(cls, request):
  32. try:
  33. app_config = request.registry.settings['CFG']
  34. project = app_config.WEBSITE_TITLE
  35. except Exception as e:
  36. return Response(e, content_type='text/plain', status=500)
  37. return {'project': project}
  38. @classmethod
  39. def test_contributor_page(cls, request):
  40. try:
  41. app_config = request.registry.settings['CFG']
  42. project = 'contributor'
  43. except Exception as e:
  44. return Response(e, content_type='text/plain', status=500)
  45. return {'project': project}
  46. @classmethod
  47. def test_admin_page(cls, request):
  48. try:
  49. app_config = request.registry.settings['CFG']
  50. project = 'admin'
  51. except Exception as e:
  52. return Response(e, content_type='text/plain', status=500)
  53. return {'project': project}
  54. @classmethod
  55. def test_manager_page(cls, request):
  56. try:
  57. app_config = request.registry.settings['CFG']
  58. project = 'manager'
  59. except Exception as e:
  60. return Response(e, content_type='text/plain', status=500)
  61. return {'project': project}
  62. @classmethod
  63. def test_user_page(cls, request):
  64. try:
  65. app_config = request.registry.settings['CFG']
  66. project = 'user'
  67. except Exception as e:
  68. return Response(e, content_type='text/plain', status=500)
  69. return {'project': project}
  70. def bind(self, configurator: Configurator):
  71. configurator.add_static_view('static', 'static', cache_max_age=3600)
  72. configurator.add_view(
  73. self.notfound_view,
  74. renderer='tracim:templates/404.jinja2',
  75. context=NotFound,
  76. )
  77. configurator.add_route('test_config', '/')
  78. configurator.add_view(
  79. self.test_config,
  80. route_name='test_config',
  81. renderer='tracim:templates/mytemplate.jinja2',
  82. )
  83. configurator.add_route('test_contributor', '/test_contributor')
  84. configurator.add_view(
  85. self.test_contributor_page,
  86. route_name='test_contributor',
  87. renderer='tracim:templates/mytemplate.jinja2',
  88. permission=CONTRIBUTE_PERM,
  89. )
  90. configurator.add_route('test_admin', '/test_admin')
  91. configurator.add_view(
  92. self.test_admin_page,
  93. route_name='test_admin',
  94. renderer='tracim:templates/mytemplate.jinja2',
  95. permission=ADMIN_PERM,
  96. )
  97. configurator.add_route('test_manager', '/test_manager')
  98. configurator.add_view(
  99. self.test_user_page,
  100. route_name='test_manager',
  101. renderer='tracim:templates/mytemplate.jinja2',
  102. permission=MANAGE_GLOBAL_PERM,
  103. )
  104. configurator.add_route('test_user', '/test_user')
  105. configurator.add_view(
  106. self.test_user_page,
  107. route_name='test_user',
  108. renderer='tracim:templates/mytemplate.jinja2',
  109. permission=USER_PERM,
  110. )
  111. configurator.add_forbidden_view(self.forbidden_view)