12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- # coding=utf-8
- from pyramid.config import Configurator
- try: # Python 3.5+
- from http import HTTPStatus
- except ImportError:
- from http import client as HTTPStatus
-
- from tracim_backend import TracimRequest
- from tracim_backend.extensions import hapic
- from tracim_backend.lib.core.user import UserApi
- from tracim_backend.views.controllers import Controller
- from tracim_backend.views.core_api.schemas import UserSchema
- from tracim_backend.views.core_api.schemas import NoContentSchema
- from tracim_backend.views.core_api.schemas import LoginOutputHeaders
- from tracim_backend.views.core_api.schemas import BasicAuthSchema
- from tracim_backend.exceptions import NotAuthenticated
- from tracim_backend.exceptions import AuthenticationFailed
-
- SWAGGER_TAG__SESSION_ENDPOINTS = 'Session'
-
-
- class SessionController(Controller):
-
- @hapic.with_api_doc(tags=[SWAGGER_TAG__SESSION_ENDPOINTS])
- @hapic.input_headers(LoginOutputHeaders())
- @hapic.input_body(BasicAuthSchema())
- # TODO - G.M - 17-04-2018 - fix output header ?
- # @hapic.output_headers()
- @hapic.output_body(UserSchema(),)
- def login(self, context, request: TracimRequest, hapic_data=None):
- """
- Logs user into the system
- """
-
- login = hapic_data.body
- app_config = request.registry.settings['CFG']
- uapi = UserApi(
- None,
- session=request.dbsession,
- config=app_config,
- )
- user = uapi.authenticate_user(login.email, login.password)
- return uapi.get_user_with_context(user)
-
- @hapic.with_api_doc(tags=[SWAGGER_TAG__SESSION_ENDPOINTS])
- @hapic.output_body(NoContentSchema(), default_http_code=HTTPStatus.NO_CONTENT) # nopep8
- def logout(self, context, request: TracimRequest, hapic_data=None):
- """
- Logs out current logged in user session
- """
-
- return
-
- @hapic.with_api_doc(tags=[SWAGGER_TAG__SESSION_ENDPOINTS])
- @hapic.output_body(UserSchema(),)
- def whoami(self, context, request: TracimRequest, hapic_data=None):
- """
- Return current logged in user or 401
- """
- app_config = request.registry.settings['CFG']
- uapi = UserApi(
- request.current_user,
- session=request.dbsession,
- config=app_config,
- )
- user = uapi.get_current_user() # User
- return uapi.get_user_with_context(user)
-
- def bind(self, configurator: Configurator):
-
- # Login
- configurator.add_route('login', '/sessions/login', request_method='POST') # nopep8
- configurator.add_view(self.login, route_name='login')
- # Logout
- configurator.add_route('logout', '/sessions/logout', request_method='POST') # nopep8
- configurator.add_view(self.logout, route_name='logout')
- configurator.add_route('logout_get', '/sessions/logout', request_method='GET') # nopep8
- configurator.add_view(self.logout, route_name='logout_get')
- # Whoami
- configurator.add_route('whoami', '/sessions/whoami', request_method='GET') # nopep8
- configurator.add_view(self.whoami, route_name='whoami',)
|