Files
jumpserver/apps/common/api/jdmc.py

43 lines
1.3 KiB
Python

from rest_framework.generics import RetrieveAPIView
from rest_framework.response import Response
from common.permissions import OnlyAdminSuperUser
from common.jdmc import request_jdmc
from common.utils import get_logger
__all__ = ['JdmcSSOTokenAPI']
logger = get_logger(__file__)
class JdmcSSOTokenAPI(RetrieveAPIView):
permission_classes = [OnlyAdminSuperUser]
def retrieve(self, request, *args, **kwargs):
logger.info(f'User {request.user.username} is requesting JDMC SSO token')
token, error = self.create_sso_token()
if error:
return Response({'error': error}, status=403)
else:
return Response({'token': token})
def create_sso_token(self):
response = request_jdmc(method='POST', path='/jdmc/api/v1/auth/tokens')
if response.status_code != 200:
error = f'Failed to create SSO token from JDMC, status code: {response.status_code}, response: {response.text}'
logger.error(error)
return None, error
json_response = response.json()
if json_response.get('code') != 0:
error = f'Failed to create SSO token from JDMC, response: {json_response}'
logger.error(error)
return None, error
token = json_response.get('data', {}).get('token', '')
return token, ''