mirror of
https://github.com/jumpserver/jumpserver.git
synced 2025-09-14 22:39:10 +00:00
feat: 支持 virtual app (#12199)
* feat: 支持 virtual app * perf: 增加 virtual host * perf: 新增 virtual app 上传接口 * perf: 更名为 app provider * perf: 优化代码 --------- Co-authored-by: Eric <xplzv@126.com>
This commit is contained in:
@@ -33,7 +33,7 @@ from ..models import ConnectionToken, date_expired_default
|
||||
from ..serializers import (
|
||||
ConnectionTokenSerializer, ConnectionTokenSecretSerializer,
|
||||
SuperConnectionTokenSerializer, ConnectTokenAppletOptionSerializer,
|
||||
ConnectionTokenReusableSerializer,
|
||||
ConnectionTokenReusableSerializer, ConnectTokenVirtualAppOptionSerializer
|
||||
)
|
||||
|
||||
__all__ = ['ConnectionTokenViewSet', 'SuperConnectionTokenViewSet']
|
||||
@@ -464,6 +464,7 @@ class SuperConnectionTokenViewSet(ConnectionTokenViewSet):
|
||||
'get_secret_detail': 'authentication.view_superconnectiontokensecret',
|
||||
'get_applet_info': 'authentication.view_superconnectiontoken',
|
||||
'release_applet_account': 'authentication.view_superconnectiontoken',
|
||||
'get_virtual_app_info': 'authentication.view_superconnectiontoken',
|
||||
}
|
||||
|
||||
def get_queryset(self):
|
||||
@@ -529,6 +530,16 @@ class SuperConnectionTokenViewSet(ConnectionTokenViewSet):
|
||||
serializer = ConnectTokenAppletOptionSerializer(data)
|
||||
return Response(serializer.data)
|
||||
|
||||
@action(methods=['POST'], detail=False, url_path='virtual-app-option')
|
||||
def get_virtual_app_info(self, *args, **kwargs):
|
||||
token_id = self.request.data.get('id')
|
||||
token = get_object_or_404(ConnectionToken, pk=token_id)
|
||||
if token.is_expired:
|
||||
return Response({'error': 'Token expired'}, status=status.HTTP_400_BAD_REQUEST)
|
||||
data = token.get_virtual_app_option()
|
||||
serializer = ConnectTokenVirtualAppOptionSerializer(data)
|
||||
return Response(serializer.data)
|
||||
|
||||
@action(methods=['DELETE', 'POST'], detail=False, url_path='applet-account/release')
|
||||
def release_applet_account(self, *args, **kwargs):
|
||||
account_id = self.request.data.get('id')
|
||||
|
@@ -18,7 +18,7 @@ from common.utils import lazyproperty, pretty_string, bulk_get
|
||||
from common.utils.timezone import as_current_tz
|
||||
from orgs.mixins.models import JMSOrgBaseModel
|
||||
from orgs.utils import tmp_to_org
|
||||
from terminal.models import Applet
|
||||
from terminal.models import Applet, VirtualApp
|
||||
|
||||
|
||||
def date_expired_default():
|
||||
@@ -177,6 +177,15 @@ class ConnectionToken(JMSOrgBaseModel):
|
||||
}
|
||||
return options
|
||||
|
||||
def get_virtual_app_option(self):
|
||||
method = self.connect_method_object
|
||||
if not method or method.get('type') != 'virtual_app' or method.get('disabled', False):
|
||||
return None
|
||||
virtual_app = VirtualApp.objects.filter(name=method.get('value')).first()
|
||||
if not virtual_app:
|
||||
return None
|
||||
return virtual_app
|
||||
|
||||
def get_applet_option(self):
|
||||
method = self.connect_method_object
|
||||
if not method or method.get('type') != 'applet' or method.get('disabled', False):
|
||||
|
@@ -15,7 +15,8 @@ from users.models import User
|
||||
from ..models import ConnectionToken
|
||||
|
||||
__all__ = [
|
||||
'ConnectionTokenSecretSerializer', 'ConnectTokenAppletOptionSerializer'
|
||||
'ConnectionTokenSecretSerializer', 'ConnectTokenAppletOptionSerializer',
|
||||
'ConnectTokenVirtualAppOptionSerializer',
|
||||
]
|
||||
|
||||
|
||||
@@ -161,3 +162,10 @@ class ConnectTokenAppletOptionSerializer(serializers.Serializer):
|
||||
account = _ConnectionTokenAccountSerializer(read_only=True)
|
||||
gateway = _ConnectionTokenGatewaySerializer(read_only=True)
|
||||
remote_app_option = serializers.JSONField(read_only=True)
|
||||
|
||||
|
||||
class ConnectTokenVirtualAppOptionSerializer(serializers.Serializer):
|
||||
name = serializers.CharField(label=_('Name'))
|
||||
image_name = serializers.CharField(label=_('Image name'))
|
||||
image_port = serializers.IntegerField(label=_('Image port'))
|
||||
image_protocol = serializers.CharField(label=_('Image protocol'))
|
||||
|
Reference in New Issue
Block a user