def test_render_response_as_xml(self): response = self.fetch('/controller/render-to-extension.xml') self.assertTrue('Content-Type' in response.headers) self.assertEqual(response.headers['Content-Type'], 'text/xml; charset=UTF-8') self.assertEqual(response.code, 200) parsed_response = simplexml.loads(response.body) self.assertEqual(parsed_response, self.EXPECTED_RESPONSE)
def _get_leaderboard_entries(self): url = '{base}/stats/{appid}/leaderboards/{lbid}/?xml=1&start={start}&end={end}'.format( base=self.URL_BASE, appid=self._appid, lbid=self._lbid, start=self._start, end=self._end) try: r = urllib2.urlopen(url) except Exception: raise xml = r.read() data = simplexml.loads(xml)['response'] self._total_entries = int(data['totalLeaderboardEntries']) tmp = [] for entry in data['entries']: try: # handle single entries if entry['steamid']: pass except TypeError: entry = data['entries']['entry'] tmp.append({ 'rank': int(entry['rank']), 'score': int(entry['score']), 'steamid': entry['steamid'], 'details': entry['details']}) return tmp
def upload(self, file_name, dirname, title, description, channel, privacy=0, metatags=''): video_dados = { 'video': { 'titulo': title, 'descricao': description, 'canal': channel, 'privacidade': privacy, 'metatags': metatags } } headers = { 'Content-Type': "application/x-www-form-urlencoded" } content = self._make_request('POST', '/video.xml', params=simplexml.dumps(video_dados), headers=headers) video_uuid = simplexml.loads(content)['video']['uuid'] file_path = "%s/%s" % (dirname.rstrip('/'), file_name) if not os.path.isfile(file_path): raise ValueError("File does not exist %s" % file_path) file_data = open(file_path).read() try: self.post_multipart(selector='/video/%s/upload' % video_uuid, files=(("video", file_name, file_data),), headers=headers) return True except APIError, e: _logger.info("Error uploading video %s: %s" % (file_name, e)) return False
def _make_request(self, action, total, params=None, version=None): params = params or {} version = version or self.version assert isinstance(action, str) assert isinstance(total, str) assert isinstance(params, dict) default_params = { 'estabelecimento': self.establishment_id, 'acao': action, 'chave': self._generate_auth_key(action, total, version), 'valor_total': total, 'versao': self.version } if self.sandbox: default_params['teste'] = '1' params.update(default_params) response = requests.post(self.endpoint, params=params) response_data = simplexml.loads(response.text\ .encode(response.encoding)) if 'erro' in response_data: raise IPagareError(response_data['erro']) return response_data
def _get_leaderboard_id(self): if self._date is None: date = (datetime.datetime.now() - datetime.timedelta(hours=11)).strftime('%Y%m%d') board_name = date + '_scores' url = '{base}/stats/{appid}/leaderboards/?xml=1'.format( base=self.URL_BASE, appid=self._appid) try: r = urllib2.urlopen(url) except Exception: raise xml = r.read() data = simplexml.loads(xml) for board in data['response']['leaderboard']: if board['name'] == board_name: if board['entries'] < 100: self._date = ( datetime.date.today() - datetime.timedelta(1).strftime( '%Y%m%d')) self._lbid = self._get_leaderboard_id() return board['lbid']
def test_v01_response_format(self): rv = self.app.get('/api/v.0.1/users/', headers={"accept": "application/xml"}) self.assertIsNotNone(simplexml.loads(rv.data)) rv = self.app.get('/api/v.0.1/users/', headers={"accept": "application/json"}) self.assertIsNotNone(json.loads(rv.data))
def load_xml(filepath): """ load PGEMConfig in dict format from xml file. :param filepath: file to load config :return: config dict """ with open(filepath) as f: result = loads(f.read()) return result
def airplanes_import(request: HttpRequest): if request.method == 'POST': body = request.FILES["file"].read() airplanes_dict = simplexml.loads(body)['airplanes'] airplanes = [Airplane(0, a['modelname'], a['builddate']) for a in airplanes_dict] with connect() as connection: repository = Airplanes(connection) repository.import_all(airplanes) return HttpResponse(status=200)
def test_can_loads_list_same_name(): docxml = "<someTag><name>Should be name</name><item><type>Should Be Type item1</type></item><item><type>Should Be Type item2</type></item></someTag>" response = simplexml.loads(docxml) assert response['someTag']['name'] == 'Should be name' assert type(response['someTag']['item']) == list assert response['someTag']['item'][0]['type'] == 'Should Be Type item1'
def test_can_loads(): docxml = "<someTag><name>Should be name</name><itens><item><type>Should Be Type item1</type></item><item><type>Should Be Type item2</type></item></itens></someTag>" response = simplexml.loads(docxml) assert response['someTag']['name'] == 'Should be name' assert type(response['someTag']['itens']) == list assert response['someTag']['itens'][0]['type'] == 'Should Be Type item1'
def airports_import(request: HttpRequest): if request.method == 'POST': Airport.objects.all().delete() body = request.FILES["file"].read() airports_dict = simplexml.loads(body)['airports'] for a in airports_dict: airport = Airport(name=a['name'], code=a['code'], city=a['city']) airport.save() return HttpResponse(status=204)
def airplanes_import(request: HttpRequest): if request.method == 'POST': Airplane.objects.all().delete() body = request.FILES["file"].read() airplanes_dict = simplexml.loads(body)['airplanes'] for a in airplanes_dict: airplane = Airplane(modelname=a['modelname'], builddate=a['builddate']) airplane.save() return HttpResponse(status=204)
def convert_userlist(): with open(os.path.join(CV_HOME, 'ul.xml'), 'r') as f, open(os.path.join(CV_HOME, 'userlist.csv'), 'wb') as w: ulx = simplexml.loads(f.read()) users = [] for eu in ulx['USER_LIST_OUTPUT']['USER_LIST']['USER']: ul = OrderedDict() ul['USER_LOGIN'] = eu['USER_LOGIN'] ul['USER_STATUS'] = eu['USER_STATUS'] ul['CREATION_DATE'] = eu['CREATION_DATE'] ul['LAST_LOGIN_DATE'] = eu['LAST_LOGIN_DATE'] # Contact Info ul['FIRSTNAME'] = eu['CONTACT_INFO']['FIRSTNAME'] ul['LASTNAME'] = eu['CONTACT_INFO']['LASTNAME'] ul['TITLE'] = eu['CONTACT_INFO']['TITLE'] ul['PHONE'] = eu['CONTACT_INFO']['PHONE'] ul['EMAIL'] = eu['CONTACT_INFO']['EMAIL'] ul['COMPANY'] = eu['CONTACT_INFO']['COMPANY'] ul['TIME_ZONE_CODE'] = eu['CONTACT_INFO']['TIME_ZONE_CODE'] ul['ADDRESS1'] = eu['CONTACT_INFO']['ADDRESS1'] ul['ADDRESS2'] = eu['CONTACT_INFO']['ADDRESS2'] ul['CITY'] = eu['CONTACT_INFO']['CITY'] ul['COUNTRY'] = eu['CONTACT_INFO']['COUNTRY'] ul['STATE'] = eu['CONTACT_INFO']['STATE'] ul['ZIP_CODE'] = eu['CONTACT_INFO']['ZIP_CODE'] ul['BUSINESS_UNIT'] = eu['BUSINESS_UNIT'] ul['UI_INTERFACE_STYLE'] = eu['UI_INTERFACE_STYLE'] # Permissions ul['PERMISSIONS_CREATE_OPTION_PROFILES'] = eu['PERMISSIONS']['CREATE_OPTION_PROFILES'] ul['PERMISSIONS_PURGE_INFO'] = eu['PERMISSIONS']['PURGE_INFO'] ul['PERMISSIONS_ADD_ASSETS'] = eu['PERMISSIONS']['ADD_ASSETS'] ul['PERMISSIONS_EDIT_REMEDIATION_POLICY'] = eu['PERMISSIONS']['EDIT_REMEDIATION_POLICY'] ul['PERMISSIONS_EDIT_AUTH_RECORDS'] = eu['PERMISSIONS']['EDIT_AUTH_RECORDS'] # Notifications ul['NOTIFY_LATEST_VULN'] = eu['NOTIFICATIONS']['LATEST_VULN'] ul['NOTIFY_MAP'] = eu['NOTIFICATIONS']['MAP'] ul['NOTIFY_SCAN'] = eu['NOTIFICATIONS']['SCAN'] ul['DAILY_TICKETS'] = eu['NOTIFICATIONS']['DAILY_TICKETS'] users.append(ul) csv_headers = users[0].keys() dw = csv.DictWriter(w, dialect='excel', fieldnames=csv_headers, quoting=csv.QUOTE_ALL, delimiter=',', quotechar='"', strict=True, doublequote=True, lineterminator='\n', escapechar="\\") dw.writeheader() for user in users: dw.writerow(user)
def pilots_import(request: HttpRequest): if request.method == 'POST': Pilot.objects.all().delete() body = request.FILES["file"].read() pilots_dict = simplexml.loads(body)['pilots'] for p in pilots_dict: pilot = Pilot(firstname=p['firstname'], lastname=p['lastname'], starting_date=p['starting_date']) pilot.save() return HttpResponse(status=204)
def pilots_import(request: HttpRequest): if request.method == 'POST': body = request.FILES["file"].read() print(body) pilots_dict = simplexml.loads(body)['pilots'] print(pilots_dict) pilots = [Pilot(0, p['firstname'], p['lastname'], p['starting_date']) for p in pilots_dict] with connect() as connection: repository = Pilots(connection) repository.import_all(pilots) return HttpResponse(status=200)
def import_projects(request): if request.method == 'POST': Project.objects.all().delete() req_body = request.FILES['file'].read() projects_dict = simplexml.loads(req_body)['projects'] for p in projects_dict: project_tosave = Project(name=p['name'], description=p['description']) project_tosave.save() return HttpResponse(status=200) return HttpResponse(status=400)
def import_payments(request): if request.method == 'POST': Employee.objects.all().delete() req_body = request.FILES['file'].read() payments_dict = simplexml.loads(req_body)['payments'] for p in payments_dict: payment_tosave = Payment(method=p['method'], raw_salary=p['raw_salary'], tax_rate=p['tax_rate']) payment_tosave.save() return HttpResponse(status=200) return HttpResponse(status=400)
def one_click_services(eticket, octoken, currency_lang, url_options): oneclick_record = None; dynamic_price = 9999; pricingguid = '' try: ppid = eticket.split(':') multitrans_oneclick_record = {} sql = "select * from MerchantBillConfig where BillConfigID = {}" mbconfig = db_agent.execute_select_one_parameter(sql, ppid[1]) pricepoint_type = mbconfig['Type'] merchantid = mbconfig['MerchantID'] if pricepoint_type == 510: dynamic_price = decimal.Decimal('%d.%d' % (random.randint(3, 19), random.randint(0, 99))) hash_url = f"https://srs.segpay.com/PricingHash/PricingHash.svc/GetDynamicTrans?value={dynamic_price}" resp = requests.get(hash_url) dynamic_hash = fromstring(resp.text).text url = f"{config.urlws}{eticket}&amount={dynamic_price}&dynamictrans={dynamic_hash}&dynamicdesc=QA+TEST&octoken={octoken}" + url_options elif pricepoint_type == 511: pricingguid = db_agent.get_pricingguid(merchantid, pricepoint_type)[0] url = f"{config.urlws}{eticket}&DynamicPricingID={pricingguid['PricingGuid']}&octoken={octoken}" + url_options else: url = f"{config.urlws}{eticket}&octoken={octoken}" + url_options print(url) resp = requests.get(url) xml_return_string = simplexml.loads(resp.content) transid = int(xml_return_string['TransReturn']['TransID']) # oneclick_record = db_agent.multitrans_full_record(transid, '', '') # full_record = oneclick_record[0] cnt = 0 while oneclick_record == None and cnt < 15: cnt += 1 time.sleep(1) sql = "select * from multitrans where TransID = '{}'" oneclick_record = db_agent.execute_select_one_parameter(sql, transid) if pricepoint_type == 511: oneclick_record['511'] = pricingguid elif pricepoint_type == 510: oneclick_record['510'] = dynamic_price print(f"OneClick Web Services => Eticket: {eticket} | Processor: {oneclick_record['Processor']} " f"| DMC: {currency_lang[0]} | Lnaguage: {currency_lang[1]} | Type: {pricepoint_type}") print(f"PurchaseID: {oneclick_record['PurchaseID']} | TransID: {oneclick_record['TransID']} | TransGuid: {oneclick_record['TRANSGUID']}") return oneclick_record except Exception as ex: traceback.print_exc() print(f"{Exception} Eticket: {eticket} Module => one_click_services ") pass
def handle(self, *args, **options): for casa in CasaGovernamental.objects.all(): document = PyQuery(url="http://www.excelencias.org.br/@casa.php?pr=1&casa=%s" % casa.id_referencia) combo = document.find('select#escnome.casa') print("[Import Politico] - casa %s" % (casa.nome)) options = combo.children() for i in xrange(1, len(options)): option = options.eq(i)[0] id_transparencia = int(option.attrib.get('value')) if id_transparencia > 0: try: politico = Politico.objects.get(id_transparencia=id_transparencia) print("\t[Import Politico] - %s de %s, Politico ja existe %s, %s" % (i, len(options), politico.nome, politico.slug)) except Politico.DoesNotExist: try: url = 'http://www.excelencias.org.br/candidato/@candidato_direta.php?id=%s' % id_transparencia data = urllib.urlopen(url) data_content = data.read() data_content = data_content.replace('&', '&') politico_data = simplexml.loads(data_content) politico_data_principal = politico_data.get('transparencia').get('parlamentar').get('principal') cpf = politico_data_principal.get('cpf', '').replace('.', '').replace('-', '') politico = Politico.objects.create( nome = politico_data_principal.get('nomeBatismo'), apelido = politico_data_principal.get('apelido'), slug = generate_slug(politico_data_principal.get('apelido')), cpf = cpf or None, partido = Partido.objects.get(sigla=politico_data_principal.get('partido', '').replace(' ', '')), uf = UF.objects.get(sigla=politico_data_principal.get('uf')), email = politico_data_principal.get('email', ''), imagem = politico_data_principal.get('imagem'), biografia = politico_data_principal.get('cargosRelevantes', ''), casa_governamental = casa, id_transparencia = id_transparencia ) print("\t[Import Politico] - %s de %s, Politico criado %s, %s" % (i, len(options), politico.nome, politico.slug)) except Exception, e: print "\t=== Oops, ocorreu um erro com a url %s: \n\t %s" % (url, e)
def import_employees(request): if request.method == 'POST': Employee.objects.all().delete() req_body = request.FILES['file'].read() employees_dict = simplexml.loads(req_body)['employees'] for e in employees_dict: e_is_intern = 1 if '1' in e['is_intern'] else 0 employee_tosave = Employee(full_name=e['full_name'], characteristics=e['characteristics'], is_intern=e_is_intern) employee_tosave.save() return HttpResponse(status=200) return HttpResponse(status=400)
def import_projects(request): if request.method == 'POST': req_body = request.FILES['file'].read() projects_dict = simplexml.loads(req_body)['projects'] projects = [ Project(0, p['name'], p['description']) for p in projects_dict ] with connect() as conn: dbprojects = Projects(conn) dbprojects.importall(projects) return HttpResponse(status=200) return HttpResponse(status=400)
def import_payments(request): if request.method == 'POST': req_body = request.FILES['file'].read() payments_dict = simplexml.loads(req_body)['payments'] payments = [ Payment(0, p['method'], p['raw_salary'], p['tax_rate']) for p in payments_dict ] with connect() as conn: dbpayments = Payments(conn) dbpayments.importall(payments) return HttpResponse(status=200) return HttpResponse(status=400)
def test_render_to_xml_should_return_xml_response(self): response = self.fetch('/controller/render-xml/') self.assertTrue('Content-Type' in response.headers) self.assertEqual(response.headers['Content-Type'], 'text/xml; charset=UTF-8') self.assertEqual(response.code, 200) expected = { 'root': { 'a': '1', 'b': '2', } } parsed_response = simplexml.loads(response.body) self.assertEqual(parsed_response, expected)
def test_can_loads_attributes(): docxml = u'<?xml version="1.0" ?><tags><tag attr="should be tag value"/><tag attr="value2">value3</tag></tags>' response = simplexml.loads(docxml) assert type(response['tags']) == list assert type(response['tags'][0]) == dict assert response['tags'][0]['tag']['_attrs']['attr'] == 'should be tag value' assert response['tags'][1]['tag']['_attrs']['attr'] == 'value2' assert response['tags'][1]['tag']['_value'] == 'value3' final_docxml = simplexml.dumps(response) assert docxml == final_docxml
def import_employees(request): if request.method == 'POST': req_body = request.FILES['file'].read() employees_dict = simplexml.loads(req_body)['employees'] employees = [] for e in employees_dict: e_is_intern = 1 if '1' in e['is_intern'] else 0 employees.append(Employee( 0, e['full_name'], e['characteristics'], e_is_intern )) with connect() as conn: dbemployees = Employees(conn) dbemployees.importall(employees) return HttpResponse(status=200) return HttpResponse(status=400)
def post(self, tiporegla_id, regla_id): if request.content_type == 'application/json': json_data = request.get_json(force=True) json_str = json.dumps(json_data) data = app.get_resul_regla(json_str, tiporegla_id, regla_id) return data else: if request.content_type == 'application/xml': xml_str = request.get_data() xml_data = simplexml.loads(xml_str) data = app.get_resul_regla(str(simplexml.dumps(xml_data)), tiporegla_id, regla_id) return data else: return {'status': 'error', 'message': 'formato no implementado'}
def test_decode(self): xml = '''<root> <child_a>text_a</child_a> <child_b>text_b1</child_b> <child_b>text_b2</child_b> <child_c id="id_c1">text_c1</child_c> <child_c>text_c2</child_c> <child_c> <child_d id="id_d1">text_d1</child_d> <child_d>text_d2</child_d> </child_c> <child_e id="id_e"> text_e <child_f class="class_f" id="id_f"/> <child_g><![CDATA[<ha>haha</ha>]]></child_g> </child_e> </root>''' data = simplexml.loads(xml)
def _make_request(self): params = self._get_parameters() url = '%s?%s' % (self._endpoint, urllib.urlencode(params)) logger.debug('estimating freight on correios') logger.debug(params) try: data = urllib2.urlopen(url, timeout=5).read() except: raise InterfaceError('correios unavaible') """ Exemplo do retorno: <cServico> <Codigo>40045</Codigo> <Valor>12,10</Valor> <PrazoEntrega>1</PrazoEntrega> <ValorMaoPropria>0,00</ValorMaoPropria> <ValorAvisoRecebimento>0,00</ValorAvisoRecebimento> <ValorValorDeclarado>1,00</ValorValorDeclarado> <EntregaDomiciliar>S</EntregaDomiciliar> <EntregaSabado>S</EntregaSabado> <Erro>0</Erro> <MsgErro></MsgErro> </cServico> """ logger.debug('response from correios') logger.debug(data) response = simplexml.loads(data) result = response['Servicos']['cServico'] erro = int(result.get('Erro')) if erro != 0: raise InterfaceError(result.get('MsgErro')) else: return result.get('Valor')
def _load_xml(self): if hasattr(self, "xml_cache"): return self.display_index = 0 if not os.path.exists("/tmp/33c3_schedule_cache.xml"): request = urlrequest.urlopen("https://fahrplan.events.ccc.de/congress/2016/Fahrplan/schedule.xml") data = request.read() with open("/tmp/33c3_schedule_cache.xml", "wb") as fp: fp.write(data) else: with open("/tmp/33c3_schedule_cache.xml", "rb") as fp: data = fp.read() data = data.decode("utf-8") xml = simplexml.loads(data) xml_cache = [] for day in range(0, 4): for room in range(0, 4): tmp = xml["schedule"]["day"][day]["room"][room]["event"] for n in tmp: date, title, place = dateutil.parser.parse(n["date"]).replace(tzinfo=None), n["title"], n["room"] xml_cache.append({"date": date, "title": title, "place": place, "start": n["start"]}) self.xml_cache = sorted(xml_cache, key=lambda x: x["date"].timestamp())
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:63.0) Gecko/20100101 Firefox/63.0", "Accept-Language": "en-US,en;q=0.5", }) s.verify = False # Grab login page s.get("https://%s/login.html" % (host, )) # Login data = collections.OrderedDict([("user", user), ("password", pswd)]) r = s.post( "https://%s/data/login" % (host, ), headers={"Referer": "https://%s/login.html" % (host, )}, data=data, ) xml = simplexml.loads(r.text) # Verify we correctly authenticated assert int(xml["root"]["authResult"]) == 0 # Fetch the main menu r = s.get( "https://%s/%s" % (host, xml["root"]["forwardUrl"]), headers={"Referer": "https://%s/login.html" % (host, )}, ) # Build viewer filename host_ipv6 = 0 viewer_filename = "viewer.jnlp(%s@%s@%i000)" % (host, host_ipv6, int(time.time()))
def aprove_decline(transid): aprove_or_decline = None result_type = 0 cardinal_result = {} in_or_aout_scope = 0 try: if config.test_data['visa_secure'] in [1, 3, 4, 5]: sql = f"select dbo.DecryptString(lookupresponsedata) as lookuprresponse,dbo.DecryptString(AuthResponseData) as authresponse " \ f" from Cardinal3dsRequests where transguid = (select Transguid from multitrans where transid = {transid})" live_record_3ds = db_agent.execute_select_with_no_params(sql) if live_record_3ds: xml_return_string_lookuprresponse = simplexml.loads( live_record_3ds['lookuprresponse']) response = xml_return_string_lookuprresponse['CardinalMPI'] if not live_record_3ds['authresponse'] == '': json_authresponse = json.loads( live_record_3ds['authresponse']) auth_response = { **json_authresponse['Payload'], **json_authresponse['Payload']['Payment']['ExtendedData'] } if 'ECIFlag' in auth_response: response['EciFlag'] = auth_response['ECIFlag'] if 'CAVV' in auth_response: response['Cavv'] = auth_response['CAVV'] if 'PAResStatus' in auth_response: response['PAResStatus'] = auth_response['PAResStatus'] if 'SignatureVerification' in auth_response: response['SignatureVerification'] = auth_response[ 'SignatureVerification'] if config.test_data['visa_secure'] == 4: in_or_aout_scope = 1171 if response['Cavv'] and response[ 'EciFlag'] == '05' and response[ 'Enrolled'] == 'Y' and response[ 'PAResStatus'] == 'Y' and response[ 'SignatureVerification'] == 'Y': # 1151 Successful Authentication result_type = 1151 elif response['Cavv'] and response[ 'EciFlag'] == '06' and response[ 'Enrolled'] == 'Y' and response[ 'PAResStatus'] == 'A' and response[ 'SignatureVerification'] == 'Y': # 1152 Authentication Attempted result_type = 1152 else: result_type = 999 elif config.test_data['visa_secure'] in [1, 3, 5]: in_or_aout_scope = 1172 if not 'Cavv' in response and response[ 'EciFlag'] == '07' and not 'PAResStatus' in response: # 1158 Failed Authentication result_type = 1158 elif response['Cavv'] and response[ 'EciFlag'] == '05' and response[ 'Enrolled'] == 'Y' and response[ 'PAResStatus'] in ['Y', 'A'] and response[ 'SignatureVerification'] == 'N': # Signature Verification Failure result_type = 1157 print( colored( f"This Transaction should be declined|PSD2 not Required|", 'white', 'on_grey', attrs=['bold'])) elif not 'Cavv' in response and response[ 'EciFlag'] == '07' and response[ 'Enrolled'] == 'Y' and response[ 'PAResStatus'] == 'N' and response[ 'SignatureVerification'] == 'Y': # Failed Authentication result_type = 1159 print( colored( f"This Transaction should be declined|PSD2 not Required|", 'white', 'on_grey', attrs=['bold'])) elif response['Cavv'] == {} and response[ 'EciFlag'] == '06' and response[ 'Enrolled'] == 'N' and not 'PAResStatus' in response and not 'SignatureVerification' in response: # Non-Enrolled Card/Non-participating bank result_type = 1153 elif response['Cavv'] == {} and response['EciFlag'] == '07' and response['Enrolled'] == 'U' and not 'PAResStatus' == {} and not 'SignatureVerification' == {}: # 1154 Authentication Unavailable result_type = 1154 elif response['Cavv'] == {} and response[ 'EciFlag'] == '07' and response[ 'Enrolled'] == 'Y' and response[ 'PAResStatus'] == 'U' and response[ 'SignatureVerification'] in ['Y', 'N']: # 1155 Authentication Unavailable at Issuer result_type = 1155 elif response['Cavv'] == {} and response[ 'EciFlag'] == '07' and response[ 'Enrolled'] == 'B' and not 'PAResStatus' in response and not 'SignatureVerification' in response: # 1156 Authentication Bypassed result_type = 1156 elif response['Cavv'] == {} and not 'EciFlag' in response and response[ 'Enrolled'] == 'Y' and response[ 'PAResStatus'] == 'Error' and not 'SignatureVerification' in response: # 1158 Authentication Error result_type = 1158 else: aprove_or_decline = False if result_type == 999: msg = "In Scope |PSD2 Required|" aprove_or_decline = False print( colored( f"This Transaction should be declined |{msg}| <----------------", 'red', attrs=['bold'])) else: final_action = db_agent.cardinal_actions( result_type, in_or_aout_scope) if in_or_aout_scope == 1171: msg = "In Scope |PSD2 Required|" else: msg = "Out of Scope |PSD2 NOT Required|" if final_action: if final_action['ResultAction'] == 1181: aprove_or_decline = True print( colored( f"This Transaction should be aproved |{msg}| <---------------- | ResultType: {result_type} | ResultAction: 1181 | ", 'grey', attrs=['bold'])) elif final_action['ResultAction'] == 1182: aprove_or_decline = False print( colored( f"This Transaction should be declined |{msg}| <---------------- | ResultType: {result_type} | ResultAction: 1182 | ", 'red', attrs=['bold'])) elif config.test_data['visa_secure'] == 0: aprove_or_decline = True print( colored( f"This Transaction should be aproved |Prepaid Card| <---------------- | ", 'grey', attrs=['bold'])) config.test_data['aprove_or_decline'] = aprove_or_decline return aprove_or_decline except Exception as ex: traceback.print_exc() print(f"{Exception}") pass
def convert_kb(): with open(os.path.join(CV_HOME, 'qualys_kb.xml'), 'r') as f, open(os.path.join(CV_HOME, 'kb.csv'), 'wb') as w: csv_headers = [ 'QID', 'TYPE', 'SEVERITY_LEVEL', 'TITLE', 'CATEGORY', 'LAST_UPDATE', 'PATCHABLE', 'CVE_ID', 'BUGTRAQ_ID', 'DIAGNOSIS', 'CONSEQUENCE', 'SOLUTION', 'COMPLIANCE_TYPE', 'COMPLIANCE_SECTOION', 'COMPLIANCE_DESCRIPTION', 'CVSS_BASE', 'CVSS_TEMPORAL', 'CVSS_AUTHENTICATION', 'CVSS_ACCESS_VECTOR', 'CVSS_ACCESS_COMPLEXITY', 'CVSS_AUTENTICATION', 'CVSS_CONFIDENTIALITY_IMPACT', 'CVSS_INTEGRITY_IMPACT', 'CVSS_AVAILABILITY_IMPACT', 'CVSS_EXPLOITABILITY', 'CVSS_REMEDIATION_LEVEL', 'CVSS_REPORT_CONFIDENCE', 'COMPLIANCE_TYPE', 'COMPLIANCE_SECTION', 'COMPLIANCE_DESCRIPTION', 'PCI_FLAG' ] dw = csv.DictWriter(w, dialect='excel', fieldnames=csv_headers, quoting=csv.QUOTE_ALL, delimiter=',', quotechar='"', strict=True, doublequote=True, lineterminator='\n', escapechar="\\") dw.writeheader() kbx = simplexml.loads(f.read()) count = 1 vulns = [] kb = {} for ev in kbx['VULNS']['VULN']: kb['QID'] = ev.get('QID') kb['TYPE'] = ev.get('VULN_TYPE') kb['SEVERITY_LEVEL'] = ev.get('SEVERITY_LEVEL') kb['TITLE'] = ev.get('TITLE') kb['CATEGORY'] = ev.get('CATEGORY') kb['LAST_UPDATE'] = ev.get('LAST_UPDATE') if ev.get('BUGTRAQ_ID_LIST'): btlist = [] for bt in ev['BUGTRAQ_ID_LIST']: if isinstance(bt, dict): btlist.append(bt['BUGTRAQ_ID']['ID']) if len(btlist) > 1: kb['BUGTRAQ_ID'] = ','.join(btlist) kb['PATCHABLE'] = ev.get('PATCHABLE') if ev.get('CVE_ID_LIST'): cvelist = [] for cveid in ev['CVE_ID_LIST']['CVE_ID']: if isinstance(cveid, dict): cvelist.append(cveid['ID']) if len(cvelist) > 1: kb['CVE_ID'] = ','.join(cvelist) kb['DIAGNOSIS'] = ev.get('DIAGNOSIS') kb['CONSEQUENCE'] = ev.get('CONSEQUENCE') kb['SOLUTION'] = ev.get('SOLUTION') if ev.get('COMPLIANCE'): kb['COMPLIANCE_TYPE'] = ev['COMPLIANCE']['COMPLIANCE_INFO']['COMPLIANCE_TYPE'] kb['COMPLIANCE_SECTION'] = ev['COMPLIANCE']['COMPLIANCE_INFO']['COMPLIANCE_SECTION'] kb['COMPLIANCE_DESCRIPTION'] = ev['COMPLIANCE']['COMPLIANCE_INFO']['COMPLIANCE_DESCRIPTION'] kb['CVSS_BASE'] = ev.get('CVSS_BASE') kb['CVSS_TEMPORAL'] = ev.get('CVSS_TEMPORAL') kb['CVSS_ACCESS_VECTOR'] = ev.get('CVSS_ACCESS_VECTOR') kb['CVSS_ACCESS_COMPLEXITY'] = ev.get('CVSS_ACCESS_COMPLEXITY') kb['CVSS_AUTHENTICATION'] = ev.get('CVSS_AUTHENTICATION') kb['CVSS_CONFIDENTIALITY_IMPACT'] = ev.get('CVSS_CONFIDENTIALITY_IMPACT') kb['CVSS_INTEGRITY_IMPACT'] = ev.get('CVSS_INTEGRITY_IMPACT') kb['CVSS_AVAILABILITY_IMPACT'] = ev.get('CVSS_EXPLOITABILITY') kb['CVSS_EXPLOITABILITY'] = ev.get('CVSS_EXPLOITABILITY') kb['CVSS_REMEDIATION_LEVEL'] = ev.get('CVSS_REMEDIATION_LEVEL') kb['CVSS_REPORT_CONFIDENCE'] = ev.get('CVSS_REPORT_CONFIDENCE') kb['PCI_FLAG'] = ev.get('PCI_FLAG') dw.writerow(cvtools.sanitize_dict(kb)) count += 1 return
def cardinal3dsrequests(transid): # card live_record = {} psd2_completed_mt = [] card = {} failed = {} sql = '' pid = 0 psd2_failed = [] item = '' try: visa_secure = config.test_data['visa_secure'] base_field = '' live_field = '' sql = f"select dbo.DecryptString(lookupresponsedata) as lookuprresponse,dbo.DecryptString(AuthResponseData) as authresponse " \ f" from Cardinal3dsRequests where transguid = (select Transguid from multitrans where transid = {transid})" if visa_secure == 0: # out of scope options.append_list( f"Card is Prepaid | No 3DS record | Out of Scope") print( colored( f"Card is Prepaid | No 3DS record | Out of Scope => Pass ", 'green')) if visa_secure == 1: # in scope options.append_list( f"Merchant EU | Not Configured for 3DS | Card EU | No record in Cardinal3dsRequests | In Scope | Should be declined" ) print( colored( f"Merchant EU | Not Configured for 3DS | Card EU | No record in Cardinal3dsRequests | In Scope | Should be declined ", 'red')) elif visa_secure in [2, 3]: if config.test_data['cc'] in config.cards_3ds: card = config.cards_3ds[config.test_data['cc']] try: if 'card' in card: del card['card'] del card['cmpi_authenticate response'] except Exception as ex: traceback.print_exc() print(f"Card is not in the dictionary") print(f"{Exception}") pass live_record = db_agent.execute_select_with_no_params(sql) if live_record == None: print(colored(f"No record recieved from Cardinal ", 'red')) print() else: if not live_record['authresponse'] == '': json_authresponse = json.loads( live_record['authresponse']) # auth_response = json_authresponse['Payload']['Payment']['ExtendedData'] auth_response = { **json_authresponse['Payload'], **json_authresponse['Payload']['Payment']['ExtendedData'] } for item in card: try: if item == 'cPAResStatus': base_field = card[item] live_field = auth_response['PAResStatus'] elif item == 'cSignatureVerification': base_field = card[item] live_field = auth_response[ 'SignatureVerification'] elif item == 'cCavv': base_field = 'value' live_field = auth_response['CAVV'] if live_field != '': live_field = 'value' elif item == 'cEciFlag': base_field = card[item] live_field = auth_response['ECIFlag'] elif item == 'cErrorNo': base_field = card[item] live_field = auth_response['ErrorNumber'] elif item == 'cErrorDesc': base_field = card[item] live_field = auth_response[ 'ErrorDescription'] if base_field == '<blank>' or base_field == '': base_field = {} if base_field == '<blank>' or base_field == '': base_field = {} if base_field != live_field: failed[ item] = f"{base_field}split{live_field} | SCA Required |" except Exception as ex: traceback.print_exc() failed[ item] = f"{base_field} split | Expected_Field is missing from Auth_response | SCA Required" # print(f"Expected_Field: | {item[1:]} | is missing from Auth_response") # print() pass xml_return_string_lookuprresponse = simplexml.loads( live_record['lookuprresponse']) response = xml_return_string_lookuprresponse['CardinalMPI'] for item in card: try: if item[0] != 'c': if item == 'Enrolled': base_field = card[item] live_field = response['Enrolled'] if base_field == '<blank>' or base_field == '': base_field = {} elif item == 'PAResStatus': base_field = card[item] live_field = response['PAResStatus'] if base_field == '<blank>' or base_field == '': base_field = {} elif item == 'SignatureVerification': base_field = card[item] live_field = response[ 'SignatureVerification'] if base_field == '<blank>' or base_field == '': base_field = {} elif item == 'Cavv': if card[item] == '': base_field = {} live_field = response['Cavv'] elif item == 'EciFlag': base_field = card[item] live_field = response['EciFlag'] if base_field == '<blank>' or base_field == '': base_field = {} elif item == 'ACSUrl': base_field = card[item] live_field = response['ACSUrl'] if base_field == '<blank>' or base_field == '': base_field = {} elif base_field == '<value>': base_field = 'https://0merchantacsstag.cardinalcommerce.com/MerchantACSWeb/creq.jsp' elif item == 'Payload': base_field = card[item] live_field = response['Payload'] if base_field == '<blank>' or base_field == '': base_field = {} elif base_field == '<value>': base_field = live_field elif item == 'ErrorNo': base_field = card[item] live_field = response['ErrorNo'] elif item == 'ErrorDesc': base_field = card[item] live_field = response['ErrorDesc'] if base_field == '<blank>' or base_field == '': base_field = {} if base_field != live_field: failed[ item] = f"{base_field}split{live_field}" except Exception as ex: traceback.print_exc() failed[ item] = f"{base_field} split | Expected_Field is missing from CardinalMPI |" # print(f"Expected_Field: | {item} | is missing from CardinalMPI") print() pass elif visa_secure == 4: live_record = db_agent.execute_select_with_no_params(sql) if live_record == None: options.append_list( f"No record found in Cardinal3dsRequests | TransID: {transid} | CC: {config.test_data['cc']} | PPID: {config.test_data['package'][0]['PrefProcessorID']}" ) print( colored( f"No record found in Cardinal3dsRequests | TransID: {transid} | CC: {config.test_data['cc']} | PPID: {config.test_data['package'][0]['PrefProcessorID']}", 'blue')) else: options.append_list( f"Response received from Cardinal | Out Of scope | card {config.test_data['cc']}" ) print( colored( f"Response received from Cardinal | Out Of scope | card {config.test_data['cc']} => Pass ", 'green')) # else: # live_record = db_agent.execute_select_with_no_params(sql) # if live_record == None: # options.append_list(f"Merchant Configured for PSD2 => No record found | TransID: {transid} | CC: {config.test_data['cc']} | PPID: {config.test_data['package'][0]['PrefProcessorID']}") # print(colored(f"Merchant Configured for PSD2 => No record found | TransID: {transid} | CC: {config.test_data['cc']} | PPID: {config.test_data['package'][0]['PrefProcessorID']}", 'blue')) # print() # else: # options.append_list(f"Response received from Cardinal - Not a cardinal test case card {config.test_data['cc']} => Pass") # print(colored(f"Response received from Cardinal - Not a cardinal test case card {config.test_data['cc']} => Pass ", 'green')) if len(failed) > 0: options.append_list( "********************* 3DS verification MissMatch *********************" ) print() print( colored( f"********************* 3DS verification MissMatch *********************", 'red')) for item in failed: tmp = failed[item].split('split') options.append_list( f"Field : {item} => Expected BaseField: {tmp[0]} | Actual : {tmp[1]} " ) print( f"Field : {item} => Expected BaseField: {tmp[0]} | Actual : {tmp[1]} " ) print() if len(failed) == 0 and live_record: options.append_list( f"Cardinal3dsRequests test_case: {config.test_data['cc']} Records Compared => Pass " ) print( colored( f"Cardinal3dsRequests test_case: {config.test_data['cc']} Records Compared => Pass ", 'green')) print() return failed print() except Exception as ex: traceback.print_exc() print(f"{Exception} Tid: {transid,} ") pass
def convert_kb(): with open(os.path.join(CV_HOME, 'qualys_kb.xml'), 'r') as f, open(os.path.join(CV_HOME, 'kb.csv'), 'wb') as w: csv_headers = [ 'QID', 'TYPE', 'SEVERITY_LEVEL', 'TITLE', 'CATEGORY', 'LAST_UPDATE', 'PATCHABLE', 'CVE_ID', 'BUGTRAQ_ID', 'DIAGNOSIS', 'CONSEQUENCE', 'SOLUTION', 'COMPLIANCE_TYPE', 'COMPLIANCE_SECTOION', 'COMPLIANCE_DESCRIPTION', 'CVSS_BASE', 'CVSS_TEMPORAL', 'CVSS_AUTHENTICATION', 'CVSS_ACCESS_VECTOR', 'CVSS_ACCESS_COMPLEXITY', 'CVSS_AUTENTICATION', 'CVSS_CONFIDENTIALITY_IMPACT', 'CVSS_INTEGRITY_IMPACT', 'CVSS_AVAILABILITY_IMPACT', 'CVSS_EXPLOITABILITY', 'CVSS_REMEDIATION_LEVEL', 'CVSS_REPORT_CONFIDENCE', 'COMPLIANCE_TYPE', 'COMPLIANCE_SECTION', 'COMPLIANCE_DESCRIPTION', 'PCI_FLAG' ] dw = csv.DictWriter(w, dialect='excel', fieldnames=csv_headers, quoting=csv.QUOTE_ALL, delimiter=',', quotechar='"', strict=True, doublequote=True, lineterminator='\n', escapechar="\\") dw.writeheader() kbx = simplexml.loads(f.read()) count = 1 vulns = [] kb = {} for ev in kbx['VULNS']['VULN']: kb['QID'] = ev.get('QID') kb['TYPE'] = ev.get('VULN_TYPE') kb['SEVERITY_LEVEL'] = ev.get('SEVERITY_LEVEL') kb['TITLE'] = ev.get('TITLE') kb['CATEGORY'] = ev.get('CATEGORY') kb['LAST_UPDATE'] = ev.get('LAST_UPDATE') if ev.get('BUGTRAQ_ID_LIST'): btlist = [] for bt in ev['BUGTRAQ_ID_LIST']: if isinstance(bt, dict): btlist.append(bt['BUGTRAQ_ID']['ID']) if len(btlist) > 1: kb['BUGTRAQ_ID'] = ','.join(btlist) kb['PATCHABLE'] = ev.get('PATCHABLE') if ev.get('CVE_ID_LIST'): cvelist = [] for cveid in ev['CVE_ID_LIST']['CVE_ID']: if isinstance(cveid, dict): cvelist.append(cveid['ID']) if len(cvelist) > 1: kb['CVE_ID'] = ','.join(cvelist) kb['DIAGNOSIS'] = ev.get('DIAGNOSIS') kb['CONSEQUENCE'] = ev.get('CONSEQUENCE') kb['SOLUTION'] = ev.get('SOLUTION') if ev.get('COMPLIANCE'): kb['COMPLIANCE_TYPE'] = ev['COMPLIANCE']['COMPLIANCE_INFO'][ 'COMPLIANCE_TYPE'] kb['COMPLIANCE_SECTION'] = ev['COMPLIANCE']['COMPLIANCE_INFO'][ 'COMPLIANCE_SECTION'] kb['COMPLIANCE_DESCRIPTION'] = ev['COMPLIANCE'][ 'COMPLIANCE_INFO']['COMPLIANCE_DESCRIPTION'] kb['CVSS_BASE'] = ev.get('CVSS_BASE') kb['CVSS_TEMPORAL'] = ev.get('CVSS_TEMPORAL') kb['CVSS_ACCESS_VECTOR'] = ev.get('CVSS_ACCESS_VECTOR') kb['CVSS_ACCESS_COMPLEXITY'] = ev.get('CVSS_ACCESS_COMPLEXITY') kb['CVSS_AUTHENTICATION'] = ev.get('CVSS_AUTHENTICATION') kb['CVSS_CONFIDENTIALITY_IMPACT'] = ev.get( 'CVSS_CONFIDENTIALITY_IMPACT') kb['CVSS_INTEGRITY_IMPACT'] = ev.get('CVSS_INTEGRITY_IMPACT') kb['CVSS_AVAILABILITY_IMPACT'] = ev.get('CVSS_EXPLOITABILITY') kb['CVSS_EXPLOITABILITY'] = ev.get('CVSS_EXPLOITABILITY') kb['CVSS_REMEDIATION_LEVEL'] = ev.get('CVSS_REMEDIATION_LEVEL') kb['CVSS_REPORT_CONFIDENCE'] = ev.get('CVSS_REPORT_CONFIDENCE') kb['PCI_FLAG'] = ev.get('PCI_FLAG') dw.writerow(cvtools.sanitize_dict(kb)) count += 1 return
def xmlbody2dict(self, xml): return simplexml.loads(xml)
def test_can_load_xml_string_with_cdata(): docxml = "<someTag><name><![CDATA[Should be name]]></name></someTag>" response = simplexml.loads(docxml) assert response['someTag']['name'] == 'Should be name'
''' from lib import HttpUtil, Util from isp import Define, XPath from isp.nsmUtil import NsmUtil from pprint import pprint from isp.responseVerification import ResponseVerification import simplexml if __name__ == '__main__': person = {'person':{'name':'joaquim','age':15,'cars':[{'id':1},{'id':2}]}} print simplexml.dumps(person) person = simplexml.loads('<?xml version="1.0" ?><person><cars><car><id>1</id></car><car><id>2</id></car></cars><age>15</age><name>joaquim</name></person>') print person['person']['name'] print person filePath = '/Users/huhe/Install/workspace/NSM-NBAPI-Jython/response/create/response-create-default/My-Default-Internet-Edge-Zone-Layer-3-VLAN-create-001.xml' result = simplexml.loads(Util.readFile(filePath)) print result print result['task']['result']['name'] print result['task']['result']['properties']
''' filePath1 = '/Users/huhe/Install/workspace/NSM-NBAPI-Jython/response/create/response-create-default/My-Default-Provider-create-001.xml' filePath2 = '/Users/huhe/Install/workspace/NSM-NBAPI-Jython/response-golden-data/create/response-create-default/My-Default-Provider-create-001.xml' #ResponseVerification.verifyCreate(filePath1, filePath2) ResponseVerification.formalize(Util.readFile(filePath2)) ''' ''' perl = '/usr/local/ActivePerl-5.16/bin/perl' dirNSMPerl = '/Users/huhe/Install/workspace/NSM-NBAPI-Perl' dirDeviceVerification = dirNSMPerl + '/device-verification' cmdPerlNSM = dirDeviceVerification + '/NSM.pl' cmdPerlParse = dirDeviceVerification + '/Parse.pl' cmdPerlProcess = dirDeviceVerification + '/Process.pl' p = subprocess.Popen(perl + ' ' + cmdPerlProcess, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) for line in p.stdout.readlines(): print line retval = p.wait() ''' person = {'person':{'name':'joaquim','age':15,'cars':[{'id':1},{'id':2}]}} print simplexml.dumps(person) person = simplexml.loads('<?xml version="1.0" ?><person><cars><car><id>1</id></car><car><id>2</id></car></cars><age>15</age><name>joaquim</name></person>') print person['person']['name']
<child_b>text_b1</child_b> <child_b>text_b2</child_b> <child_c id="id_c1">text_c1</child_c> <child_c>text_c2</child_c> <child_c> <child_d id="id_d1">text_d1</child_d> <child_d>text_d2</child_d> </child_c> <child_e id="id_e"> text_e <child_f class="class_f" id="id_f"/> <child_g><![CDATA[<ha>haha</ha>]]></child_g> </child_e> </root>''' data = simplexml.loads(xml, strip_cdata=False) pprint.pprint(data) {'root': {'child_a': 'text_a', 'child_b': ['text_b1', 'text_b2'], 'child_c': [{'_attr': {'id': 'id_c1'}, '_text': 'text_c1'}, 'text_c2', {'child_d': [{'_attr': {'id': 'id_d1'}, '_text': 'text_d1'}, 'text_d2']}], 'child_e': {'_attr': {'id': 'id_e'}, '_text': 'text_e', 'child_f': {'_attr': {'class': 'class_f', 'id': 'id_f'}}, 'child_g': '<ha>haha</ha>'}}}
def instant_conversion(option, eticket, pricepoint_type, multitrans_base_record, email, selected_options, merchantbillconfig): transguid = '' url = '' multitrans_ic_record = copy.deepcopy(multitrans_base_record) token = multitrans_base_record['TRANSGUID'] username = fake.user_name() + str(random.randint(333, 999)) password = fake.user_name() + str(random.randint(333, 999)) if option == 'pos': url = f"{config.urlic}{token}" + selected_options page_loaded = navigate_to_url(url) if page_loaded == False: return None else: if br.is_element_present_by_id('TransGUID', wait_time=10): transguid = br.find_by_id('TransGUID').value transguid = subprocess.run([path, transguid, '-l'], stdout=subprocess.PIPE) transguid = transguid.stdout.decode('utf-8') else: print("Transguid not Found ") return None br.find_by_id('EMailInput').fill(email) br.find_by_id('SecurePurchaseButton').click() ic_record = db_agent.multitrans_full_record('', transguid, '') full_record = ic_record[0] multitrans_ic_record['TransSource'] = 122 multitrans_ic_record['TransType'] = 108 multitrans_ic_record['TransStatus'] = 186 multitrans_ic_record['PurchaseID'] = full_record['PurchaseID'] multitrans_ic_record['TransID'] = full_record['TransID'] multitrans_ic_record['TRANSGUID'] = transguid multitrans_ic_record['RelatedTransID'] = multitrans_base_record['TransID'] multitrans_ic_record['TransAmount'] = merchantbillconfig['RebillPrice'] exchange_rate = 1 if merchantbillconfig['Currency'] == multitrans_base_record['MerchantCurrency']: exchange_rate = 1 else: exchange_rate = db_agent.exc_rate(multitrans_base_record['MerchantCurrency'], merchantbillconfig['Currency']) if multitrans_base_record['MerchantCurrency'] != 'JPY': exchange_rate = round(exchange_rate, 2) multitrans_ic_record['ExchRate'] = exchange_rate markup = round(merchantbillconfig['RebillPrice'] * exchange_rate, 2) multitrans_ic_record['Markup'] = markup print(f"InstantConversion POS => Eticket: {eticket} | Type: {pricepoint_type} | Processor: {multitrans_base_record['Processor']} " f"| DMC: {multitrans_base_record['MerchantCurrency']} | Lnaguage: {multitrans_base_record['Language']}") return multitrans_ic_record, ic_record elif option == 'ws': url = f"{config.urlicws}{token}" + selected_options print(url) resp = requests.get(url) xml_return_string = simplexml.loads(resp.content) transid = int(xml_return_string['TransReturn']['TransID']) oneclick_record = db_agent.multitrans_full_record(transid, '', '') full_record = oneclick_record[0] if pricepoint_type in [501, 506, 511]: multitrans_ic_record['TransSource'] = 121 else: multitrans_ic_record['TransSource'] = 123 multitrans_ic_record['TransType'] = 1011 multitrans_ic_record['TransStatus'] = 186 multitrans_ic_record['PurchaseID'] = full_record['PurchaseID'] multitrans_ic_record['TransID'] = transid multitrans_ic_record['TRANSGUID'] = full_record['TRANSGUID'] multitrans_ic_record['RelatedTransID'] = multitrans_base_record['TransID'] print(f"OneClick WS => Eticket: {eticket} | Type: {pricepoint_type} | Processor: {multitrans_base_record['Processor']} " f"| DMC: {multitrans_base_record['MerchantCurrency']} | Lnaguage: {multitrans_base_record['Language']}") return multitrans_ic_record, oneclick_record