__init__.py 2.3KB

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