def destroy(self, request, pk=None, **kwargs): try: operation = request.query_params.get('operation', None) sessionid = int(request.query_params.get('sessionid', None)) filepath = request.query_params.get('filepath', None) dirpath = request.query_params.get('dirpath', None) context = FileSession.destory(sessionid=sessionid, filepath=filepath, dirpath=dirpath, operation=operation) except Exception as E: logger.error(E) context = data_return(500, CODE_MSG.get(500), {}) return Response(context)
def update(self, request, pk=None, **kwargs): try: sessionid = int(request.data.get('sessionid', None)) filepath = request.data.get('filepath', None) filedata = request.data.get('filedata', None) context = FileSession.update(sessionid=sessionid, filepath=filepath, filedata=filedata) return Response(context) except Exception as E: logger.error(E) context = data_return(500, CODE_MSG.get(500), {}) return Response(context)
def create(self, request, **kwargs): try: operation = request.data.get('operation', None) sessionid = int(request.data.get('sessionid', None)) dirpath = request.data.get('dirpath', None) filename = request.data.get('filename', None) context = FileSession.create(sessionid=sessionid, filename=filename, dirpath=dirpath, operation=operation) return Response(context) except Exception as E: logger.error(E) context = data_return(500, CODE_MSG.get(500), {}) return Response(context)
def list(self, request, **kwargs): """查询数据库中的信息""" try: operation = request.query_params.get('operation', None) sessionid = int(request.query_params.get('sessionid', None)) filepath = request.query_params.get('filepath', None) dirpath = request.query_params.get('dirpath', None) arg = request.query_params.get('arg', None) context = FileSession.list(sessionid=sessionid, filepath=filepath, dirpath=dirpath, operation=operation, arg=arg) except Exception as E: logger.error(E) context = data_return(500, CODE_MSG.get(500), {}) return Response(context)
def list(filename=None, action=None): if filename is None: # 列出所有文件 result = FileMsf.list_msf_files() for one in result: one['format_size'] = FileSession.get_size_in_nice_string(one.get('size')) def sort_files(a, b): if a['mtime'] < b['mtime']: return 1 if a['mtime'] > b['mtime']: return -1 return 0 # 根据时间排序 result_sorted = sorted(result, key=functools.cmp_to_key(sort_files)) context = data_return(200, CODE_MSG.get(200), result_sorted) return context else: # 下载文件 binary_data = FileMsf.read_msf_file(filename) if binary_data is None: context = data_return(303, FileMsf_MSG.get(303), {}) return context if action == "view": b64data = base64.b64encode(binary_data) ext = os.path.splitext(filename)[-1] if ext in ['.jpeg', '.png', '.jpg']: context = data_return(200, CODE_MSG.get(200), {"type": "img", "data": b64data}) return context else: context = data_return(200, CODE_MSG.get(200), {"type": "txt", "data": b64data}) return context response = HttpResponse(binary_data) response['Content-Type'] = 'application/octet-stream' response['Code'] = 200 response['Message'] = parse.quote(FileMsf_MSG.get(203)) # 中文特殊处理 urlpart = parse.quote(os.path.splitext(filename)[0], 'utf-8') leftpart = os.path.splitext(filename)[-1] response['Content-Disposition'] = f"{urlpart}{leftpart}" return response
def _deal_dynamic_option(one_module_config=None): """处理handler及凭证等动态变化参数,返回处理后参数列表""" options = one_module_config.get('OPTIONS') for option in options: # handler处理 if option.get('name') == HANDLER_OPTION.get("name"): option['enum_list'] = Handler.list_handler_config() if len(option['enum_list']) == 1: # 只有一个监听 option['default'] = option['enum_list'][0].get("value") # 凭证处理 elif option.get('name') == CREDENTIAL_OPTION.get("name"): credentials = Credential.list_credential() tmp_enum_list = [] try: if option.get('extra_data') is None or option.get( 'extra_data').get('password_type') is None: pass else: type_list = option.get('extra_data').get( 'password_type') for credential in credentials: if credential.get('password_type') in type_list: name = "用户名:{} | 密码:{} | 标签:{} | 主机:{}".format( credential.get('username'), credential.get('password'), credential.get('tag'), credential.get('host_ipaddress')) import json value = json.dumps(credential) tmp_enum_list.append({ 'name': name, 'value': value }) option['enum_list'] = tmp_enum_list except Exception as E: logger.warning(E) # 文件处理 elif option.get('name') == FILE_OPTION.get("name"): if option.get('extra_data') is None or option.get( 'extra_data').get('file_extension') is None: file_extension_list = None else: file_extension_list = option.get('extra_data').get( 'file_extension') files = FileMsf.list_msf_files() tmp_enum_list = [] for file in files: import json # { # "filename": "test", # "filesize": 0, # "mtime": 1552273961 # }, name = file.get("name") size = FileSession.get_size_in_nice_string( file.get('size')) mtime = file.get("mtime") style_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(mtime)) show = False # 是否满足文件后缀要求 if isinstance(file_extension_list, list): for ext in file_extension_list: if name.lower().endswith(ext.lower()): show = True else: show = True if show: name = "文件: {} 大小: {} 修改时间: {}".format( name, size, style_time) value = json.dumps(file) tmp_enum_list.append({'name': name, 'value': value}) option['enum_list'] = tmp_enum_list return one_module_config