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)
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
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)
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'))
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
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