__init__.py 2.8KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. # -*- coding: utf-8 -*-
  2. import json
  3. import time
  4. from pyramid.config import Configurator
  5. from pyramid.authentication import BasicAuthAuthenticationPolicy
  6. from hapic.ext.pyramid import PyramidContext
  7. from tracim.extensions import hapic
  8. from tracim.config import CFG
  9. from tracim.lib.utils.request import TracimRequest
  10. from tracim.lib.utils.authentification import basic_auth_check_credentials
  11. from tracim.lib.utils.authentification import BASIC_AUTH_WEBUI_REALM
  12. from tracim.lib.utils.authorization import AcceptAllAuthorizationPolicy
  13. from tracim.lib.utils.authorization import TRACIM_DEFAULT_PERM
  14. from tracim.lib.webdav import WebdavAppFactory
  15. from tracim.views import BASE_API_V2
  16. from tracim.views.core_api.session_controller import SessionController
  17. from tracim.views.errors import ErrorSchema
  18. from tracim.lib.utils.cors import add_cors_support
  19. def web(global_config, **local_settings):
  20. """ This function returns a Pyramid WSGI application.
  21. """
  22. settings = global_config
  23. settings.update(local_settings)
  24. # set CFG object
  25. app_config = CFG(settings)
  26. app_config.configure_filedepot()
  27. settings['CFG'] = app_config
  28. configurator = Configurator(settings=settings, autocommit=True)
  29. # Add BasicAuthPolicy
  30. authn_policy = BasicAuthAuthenticationPolicy(
  31. basic_auth_check_credentials,
  32. realm=BASIC_AUTH_WEBUI_REALM,
  33. )
  34. configurator.include(add_cors_support)
  35. # make sure to add this before other routes to intercept OPTIONS
  36. configurator.add_cors_preflight_handler()
  37. # Default authorization : Accept anything.
  38. configurator.set_authorization_policy(AcceptAllAuthorizationPolicy())
  39. configurator.set_authentication_policy(authn_policy)
  40. # INFO - GM - 11-04-2018 - set default perm
  41. # setting default perm is needed to force authentification
  42. # mecanism in all views.
  43. configurator.set_default_permission(TRACIM_DEFAULT_PERM)
  44. # Override default request
  45. configurator.set_request_factory(TracimRequest)
  46. # Pyramids "plugin" include.
  47. configurator.include('pyramid_jinja2')
  48. # Add SqlAlchemy DB
  49. configurator.include('.models')
  50. # set Hapic
  51. hapic.set_context(
  52. PyramidContext(
  53. configurator=configurator,
  54. default_error_builder=ErrorSchema()
  55. )
  56. )
  57. # Add controllers
  58. session_api = SessionController()
  59. configurator.include(session_api.bind, route_prefix=BASE_API_V2)
  60. hapic.add_documentation_view(
  61. '/api/v2/doc',
  62. 'Tracim v2 API',
  63. 'API of Tracim v2',
  64. )
  65. return configurator.make_wsgi_app()
  66. def webdav(global_config, **local_settings):
  67. settings = global_config
  68. settings.update(local_settings)
  69. app_factory = WebdavAppFactory(
  70. tracim_config_file_path=settings['__file__'],
  71. )
  72. return app_factory.get_wsgi_app()