mirror of https://github.com/jumpserver/jumpserver
				
				
				
			perf: 修改 connect token
							parent
							
								
									426900145e
								
							
						
					
					
						commit
						6593648554
					
				| 
						 | 
				
			
			@ -20,7 +20,7 @@ from common.utils.django import get_request_os
 | 
			
		|||
from orgs.mixins.api import RootOrgViewMixin
 | 
			
		||||
from perms.models import ActionChoices
 | 
			
		||||
from terminal.const import NativeClient
 | 
			
		||||
from terminal.models import EndpointRule
 | 
			
		||||
from terminal.models import EndpointRule, Applet
 | 
			
		||||
from ..models import ConnectionToken
 | 
			
		||||
from ..serializers import (
 | 
			
		||||
    ConnectionTokenSerializer, ConnectionTokenSecretSerializer,
 | 
			
		||||
| 
						 | 
				
			
			@ -33,13 +33,34 @@ class RDPFileClientProtocolURLMixin:
 | 
			
		|||
    request: Request
 | 
			
		||||
    get_serializer: callable
 | 
			
		||||
 | 
			
		||||
    @staticmethod
 | 
			
		||||
    def set_applet_info(token, rdp_options):
 | 
			
		||||
        # remote-app
 | 
			
		||||
        applet = Applet.objects.filter(name=token.connect_method).first()
 | 
			
		||||
        if not applet:
 | 
			
		||||
            return rdp_options
 | 
			
		||||
 | 
			
		||||
        cmdline = {
 | 
			
		||||
            'app_name': applet.name,
 | 
			
		||||
            'user_id': str(token.user.id),
 | 
			
		||||
            'asset_id': str(token.asset.id),
 | 
			
		||||
            'token_id': token.id
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        app = '||tinker'
 | 
			
		||||
        rdp_options['remoteapplicationmode:i'] = '1'
 | 
			
		||||
        rdp_options['alternate shell:s'] = app
 | 
			
		||||
        rdp_options['remoteapplicationprogram:s'] = app
 | 
			
		||||
        rdp_options['remoteapplicationname:s'] = app
 | 
			
		||||
 | 
			
		||||
        cmdline_b64 = base64.b64encode(json.dumps(cmdline).encode()).decode()
 | 
			
		||||
        rdp_options['remoteapplicationcmdline:s'] = cmdline_b64
 | 
			
		||||
        return rdp_options
 | 
			
		||||
 | 
			
		||||
    def get_rdp_file_info(self, token: ConnectionToken):
 | 
			
		||||
        rdp_options = {
 | 
			
		||||
            'full address:s': '',
 | 
			
		||||
            'username:s': '',
 | 
			
		||||
            # 'screen mode id:i': '1',
 | 
			
		||||
            # 'desktopwidth:i': '1280',
 | 
			
		||||
            # 'desktopheight:i': '800',
 | 
			
		||||
            'use multimon:i': '0',
 | 
			
		||||
            'session bpp:i': '32',
 | 
			
		||||
            'audiomode:i': '0',
 | 
			
		||||
| 
						 | 
				
			
			@ -60,11 +81,6 @@ class RDPFileClientProtocolURLMixin:
 | 
			
		|||
            'bookmarktype:i': '3',
 | 
			
		||||
            'use redirection server name:i': '0',
 | 
			
		||||
            'smart sizing:i': '1',
 | 
			
		||||
            # 'drivestoredirect:s': '*',
 | 
			
		||||
            # 'domain:s': ''
 | 
			
		||||
            # 'alternate shell:s:': '||MySQLWorkbench',
 | 
			
		||||
            # 'remoteapplicationname:s': 'Firefox',
 | 
			
		||||
            # 'remoteapplicationcmdline:s': '',
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        # 设置磁盘挂载
 | 
			
		||||
| 
						 | 
				
			
			@ -97,16 +113,11 @@ class RDPFileClientProtocolURLMixin:
 | 
			
		|||
        rdp_options['session bpp:i'] = os.getenv('JUMPSERVER_COLOR_DEPTH', '32')
 | 
			
		||||
        rdp_options['audiomode:i'] = self.parse_env_bool('JUMPSERVER_DISABLE_AUDIO', 'false', '2', '0')
 | 
			
		||||
 | 
			
		||||
        if token.asset:
 | 
			
		||||
            name = token.asset.name
 | 
			
		||||
            # remote-app
 | 
			
		||||
            # app = '||jmservisor'
 | 
			
		||||
            # rdp_options['remoteapplicationmode:i'] = '1'
 | 
			
		||||
            # rdp_options['alternate shell:s'] = app
 | 
			
		||||
            # rdp_options['remoteapplicationprogram:s'] = app
 | 
			
		||||
            # rdp_options['remoteapplicationname:s'] = name
 | 
			
		||||
        else:
 | 
			
		||||
            name = '*'
 | 
			
		||||
        # 设置远程应用
 | 
			
		||||
        self.set_applet_info(token, rdp_options)
 | 
			
		||||
 | 
			
		||||
        # 文件名
 | 
			
		||||
        name = token.asset.name
 | 
			
		||||
        prefix_name = f'{token.user.username}-{name}'
 | 
			
		||||
        filename = self.get_connect_filename(prefix_name)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue