jumpserver/apps/accounts/api/account/task.py

52 lines
1.7 KiB
Python
Raw Normal View History

2023-02-21 05:00:04 +00:00
from rest_framework.generics import CreateAPIView
from rest_framework.response import Response
from accounts import serializers
from accounts.tasks import verify_accounts_connectivity_task, push_accounts_to_assets_task
from assets.exceptions import NotSupportedTemporarilyError
2023-02-21 05:00:04 +00:00
__all__ = [
'AccountsTaskCreateAPI',
]
class AccountsTaskCreateAPI(CreateAPIView):
serializer_class = serializers.AccountTaskSerializer
def check_permissions(self, request):
2023-02-21 05:47:47 +00:00
act = request.data.get('action')
if act == 'push':
code = 'accounts.push_account'
else:
code = 'accounts.verify_account'
2023-09-13 09:05:01 +00:00
has = request.user.has_perm(code)
if not has:
self.permission_denied(request)
2023-02-21 05:00:04 +00:00
def perform_create(self, serializer):
data = serializer.validated_data
accounts = data.get('accounts', [])
2023-04-14 07:34:56 +00:00
params = data.get('params')
account_ids = [str(a.id) for a in accounts]
2023-02-21 05:00:04 +00:00
if data['action'] == 'push':
2023-04-14 07:34:56 +00:00
task = push_accounts_to_assets_task.delay(account_ids, params)
2023-02-21 05:00:04 +00:00
else:
account = accounts[0]
asset = account.asset
if not asset.auto_config['ansible_enabled'] or \
not asset.auto_config['ping_enabled']:
raise NotSupportedTemporarilyError()
2023-02-21 05:00:04 +00:00
task = verify_accounts_connectivity_task.delay(account_ids)
data = getattr(serializer, '_data', {})
data["task"] = task.id
setattr(serializer, '_data', data)
return task
def get_exception_handler(self):
def handler(e, context):
2023-09-13 09:05:01 +00:00
return Response({"error": str(e)}, status=401)
2023-02-21 05:00:04 +00:00
return handler