default_controller.py 2.7KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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. class DefaultController(Controller):
  10. @classmethod
  11. def notfound_view(cls, request):
  12. request.response.status = 404
  13. return {}
  14. @classmethod
  15. def forbidden_view(cls, request):
  16. if request.authenticated_userid is None:
  17. response = HTTPUnauthorized()
  18. response.headers.update(forget(request))
  19. # user is logged in but doesn't have permissions, reject wholesale
  20. else:
  21. response = HTTPForbidden()
  22. return response
  23. @classmethod
  24. def test_config(cls, request):
  25. try:
  26. app_config = request.registry.settings['CFG']
  27. project = app_config.WEBSITE_TITLE
  28. except Exception as e:
  29. return Response(e, content_type='text/plain', status=500)
  30. return {'project': project}
  31. @classmethod
  32. def test_admin_page(cls, request):
  33. try:
  34. app_config = request.registry.settings['CFG']
  35. project = 'admin'
  36. except Exception as e:
  37. return Response(e, content_type='text/plain', status=500)
  38. return {'project': project}
  39. @classmethod
  40. def test_user_page(cls, request):
  41. try:
  42. app_config = request.registry.settings['CFG']
  43. project = 'user'
  44. except Exception as e:
  45. return Response(e, content_type='text/plain', status=500)
  46. return {'project': project}
  47. def bind(self, configurator: Configurator):
  48. configurator.add_static_view('static', 'static', cache_max_age=3600)
  49. configurator.add_view(
  50. self.notfound_view,
  51. renderer='tracim:templates/404.jinja2',
  52. context=NotFound,
  53. )
  54. configurator.add_route('test_config', '/')
  55. configurator.add_view(
  56. self.test_config,
  57. route_name='test_config',
  58. renderer='tracim:templates/mytemplate.jinja2',
  59. )
  60. configurator.add_route('test_admin', '/test_admin')
  61. configurator.add_view(
  62. self.test_admin_page,
  63. route_name='test_admin',
  64. renderer='tracim:templates/mytemplate.jinja2',
  65. permission='admin',
  66. )
  67. configurator.add_route('test_user', '/test_user')
  68. configurator.add_view(
  69. self.test_user_page,
  70. route_name='test_user',
  71. renderer='tracim:templates/mytemplate.jinja2',
  72. permission='user',
  73. )
  74. configurator.add_forbidden_view(self.forbidden_view)