示例#1
0
def is_query_node_all_assets(request):
    request = request
    query_all_arg = request.query_params.get('all', 'true')
    show_current_asset_arg = request.query_params.get('show_current_asset')
    if show_current_asset_arg is not None:
        return not is_true(show_current_asset_arg)
    return is_true(query_all_arg)
示例#2
0
    def get_queryset(self):
        user = self.request.user
        has_read = self.request.query_params.get('has_read')

        if has_read is None:
            msgs = SiteMessageUtil.get_user_all_msgs(user.id)
        else:
            msgs = SiteMessageUtil.filter_user_msgs(user.id,
                                                    has_read=is_true(has_read))
        return msgs
示例#3
0
def get_redis_client(db=0):
    params = {
        'host': CONFIG.REDIS_HOST,
        'port': CONFIG.REDIS_PORT,
        'password': CONFIG.REDIS_PASSWORD,
        'db': db,
        "ssl": is_true(CONFIG.REDIS_USE_SSL),
        'ssl_cert_reqs': getattr(settings, 'REDIS_SSL_REQUIRED'),
        'ssl_keyfile': getattr(settings, 'REDIS_SSL_KEYFILE'),
        'ssl_certfile': getattr(settings, 'REDIS_SSL_CERTFILE'),
        'ssl_ca_certs': getattr(settings, 'REDIS_SSL_CA_CERTS'),
    }
    return Redis(**params)
示例#4
0
def rebuild_user_tree_if_need(request, user):
    """
    升级授权树策略后,用户的数据可能还未初始化,为防止用户显示没有数据
    先检查 MappingNode 如果没有数据,同步创建用户授权树
    """
    if is_true(request.query_params.get('rebuild_tree')) or \
            not UserGrantedMappingNode.objects.filter(user=user).exists():
        try:
            rebuild_user_mapping_nodes_with_lock(user)
        except lock.SomeoneIsDoingThis:
            # 您的数据正在初始化,请稍等
            raise lock.SomeoneIsDoingThis(
                detail=_('Please wait while your data is being initialized'))
示例#5
0
    def get_rdp_file_content(self, serializer):
        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',
            'disable wallpaper:i': '0',
            'disable full window drag:i': '0',
            'disable menu anims:i': '0',
            'disable themes:i': '0',
            'alternate shell:s': '',
            'shell working directory:s': '',
            'authentication level:i': '2',
            'connect to console:i': '0',
            'disable cursor setting:i': '0',
            'allow font smoothing:i': '1',
            'allow desktop composition:i': '1',
            'redirectprinters:i': '0',
            'prompt for credentials on client:i': '0',
            'autoreconnection enabled:i': '1',
            'bookmarktype:i': '3',
            'use redirection server name:i': '0',
            'smart sizing:i': '0',
            #'drivestoredirect:s': '*',
            # 'domain:s': ''
            # 'alternate shell:s:': '||MySQLWorkbench',
            # 'remoteapplicationname:s': 'Firefox',
            # 'remoteapplicationcmdline:s': '',
        }

        asset, application, system_user, user = self.get_request_resource(
            serializer)
        height = self.request.query_params.get('height')
        width = self.request.query_params.get('width')
        full_screen = is_true(self.request.query_params.get('full_screen'))
        drives_redirect = is_true(
            self.request.query_params.get('drives_redirect'))
        token = self.create_token(user, asset, application, system_user)

        if drives_redirect:
            options['drivestoredirect:s'] = '*'
        options['screen mode id:i'] = '2' if full_screen else '1'
        address = settings.TERMINAL_RDP_ADDR
        if not address or address == 'localhost:3389':
            address = self.request.get_host().split(':')[0] + ':3389'
        options['full address:s'] = address
        options['username:s'] = '{}|{}'.format(user.username, token)
        if system_user.ad_domain:
            options['domain:s'] = system_user.ad_domain
        if width and height:
            options['desktopwidth:i'] = width
            options['desktopheight:i'] = height
        else:
            options['smart sizing:i'] = '1'
        content = ''
        for k, v in options.items():
            content += f'{k}:{v}\n'
        if asset:
            name = asset.hostname
        elif application:
            name = application.name
        else:
            name = '*'
        return name, content
示例#6
0
 def get(self, request: Request, *args, **kwargs):
     force = is_true(request.query_params.get('rebuild_tree'))
     controller = UserGrantedTreeRefreshController(self.user)
     controller.refresh_if_need(force)
     return super().get(request, *args, **kwargs)
    def get_rdp_file_content(self, serializer):
        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',
            'disable wallpaper:i': '0',
            'disable full window drag:i': '0',
            'disable menu anims:i': '0',
            'disable themes:i': '0',
            'alternate shell:s': '',
            'shell working directory:s': '',
            'authentication level:i': '2',
            'connect to console:i': '0',
            'disable cursor setting:i': '0',
            'allow font smoothing:i': '1',
            'allow desktop composition:i': '1',
            'redirectprinters:i': '0',
            'prompt for credentials on client:i': '0',
            'autoreconnection enabled:i': '1',
            'bookmarktype:i': '3',
            'use redirection server name:i': '0',
            'smart sizing:i': '0',
            #'drivestoredirect:s': '*',
            # 'domain:s': ''
            # 'alternate shell:s:': '||MySQLWorkbench',
            # 'remoteapplicationname:s': 'Firefox',
            # 'remoteapplicationcmdline:s': '',
        }

        asset, application, system_user, user = self.get_request_resource(serializer)
        height = self.request.query_params.get('height')
        width = self.request.query_params.get('width')
        full_screen = is_true(self.request.query_params.get('full_screen'))
        drives_redirect = is_true(self.request.query_params.get('drives_redirect'))
        token, secret = self.create_token(user, asset, application, system_user)

        # 设置磁盘挂载
        if drives_redirect:
            actions = 0
            if asset:
                actions = get_asset_actions(user, asset, system_user)
            elif application:
                actions = get_application_actions(user, application, system_user)

            if actions & Action.UPDOWNLOAD == Action.UPDOWNLOAD:
                options['drivestoredirect:s'] = '*'

        # 全屏
        options['screen mode id:i'] = '2' if full_screen else '1'

        # RDP Server 地址
        address = settings.TERMINAL_RDP_ADDR
        if not address or address == 'localhost:3389':
            address = self.request.get_host().split(':')[0] + ':3389'
        options['full address:s'] = address
        # 用户名
        options['username:s'] = '{}|{}'.format(user.username, token)
        if system_user.ad_domain:
            options['domain:s'] = system_user.ad_domain
        # 宽高
        if width and height:
            options['desktopwidth:i'] = width
            options['desktopheight:i'] = height
        else:
            options['smart sizing:i'] = '1'

        options['session bpp:i'] = os.getenv('JUMPSERVER_COLOR_DEPTH', '32')
        options['audiomode:i'] = self.parse_env_bool('JUMPSERVER_DISABLE_AUDIO', 'false', '2', '0')

        if asset:
            name = asset.hostname
        elif application:
            name = application.name
            application.get_rdp_remote_app_setting()

            app = f'||jmservisor'
            options['remoteapplicationmode:i'] = '1'
            options['alternate shell:s'] = app
            options['remoteapplicationprogram:s'] = app
            options['remoteapplicationname:s'] = name
            options['remoteapplicationcmdline:s'] = '- ' + self.get_encrypt_cmdline(application)
        else:
            name = '*'

        content = ''
        for k, v in options.items():
            content += f'{k}:{v}\n'
        return name, content
 def parse_env_bool(env_key, env_default, true_value, false_value):
     return true_value if is_true(os.getenv(env_key, env_default)) else false_value