mirror of
https://github.com/jumpserver/jumpserver.git
synced 2026-05-17 13:01:16 +00:00
43 lines
1.3 KiB
Python
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, ''
|