from authlib.integrations.requests_client import OAuth2Session, OAuthError from authlib.oauth2.rfc6749 import OAuth2Token from flask import jsonify, request from slz_api_service.auth import AuthCredentials from slz_api_service.errors import AuthError, Codes class OAuth2: @staticmethod def post(): """Endpoint: ``POST /v1/oauth/token``""" params = request.json # pass thru credentials from request to Auth0 to get a token credentials = AuthCredentials.from_dict(params) session = OAuth2Session(client_id=credentials.client_id, client_secret=credentials.client_secret, scope=credentials.scope, token_endpoint_auth_method=credentials.token_endpoint_auth_method) try: token: OAuth2Token = session.fetch_access_token(credentials.access_token_url, grant_type=credentials.grant_type, audience=credentials.audience) except OAuthError: raise AuthError({ 'code': Codes.unauthorized.value, 'description': 'Unauthorized credentials provided', }) return jsonify(token)