def addprofile(): existResult = db_session.query(Rules_Profile).filter_by( name=request.form['name']).first() try: _pattern = None #같은 이름의 룰이 존재한다면 추가 대신 수정한다. if (existResult == None): _pattern = Rules_Profile() else: _pattern = existResult _pattern.group_code = request.form.get('group_code') _pattern.name = request.form['name'] _pattern.description = request.form['description'] _pattern.pattern_ui = request.form['pattern_ui'] _pattern.pattern_query = GetLinkDnaListQueryForProfile( _pattern.pattern_ui) _pattern.pattern_operation = GetProfileOperation( _pattern.pattern_ui, request.form['name'], request.form.get('group_code')) db_session.add(_pattern) db_session.commit() except Exception as e: db_session.rollback() raise InvalidUsage('DB 저장 오류', status_code=501) return ""
def addcrawllist(): # try: # _pattern = Rules_Crawl() # _pattern.uri =request.form['pattern'] # _pattern.depth = int(request.form['depth']) # _pattern.desc = request.form['desc'] # _pattern.register_path = request.form['source'] # Rules_Crawl.insertData(_pattern) # # except Exception as e: # raise InvalidUsage('DB 저장 오류', status_code = 501) try: _pattern = Manual_Crawling_Info() # _pattern.type = request.form['type'] _pattern.depth = request.form['depth'].strip() _pattern.url = request.form['url'].strip() # _pattern.mask = request.form['mask'].strip() _pattern.comment = request.form['comment'] db_session.add(_pattern) db_session.commit() except Exception as e: db_session.rollback() raise InvalidUsage('DB 저장 오류', status_code=501) return ""
def addTypeA(): existResult = db_session.query(Link_Element_TypeA).filter_by(src_type = request.form['type'])\ .filter_by(dst_columns_name=request.form['dst_column']).first() if (existResult != None): raise InvalidUsage('중복된 요소가 존재합니다.', status_code=501) src_dataElement = Data_Element.query.filter_by(data_source=request.form['type']). \ filter_by(column_name=request.form['src_column']).first() try: _pattern = Link_Element_TypeA() _pattern.src_type = request.form['type'] _pattern.src_columns_name = request.form['src_column'] _pattern.dst_columns_name = request.form['dst_column'] _pattern.description = request.form['desc'] _pattern.dst_data_type = src_dataElement.getLinkDataType()[0] _pattern.dst_data_size = src_dataElement.getLinkDataType()[1] _pattern.use_yn = request.form['use_yn'] _pattern.del_yn = 'N' db_session.add(_pattern) db_session.commit() except Exception as e: db_session.rollback() raise InvalidUsage('DB 저장 오류', status_code=501) return ""
def addTypeB(): existResult = db_session.query(Link_Element_TypeB).filter_by( dst_columns_name=request.form['name']).first() if (existResult != None): raise InvalidUsage('중복된 요소가 존재합니다.', status_code=501) try: _pattern = Link_Element_TypeB() _pattern.dst_columns_name = request.form['name'] _pattern.description = request.form['desc'] #operationFuntion 파라메터 생성 opFunction = list() col0 = { "type": request.form.get("src_type0"), "id": request.form.get("src_column0"), "op": request.form.get("src_column_op0") } opFunction.append(col0) #요소 Source가 복수개인 경우 if request.form.get("colCnt") == "2": col1 = { "type": request.form.get("src_type1"), "id": request.form.get("src_column1"), "op": request.form.get("src_column_op1") } opFunction.append(col1) time_range = None if request.form.get("tr_op") is not None: time_range = { "unit": request.form.get("tr_unit"), "value": [request.form.get("tr_value0")], "op": request.form.get("tr_op") } if request.form.get("tr_value1") is not None: time_range["value"].append(request.form.get("tr_value1")) _pattern.setOperateFunction(opFunction, request.form.get("op"), time_range) _pattern.description = request.form['desc'] _pattern.analysis_cycle = request.form['cycle_value'] + request.form[ 'cycle_opt'] _pattern.timespan = request.form[ 'timespan_opt'] if request.form['timespan_opt'] != '' else '' _pattern.dst_data_type = 'single' if request.form[ 'timespan_opt'] == '' else 'list' _pattern.use_yn = request.form['use_yn'] _pattern.del_yn = 'N' db_session.add(_pattern) db_session.commit() except Exception as e: db_session.rollback() raise InvalidUsage('DB 저장 오류', status_code=501) return ""
def addFileData(): # jsondata = request.form.get("dna_config"); # 파일 로드 file = request.files['file'] if file.content_type == 'application/vnd.ms-excel': try: datalist = [] spamreader = csv.reader(file) for index, row in enumerate(spamreader): # if index == 0 and isNumberString(row[0]) != True: # continue # if isNumberString(row[0]) == True: # datalist.append(row[0]) # else: # datalist.append(None) if int(row[1]) not in [8, 16, 24, 32]: raise InvalidUsage('Mask value is not valid', status_code=501) try: _pattern = Rules_White_IP() _pattern.ip = row[0] _pattern.mask = row[1] _pattern.description = row[2] db_session.add(_pattern) db_session.commit() except Exception as e: db_session.rollback() raise InvalidUsage('DB 저장 오류', status_code=501) except Exception as e: raise InvalidUsage('CSV 로딩 실패, ' + e.message, status_code=501) # target link와 데이터 크기 비교 # target_type = request.form.get("target_type") # target_seq = request.form.get("target_seq") # if ValidateTargetSize(datalist.__len__(), target_type, target_seq) == False: # raise InvalidUsage('입력 데이터 사이즈가 다릅니다. ', status_code=501) # try: # _pattern = Rules_White_IP() # _pattern.ip = request.form['pattern'].strip() # _pattern.mask = request.form['mask'].strip() # _pattern.description = request.form['desc'] # db_session.add(_pattern) # db_session.commit() # except Exception as e: # db_session.rollback() # raise InvalidUsage('DB 저장 오류', status_code=501) else: raise InvalidUsage('지원하지 않는 파일 포멧 입니다.', status_code=501) return ""
def addLog(src_ip, important, description): log = StandardLog() log.id = session['id'] log.ip = src_ip log.importance = important log.description = description log.cre_dt = datetime.datetime.now() db_session.add(log) db_session.commit() return
def addIP_Black(): ip = request.form["ip"] desc = request.form["desc"] dupCheckResult = db_session.query(IP_BlackList).filter_by(ip=ip).first() if dupCheckResult is not None: raise InvalidUsage('중복된 IP가 존재 합니다.', status_code=501) blackip = IP_BlackList() blackip.ip = ip blackip.description = desc db_session.add(blackip) db_session.commit() return ""
def addGroup(): try: _pattern = Rules_Profile_Group() _pattern.time_gubun = request.form['time_gubun'] _pattern.time_value = request.form['time_value'] _pattern.name = request.form['name'] _pattern.description = request.form['description'] db_session.add(_pattern) db_session.commit() except Exception as e: db_session.rollback() raise InvalidUsage('DB 저장 오류', status_code=501) return ""
def addwhitelist(): # dupCheckResult = db_session.query(Account).filter_by(id=id).first() # if dupCheckResult is not None: # raise InvalidUsage('중복된 아이디가 있습니다.', status_code=500) try: _pattern = Rules_WhiteList() _pattern.md5 = request.form['pattern'] _pattern.description = request.form['desc'] _pattern.source = request.form['source'] db_session.add(_pattern) db_session.commit() except Exception as e: db_session.rollback() raise InvalidUsage('DB 저장 오류', status_code=501) return ""
def add_dna(): #logUtil.addLog(request.remote_addr,1,'links > list ') jsondata = request.form.get("dna_config") try: dna = DNA_Element() dna.dna_name = request.form.get("dna_name") dna.operate_function = jsondata dna.del_yn = 'N' db_session.add(dna) db_session.commit() except Exception as e: db_session.rollback() raise InvalidUsage('DB 저장 오류', status_code=501) return ""
def addStData(): jsondata = request.form.get("dna_config") #파일 로드 file = request.files['file'] if file.content_type == 'application/vnd.ms-excel': try: datalist = [] spamreader = csv.reader(file) for index, row in enumerate(spamreader): if index == 0 and isNumberString(row[0]) != True: continue if isNumberString(row[0]) == True: datalist.append(row[0]) else: datalist.append(None) except Exception as e: raise InvalidUsage('CSV 로딩 실패', status_code=501) # target link와 데이터 크기 비교 target_type = request.form.get("target_type") target_seq = request.form.get("target_seq") if ValidateTargetSize(datalist.__len__(), target_type, target_seq) == False: raise InvalidUsage('입력 데이터 사이즈가 다릅니다. ', status_code=501) try: dna = DNA_StandardData() dna.name = request.form.get("name") dna.list_data = json.dumps(datalist) dna.list_size = datalist.__len__() dna.mod_dt = datetime.datetime.now() dna.target_link_type = request.form.get("target_type") dna.target_link_seq = request.form.get("target_seq") dna.del_yn = 'N' db_session.add(dna) db_session.commit() except Exception as e: db_session.rollback() raise InvalidUsage('DB 저장 오류', status_code=501) else: raise InvalidUsage('지원하지 않는 파일 포멧 입니다.', status_code=501) return ""
def ChangeAllowIpSetting(): key = "ALLOW_IP" value = request.form.get("value") desc = request.form.get("description") ip_allow = db_session.query(GlobalSetting).filter_by(key=key).first() if ip_allow is not None: ip_allow.value = value ip_allow.description = desc db_session.commit() else: newSetting = GlobalSetting() newSetting.key = key newSetting.value = value newSetting.description = desc db_session.add(newSetting) db_session.commit() return ""
def addSchedule(): try: schedule = DNA_Schedule() schedule.dna_id = request.form['dna_id'] schedule.description = request.form['desc'] schedule.cycle = request.form['cycle_value'] + request.form['cycle_opt'] schedule.start_time = request.form['start_time'] schedule.cre_id = session.get('id') schedule.filter_ip = request.form['filter_ip'] schedule.filter_data_type = request.form['filter_data_type'] db_session.add(schedule) db_session.commit() except Exception as e: db_session.rollback() raise InvalidUsage('DB 저장 오류', status_code=501) return ""
def addAccount(id): dupCheckResult = db_session.query(Account).filter_by(id=id).first() if dupCheckResult is not None: raise InvalidUsage('중복된 아이디가 있습니다.', status_code=500) _account = Account() _account.id = id _account.password = pw = EncryptEncoder.sha256Encrypt( request.form["password"]) _account.cre_dt = datetime.datetime.now() _account.email = request.form["email"] _account.mobile = request.form["mobile"] _account.role_id = request.form["role"] _account.culture = request.form["culture"] _account.comment = request.form["comment"] db_session.add(_account) db_session.commit() return ""
def addwhiteip(): exists = Rules_White_IP.query.filter_by( ip=request.form['pattern'].strip()).first() if exists is not None: raise InvalidUsage('중복 IP가 존재합니다.', status_code=501) try: _pattern = Rules_White_IP() _pattern.ip = request.form['pattern'].strip() _pattern.mask = request.form['mask'].strip() _pattern.description = request.form['desc'] db_session.add(_pattern) db_session.commit() except Exception as e: db_session.rollback() raise InvalidUsage('DB 저장 오류', status_code=501) return ""
def addMalCnc(): # dupCheckResult = db_session.query(Account).filter_by(id=id).first() # if dupCheckResult is not None: # raise InvalidUsage('중복된 아이디가 있습니다.', status_code=500) try: _cnc = malicious_info() #_cnc.rule_type = request.form['type'] _cnc.pattern_uri = request.form['uri'] _cnc.description = request.form['desc'] _cnc.detection_source = request.form['detection_source'] #_cnc.source = request.form['source'] db_session.add(_cnc) db_session.commit() except Exception as e: db_session.rollback() raise InvalidUsage('DB 저장 오류', status_code=501) return ""
def add_Customer_Category(): #exists = Integrated_Customer_Category.query.filter_by(ip=request.form['pattern'].strip()).first() # if exists is not None: # raise InvalidUsage('중복 IP가 존재합니다.', status_code=501) # duplication is allowed. try: _pattern = Integrated_Customer_Category() _pattern.Customer_Category = request.form['Customer_Category'] # _pattern.IP_Address = request.form['IP_Address'].strip() _pattern.Description = request.form['Description'].strip() # _pattern.Password = request.form['Password'].strip() # _pattern.description = request.form['desc'] db_session.add(_pattern) db_session.commit() except Exception as e: db_session.rollback() raise InvalidUsage('DB 저장 오류', status_code=501) return ""
def add_Regular_Expression(): #exists = Regular_Expression_Management.query.filter_by(ip=request.form['pattern'].strip()).first() # if exists is not None: # raise InvalidUsage('중복 IP가 존재합니다.', status_code=501) # duplication is allowed. try: _pattern = Regular_Expression_Management() _pattern.Regular_Exp_Name = request.form['Regular_Exp_Name'] # _pattern.IP_Address = request.form['IP_Address'].strip() _pattern.Regular_Exp = request.form['Regular_Exp'].strip() _pattern.Description = request.form['Description'].strip() # _pattern.Password = request.form['Password'].strip() # _pattern.description = request.form['desc'] db_session.add(_pattern) db_session.commit() except Exception as e: db_session.rollback() raise InvalidUsage('DB 저장 오류', status_code = 501) return ""
def addwhiteip_url(): exists = Rules_White_IP_URL.query.filter_by( ip=request.form['pattern'].strip()).first() # if exists is not None: # raise InvalidUsage('중복 IP가 존재합니다.', status_code=501) # duplication is allowed. try: _pattern = Rules_White_IP_URL() _pattern.type = request.form['type'] _pattern.ip = request.form['pattern'].strip() _pattern.url = request.form['url'].strip() _pattern.mask = request.form['mask'].strip() _pattern.description = request.form['desc'] db_session.add(_pattern) db_session.commit() except Exception as e: db_session.rollback() raise InvalidUsage('DB 저장 오류', status_code=501) return ""
def addwhiteip_url(): #exists = Integrated_IPS_Management.query.filter_by(ip=request.form['pattern'].strip()).first() # if exists is not None: # raise InvalidUsage('중복 IP가 존재합니다.', status_code=501) # duplication is allowed. try: _pattern = Integrated_IPS_Management() _pattern.IPS_Name = request.form['IPS_Name'] _pattern.IP_Address = request.form['IP_Address'].strip() _pattern.Description = request.form['Description'].strip() c = crypto.AESCipher() encryptedValue = c.encrypt(request.form['Password'].strip()) _pattern.Password = encryptedValue # _pattern.description = request.form['desc'] db_session.add(_pattern) db_session.commit() except Exception as e: db_session.rollback() raise InvalidUsage('DB 저장 오류', status_code=501) return ""
def addipcollection(): exists = Rules_IP_Collection.query.filter_by( ip=request.form['pattern'].strip()).first() if exists is not None: raise InvalidUsage('중복 IP가 존재합니다.', status_code=501) try: _pattern = Rules_IP_Collection() _pattern.ip = request.form['pattern'].strip() _pattern.mask = request.form['mask'].strip() _pattern.detection_point = request.form['detection_point'].strip() _pattern.etc = request.form['etc'].strip() _pattern.description = request.form['description'].strip() _pattern.use_yn = request.form['use_yn'].strip() #_pattern.description = request.form['desc'] db_session.add(_pattern) db_session.commit() except Exception as e: db_session.rollback() raise InvalidUsage('DB 저장 오류', status_code=501) return ""
def addblacklist(): # dupCheckResult = db_session.query(Account).filter_by(id=id).first() # if dupCheckResult is not None: # raise InvalidUsage('중복된 아이디가 있습니다.', status_code=500) try: _pattern = Rules_BlackList() _pattern.rule_name = request.form['rule_name'] _pattern.mal_file_name = request.form['mal_file_name'] _pattern.md5 = request.form['pattern'] _pattern.uri = request.form['uri'] _pattern.description = request.form['analysis_device'] #_pattern.size = int(request.form['size']) _pattern.analysis_device = request.form['desc'] _pattern.detection_source = request.form['detection_source'] #_pattern.source = request.form['source'] db_session.add(_pattern) db_session.commit() except Exception as e: db_session.rollback() raise InvalidUsage('DB 저장 오류', status_code=501) return ""
def add_Company_IP_Element(): #exists = Integrated_Company_IP_Management.query.filter_by(ip=request.form['pattern'].strip()).first() # if exists is not None: # raise InvalidUsage('중복 IP가 존재합니다.', status_code=501) # duplication is allowed. try: _pattern = Integrated_Company_IP_Management() _pattern.Head_Quarter = request.form['Head_Quarter'] _pattern.Center_Name = request.form['Center_Name'] _pattern.Team_Name = request.form['Team_Name'] _pattern.IP_Address = request.form['IP_Address'] _pattern.Host_Name = request.form['Host_Name'] _pattern.Device_Description = request.form['Device_Description'] # _pattern.IP_Address = request.form['IP_Address'].strip() _pattern.Description = request.form['Description'].strip() # _pattern.Password = request.form['Password'].strip() # _pattern.description = request.form['desc'] db_session.add(_pattern) db_session.commit() except Exception as e: db_session.rollback() raise InvalidUsage('DB 저장 오류', status_code=501) return ""
def addcrawllistBatch(): # try: # _pattern = Rules_Crawl() # _pattern.uri =request.form['pattern'] # _pattern.depth = int(request.form['depth']) # _pattern.desc = request.form['desc'] # _pattern.register_path = request.form['source'] # Rules_Crawl.insertData(_pattern) # # except Exception as e: # raise InvalidUsage('DB 저장 오류', status_code = 501) file = request.files['file'] timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") if file.filename.split(".")[1] == 'csv': try: datalist = [] spamreader = csv.reader(file) next(spamreader) for index, row in enumerate(spamreader): # if str(row[0]) not in ["Portal", "Video", "AntiVirus", "SNS", "Network", "Server", "Etc"]: # raise InvalidUsage('Type value is not valid', status_code=501) # # if int(row[2]) not in [8, 16, 24, 32]: # raise InvalidUsage('Mask value is not valid', status_code=501) try: _pattern = Manual_Crawling_Info() _pattern.url = str(row[0]) _pattern.depth = int(row[1]) _pattern.comment = str(row[2]) _pattern.register_from = str(row[3]) _pattern.register_date = timestamp # _pattern.description = row[4] db_session.add(_pattern) db_session.commit() except Exception as e: db_session.rollback() raise InvalidUsage('DB 저장 오류' + index + " line ", status_code=501) except Exception as e: raise InvalidUsage('CSV 로딩 실패, ' + e.message, status_code=501) else: raise InvalidUsage('지원하지 않는 파일 포멧 입니다.', status_code=501) # try: # _pattern = Manual_Crawling_Info() # # _pattern.type = request.form['type'] # # _pattern.depth = request.form['depth'].strip() # _pattern.url = request.form['url'].strip() # # _pattern.mask = request.form['mask'].strip() # _pattern.comment = request.form['comment'] # db_session.add(_pattern) # db_session.commit() # except Exception as e: # db_session.rollback() # raise InvalidUsage('DB 저장 오류', status_code = 501) return ""
def addIpCollectionFileData(): # jsondata = request.form.get("dna_config"); # 파일 로드 file = request.files['file'] if file.filename.split(".")[1] == 'csv': try: datalist = [] spamreader = csv.reader(file) for index, row in enumerate(spamreader): # if int(row[1]) not in [8, 16, 24, 32]: # raise InvalidUsage('Mask value is not valid', status_code=501) try: _pattern = Rules_IP_Collection() _pattern.ip = row[0] _pattern.mask = row[1] _pattern.etc = row[2] _pattern.description = row[3] _pattern.use_yn = row[4] #_pattern.description = row[3] db_session.add(_pattern) db_session.commit() except Exception as e: db_session.rollback() raise InvalidUsage('DB 저장 오류 ' + index + " line ", status_code=501) except Exception as e: raise InvalidUsage('CSV 로딩 실패, ' + e.message, status_code=501) elif file.filename.split(".")[1] == 'xlsx': try: wb = openpyxl.load_workbook(file) ws = wb.active for row in ws.rows: # if int(row[1].value) not in [8, 16, 24, 32]: # raise InvalidUsage('Mask value is not valid', status_code=501) try: _pattern = Rules_IP_Collection() _pattern.ip = row[0].value _pattern.mask = row[1].value _pattern.etc = row[2].value _pattern.description = row[3].value _pattern.use_yn = row[4] db_session.add(_pattern) db_session.commit() except Exception as e: db_session.rollback() raise InvalidUsage('DB 저장 오류 ' + row[0].row + " line ", status_code=501) except Exception as e: raise InvalidUsage('xlsx 로딩 실패, ' + e.message, status_code=501) else: raise InvalidUsage('지원하지 않는 파일 포멧 입니다.', status_code=501) return ""
def addfilesnalysislist(): # dupCheckResult = db_session.query(Account).filter_by(id=id).first() # if dupCheckResult is not None: # raise InvalidUsage('중복된 아이디가 있습니다.', status_code=500) try: if request.files['files'] is not None: Config = UploadConfiguration uset = UploadSet('files', ALL) #uset._config = Config('/usr/gsp/web_uploads') uploadpath = app.config['UPLOAD_FOLDER'] subpath = datetime.datetime.now().strftime('%Y%m%d') combinepath = os.path.join(uploadpath, app.config['UPLOAD_CRAWLING_FOLDER'], subpath) uset._config = Config(combinepath) #DB 데이터 입력 fileAnalysis = Rules_FileAnalysis() fileAnalysis.realfilename = uset.save(request.files['files']) fileAnalysis.orgfilename = request.files['files'].filename fileAnalysis.subpath = subpath fileAnalysis.description = request.form.get('desc') fileAnalysis.cre_id = session['id'] db_session.add(fileAnalysis) db_session.commit() #elastic search 데이터 입력 es = Elasticsearch([{ 'host': app.config['ELASTICSEARCH_URI'], 'port': app.config['ELASTICSEARCH_PORT'] }]) doc = { '@timestamp': datetime.datetime.utcnow().isoformat(), 'fileExt': os.path.splitext(fileAnalysis.orgfilename)[1], 'nfs_path': ".\\{0}\\{1}\\{2}".format(app.config['UPLOAD_CRAWLING_FOLDER'], subpath, fileAnalysis.realfilename, fileAnalysis.realfilename), 'data_type': "crawlings", 'filePath': os.path.join(combinepath, fileAnalysis.realfilename), 'fileName': fileAnalysis.realfilename, 'origianl_fileName': fileAnalysis.orgfilename, 'register_path': "001", 'status': 0 } _index = 'gsp-{0}'.format( datetime.datetime.now().strftime("%Y.%m.%d")) es.index(index=_index, doc_type="url_crawleds", body=doc) return "" except Exception as e: db_session.rollback() raise InvalidUsage('DB 저장 오류', status_code=501) return ""
def addCustomer_CategoryFileData(): # jsondata = request.form.get("dna_config"); # 파일 로드 file = request.files['file'] if file.filename.split(".")[1] == 'csv': try: datalist = [] spamreader = csv.reader(file) next(spamreader) for index, row in enumerate(spamreader): # if str(row[0]) not in ["Portal", "Video", "AntiVirus", "SNS", "Network", "Server", "Etc"]: # raise InvalidUsage('Type value is not valid', status_code=501) # # if int(row[2]) not in [8, 16, 24, 32]: # raise InvalidUsage('Mask value is not valid', status_code=501) try: _pattern = Integrated_Customer_Category() _pattern.Customer_Category = row[0] _pattern.Description = row[1] # _pattern.Description = row[2] # _pattern.Password = row[3] # _pattern.description = row[4] db_session.add(_pattern) db_session.commit() except Exception as e: db_session.rollback() raise InvalidUsage('DB 저장 오류' + index + " line ", status_code=501) except Exception as e: raise InvalidUsage('CSV 로딩 실패, ' + e.message, status_code=501) elif file.filename.split(".")[1] == 'xlsx': try: wb = openpyxl.load_workbook(file) ws = wb.active for index, row in enumerate(ws.iter_rows(min_row=2, max_row=ws.max_row), start=2): # if row[0].value not in ["Portal", "Video", "AntiVirus", "SNS", "Network", "Server", "Etc"]: # raise InvalidUsage('Type value is not valid', status_code=501) # # if int(row[2].value) not in [8, 16, 24, 32]: # raise InvalidUsage('Mask value is not valid', status_code=501) try: _pattern = Integrated_Customer_Category() _pattern.Customer_Category = row[0].value _pattern.Description = row[1].value # _pattern.Description = row[2].value # _pattern.Password = row[3].value # _pattern.description = row[4].value db_session.add(_pattern) db_session.commit() except Exception as e: db_session.rollback() raise InvalidUsage('DB 저장 오류' + row[0].row + " line ", status_code=501) except Exception as e: raise InvalidUsage('xlsx 로딩 실패, ' + e.message, status_code=501) else: raise InvalidUsage('지원하지 않는 파일 포멧 입니다.', status_code=501) return json.dumps({'success': True}), 200, { 'ContentType': 'application/json' }