unsigned Test::TestGroup::getChildIndex(TestGroup& child) { PX_ASSERT(!isTest()); TestGroup** p = mChildren.find(&child); PX_ASSERT(p != mChildren.end()); return unsigned(p - mChildren.begin()); }
bool VerisignProcessor::doCheckConfiguration() { _errorMsg = tr("Verisign is not yet supported as a Credit Card Processor."); return false; /* even though this isn't reachable code, hold everything we already know about Verisign in here so we can remove it from elsewhere in the app. */ if ((_metrics->value("CCServer") != "payflow.verisign.com") && (_metrics->value("CCServer") != "test-payflow.verisign.com")) { _errorMsg = tr("The CCServer %1 is not valid for Verisign.") .arg(_metrics->value("CCServer")); return false; } if (!isLive() && !isTest()) { _errorMsg = tr("If Credit Card test is selected you must select a test " "server. If Credit Card Test is not selected you must " "select a production server"); return false; } if (_metrics->value("CCPort").toInt() != 443) { _errorMsg = tr("You have an invalid port identified for the requested " "server"); return false; } return true; }
Test::TestGroup::~TestGroup() { if (!isTest()) { for (PxU32 i = 0; i < mChildren.size(); i++) delete mChildren[i]; delete[] mName; } }
void OCDial::mousePressEvent(QMouseEvent* e) { if (e->button() != LeftButton || isTest() || isEdit() || isReadOnly()) return; double w = face.width(); double h = face.height(); double radius = (w < h ? w : h) * 0.45; double ptr_w = radius / 5; double dx = e->x() - w / 2; double dy = h / 2 - e->y(); double s = sin(angle); double c = cos(angle); double d_par = s * dy + c * dx; double d_per = fabs(s * dx - c * dy); if (!button && d_per < ptr_w/2 && d_par > -ptr_w) { button = e->button(); setTrackMouse(true); updateMouse(e->x(), e->y()); } }
void Test::TestGroup::addTest(SampleCreator test, const char* name, size_t count) { PX_ASSERT(!isTest() && test); TestGroup* testGroup = new TestGroup(test, name, count); addGroup(testGroup); }
int YourPayProcessor::buildCommon(const int pccardid, const int pcvv, const double pamount, QDomDocument &prequest, QString pordertype) { QDomElement order = prequest.createElement("order"); prequest.appendChild(order); // TODO: if check and not credit card transaction, do a different select XSqlQuery ypq; ypq.prepare( "SELECT ccard_active," " formatbytea(decrypt(setbytea(ccard_number), setbytea(:key),'bf')) AS ccard_number," " formatccnumber(decrypt(setbytea(ccard_number),setbytea(:key),'bf')) AS ccard_number_x," " formatbytea(decrypt(setbytea(ccard_name), setbytea(:key),'bf')) AS ccard_name," " formatbytea(decrypt(setbytea(ccard_address1), setbytea(:key),'bf')) AS ccard_address1," " formatbytea(decrypt(setbytea(ccard_address2), setbytea(:key),'bf')) AS ccard_address2," " formatbytea(decrypt(setbytea(ccard_city), setbytea(:key),'bf')) AS ccard_city," " formatbytea(decrypt(setbytea(ccard_state), setbytea(:key),'bf')) AS ccard_state," " formatbytea(decrypt(setbytea(ccard_zip), setbytea(:key),'bf')) AS ccard_zip," " formatbytea(decrypt(setbytea(ccard_country), setbytea(:key),'bf')) AS ccard_country," " formatbytea(decrypt(setbytea(ccard_month_expired),setbytea(:key),'bf')) AS ccard_month_expired," " formatbytea(decrypt(setbytea(ccard_year_expired),setbytea(:key), 'bf')) AS ccard_year_expired" " FROM ccard " "WHERE (ccard_id=:ccardid);"); ypq.bindValue(":ccardid", pccardid); ypq.bindValue(":key", omfgThis->_key); ypq.exec(); if (ypq.first()) { if (!ypq.value("ccard_active").toBool()) { _errorMsg = errorMsg(-10); return -10; } } else if (ypq.lastError().type() != QSqlError::NoError) { _errorMsg = ypq.lastError().databaseText(); return -1; } else { _errorMsg = errorMsg(-17).arg(pccardid); return -17; } QDomElement elem; elem = prequest.createElement("merchantinfo"); order.appendChild(elem); CREATECHILDTEXTNODE(elem, "configfile", _metricsenc->value("CCYPStoreNum").toLatin1()); elem = prequest.createElement("orderoptions"); order.appendChild(elem); CREATECHILDTEXTNODE(elem, "ordertype", pordertype); QString resultText; if (isLive()) resultText = "LIVE"; else if (isTest()) { if (_metrics->value("CCTestResult") == "F") resultText = (qrand() % 2) ? "DECLINE" : "DUPLICATE"; else if (_metrics->value("CCTestResult") == "S") switch (qrand() % 10) { case 0: resultText = "DECLINE"; break; case 1: resultText = "DUPLICATE"; break; default: resultText = "GOOD"; break; } else // if (_metrics->value("CCTestResult") == "P") resultText = "GOOD"; } else { _errorMsg = errorMsg(-13).arg(pccardid); return -13; } CREATECHILDTEXTNODE(elem, "result", resultText); elem = prequest.createElement("payment"); order.appendChild(elem); CREATECHILDTEXTNODE(elem, "chargetotal", QString::number(pamount)); // TODO: if check and not credit card transaction do something else elem = prequest.createElement("creditcard"); order.appendChild(elem); CREATECHILDTEXTNODE(elem, "cardnumber", ypq.value("ccard_number").toString()); QString work_month; work_month.setNum(ypq.value("ccard_month_expired").toDouble()); if (work_month.length() == 1) work_month = "0" + work_month; CREATECHILDTEXTNODE(elem, "cardexpmonth", work_month); CREATECHILDTEXTNODE(elem, "cardexpyear", ypq.value("ccard_year_expired").toString().right(2)); if (pcvv > 0) { CREATECHILDTEXTNODE(elem, "cvmvalue", QString::number(pcvv)); CREATECHILDTEXTNODE(elem, "cvmindicator", "provided"); } elem = prequest.createElement("billing"); order.appendChild(elem); CREATECHILDTEXTNODE(elem, "name", ypq.value("ccard_name").toString()); // TODO: company CREATECHILDTEXTNODE(elem, "address1", ypq.value("ccard_address1").toString()); CREATECHILDTEXTNODE(elem, "address2", ypq.value("ccard_address2").toString()); CREATECHILDTEXTNODE(elem, "city", ypq.value("ccard_city").toString()); CREATECHILDTEXTNODE(elem, "state", ypq.value("ccard_state").toString()); CREATECHILDTEXTNODE(elem, "zip", ypq.value("ccard_zip").toString()); // TODO: country // should be 2-char country code abbr // TODO: phone, fax, email CREATECHILDTEXTNODE(elem, "addrnum", ypq.value("ccard_address1").toString().section(" ", 0, 0)); if (DEBUG) qDebug("YP:buildCommon built %s", prequest.toString().toAscii().data()); return 0; }
int YourPayProcessor::handleResponse(const QString &presponse, const int pccardid, const QString &ptype, const double pamount, const int pcurrid, QString &pneworder, QString &preforder, int &pccpayid, ParameterList &pparams) { if (DEBUG) qDebug("YP::handleResponse(%s, %d, %s, %f, %d, %s, %d, pparams)", presponse.toAscii().data(), pccardid, ptype.toAscii().data(), pamount, pcurrid, preforder.toAscii().data(), pccpayid); QDomDocument response; // YP doesn't even send back a valid XML doc! response.setContent("<yp_wrapper>" + presponse + "</yp_wrapper>"); QDomNode node; QDomElement root = response.documentElement(); QString r_approved; QString r_avs; QString r_code; QString r_error; QString r_message; QString r_ordernum; QString r_ref; QString r_score; QString r_shipping; QString r_tax; QString r_tdate; QString r_time; QString status; node = root.firstChild(); while ( !node.isNull() ) { if (node.isElement()) { if (node.nodeName() == "r_approved" ) r_approved = node.toElement().text(); else if (node.nodeName() == "r_avs" ) r_avs = node.toElement().text(); else if (node.nodeName() == "r_code" ) r_code = node.toElement().text(); else if (node.nodeName() == "r_error" ) r_error = node.toElement().text(); else if (node.nodeName() == "r_message" ) r_message = node.toElement().text(); else if (node.nodeName() == "r_ordernum" ) r_ordernum = node.toElement().text(); else if (node.nodeName() == "r_ref" ) r_ref = node.toElement().text(); else if (node.nodeName() == "r_score" ) r_score = node.toElement().text(); else if (node.nodeName() == "r_shipping" ) r_shipping = node.toElement().text(); else if (node.nodeName() == "r_tax" ) r_tax = node.toElement().text(); else if (node.nodeName() == "r_tdate" ) r_tdate = node.toElement().text(); else if (node.nodeName() == "r_time" ) r_time = node.toElement().text(); } node = node.nextSibling(); } if (isTest()) { // in test mode YP doesn't send an approval code if (r_approved == "APPROVED" && r_code.isEmpty()) r_code = "12345"; // inject failures to test AVS and CVV checking but ONLY IN TEST MODE if (r_avs.isEmpty() && _metrics->value("CCTestResult") == "S") { switch (qrand() % 50) { case 0: r_avs = "NN"; break; case 1: r_avs = "XN"; break; case 2: r_avs = "YN"; break; case 3: r_avs = "NX"; break; case 4: r_avs = "XX"; break; case 5: r_avs = "YX"; break; default: r_avs = "YY"; break; } switch (qrand() % 50) { case 0: r_avs += "N"; break; case 1: r_avs += "P"; break; case 2: r_avs += "S"; break; case 3: r_avs += "U"; break; default: r_avs += "M"; break; } } } int returnValue = 0; if (r_approved == "APPROVED" || r_approved == "SUBMITTED") { _errorMsg = errorMsg(0).arg(r_ref); if (r_approved == "SUBMITTED") { _errorMsg = errorMsg(100).arg(r_approved); returnValue = 100; } if (ptype == "A") status = "A"; // Authorized else if (ptype == "V") status = "V"; // Voided else status = "C"; // Completed/Charged } else if (r_approved == "DENIED") { _errorMsg = errorMsg(-90).arg(r_message); returnValue = -90; status = "D"; } else if (r_approved == "DUPLICATE") { _errorMsg = errorMsg(-91).arg(r_message); returnValue = -91; status = "D"; } else if (r_approved == "DECLINED") { _errorMsg = errorMsg(-92).arg(r_error); returnValue = -92; status = "D"; } else if (r_approved == "FRAUD") { _errorMsg = errorMsg(-93).arg(r_error); returnValue = -93; status = "D"; } else if (r_approved.isEmpty()) { _errorMsg = errorMsg(-100) .arg(r_error).arg(r_message).arg(presponse); returnValue = -100; status = "X"; } /* TODO: rewrite CreditCardProcessor::fraudChecks() as recommended in cybersourceprocessor.cpp, then rewrite this */ // YP encodes AVS and CVV checking in the r_avs response field QRegExp avsRegExp("^[" + _metrics->value("CCAvsAddr") + "][" + _metrics->value("CCAvsZIP") + "]"); _passedAvs = _metrics->value("CCAvsCheck") == "X" || ! r_avs.contains(avsRegExp); // avsregexp matches failures _passedCvv = _metrics->value("CCCVVCheck") == "X" || ! r_avs.contains(QRegExp("[" + _metrics->value("CCCVVErrors") + "]$")); // end TODO _passedLinkShield = (! _metrics->boolean("CCYPLinkShield")) || (! r_score.isEmpty() && r_score.toInt() <= _metrics->value("CCYPLinkShieldMax").toInt()); if (DEBUG) qDebug("YP:%s\t_passedAvs %d\t_passedCvv %d\t_passedLinkShield %d", r_avs.toAscii().data(), _passedAvs, _passedCvv, _passedLinkShield); pparams.append("ccard_id", pccardid); pparams.append("auth_charge", ptype); pparams.append("type", ptype); pparams.append("reforder", preforder.isEmpty() ? pneworder : preforder); pparams.append("status", status); pparams.append("avs", r_avs); pparams.append("ordernum", pneworder); pparams.append("xactionid", r_ordernum.isEmpty() ? pneworder : r_ordernum); pparams.append("error", r_error); pparams.append("approved", r_approved); pparams.append("code", r_code); pparams.append("score", r_score.toInt()); pparams.append("shipping", r_shipping); pparams.append("tax", r_tax); pparams.append("tdate", r_tdate); pparams.append("ref", r_ref); pparams.append("message", r_message); if (pcurrid != _ypcurrid) { pparams.append("fromcurr", pcurrid); pparams.append("tocurr", _ypcurrid); } else pparams.append("currid", pcurrid); pparams.append("auth", QVariant(ptype == "A")); if (! r_time.isEmpty()) pparams.append("time", r_time); if (DEBUG) qDebug("YP:r_error.isEmpty() = %d", r_error.isEmpty()); if (! r_error.isEmpty()) { _errorMsg = errorMsg(-12).arg(r_error); returnValue = -12; } if (returnValue == 0) pparams.append("amount", pamount); else pparams.append("amount", 0); // no money changed hands this attempt return returnValue; }
int CreditCardProcessor::testConfiguration() { if (DEBUG) qDebug("CCP:testConfiguration()"); reset(); if (!_privleges->check("ProcessCreditCards")) { _errorMsg = errorMsg(-2); return -2; } if(!_metrics->boolean("CCAccept")) { _errorMsg = errorMsg(-3); return -3; } if (_metrics->value("CCDefaultBank").isEmpty()) { _errorMsg = errorMsg(-4); return -4; } if (omfgThis->_key.isEmpty()) { _errorMsg = errorMsg(-5); return -5; } #ifdef Q_WS_WIN QString pemfile = _metrics->value("CCYPWinPathPEM"); #elif defined Q_WS_MACX QString pemfile = _metrics->value("CCYPMacPathPEM"); #elif defined Q_WS_X11 QString pemfile = _metrics->value("CCYPLinPathPEM"); #endif if (pemfile.isEmpty()) { _errorMsg = errorMsg(-15); return -15; } QFileInfo fileinfo(pemfile.toLatin1()); if (!fileinfo.isFile()) { _errorMsg = errorMsg(-16).arg(fileinfo.fileName()); return -16; } if(_metrics->boolean("CCUseProxyServer")) { _plogin = _metricsenc->value("CCProxyLogin"); if (_plogin.isEmpty()) { _errorMsg = errorMsg(-6); return -6; } _ppassword = _metricsenc->value("CCPassword"); if (_ppassword.isEmpty()) { _errorMsg = errorMsg(-7); return -7; } _pserver = _metrics->value("CCProxyServer"); if (_pserver.isEmpty()) { _errorMsg = errorMsg(-8); return -8; } _pport = _metrics->value("CCProxyPort"); if (_pport.isEmpty()) { _errorMsg = errorMsg(-9); return -9; } } if (! handlesChecks() && ! handlesCreditCards()) { _errorMsg = errorMsg(-20); return -20; } if (isLive() == isTest()) // if both true or both false { _errorMsg = errorMsg(-13); return -13; } return doTestConfiguration(); }
int CreditCardProcessor::sendViaHTTP(const QString &prequest, QString &presponse) { if (DEBUG) qDebug("CCP:sendViaHTTP(input, output) with input:\n%s", prequest.toAscii().data()); // TODO: find a better place to save this if (isTest()) _metrics->set("CCOrder", prequest); // TODO: why have a hard-coded path to curl? QProcess proc(this); QString curl_path; #ifdef Q_WS_WIN curl_path = qApp->applicationDirPath() + "\\curl"; #elif defined Q_WS_MACX curl_path = "/usr/bin/curl"; #elif defined Q_WS_X11 curl_path = "/usr/bin/curl"; #endif QStringList curl_args; curl_args.append( "-k" ); curl_args.append( "-d" ); curl_args.append( prequest ); curl_args.append( "-E" ); #ifdef Q_WS_WIN curl_args.append(_metrics->value("CCYPWinPathPEM")); #elif defined Q_WS_MACX curl_args.append(_metrics->value("CCYPMacPathPEM")); #elif defined Q_WS_X11 curl_args.append(_metrics->value("CCYPLinPathPEM")); #endif curl_args.append("https://" + _metrics->value("CCServer") + QString(_metrics->value("CCPort").toInt() == 0 ? "" : (":" + _metrics->value("CCPort")))); if(_metrics->boolean("CCUseProxyServer")) { curl_args.append( "-x" ); curl_args.append(_metrics->value("CCProxyServer") + QString(_metrics->value("CCProxyPort").toInt() == 0 ? "" : (":" + _metrics->value("CCProxyPort")))); curl_args.append( "-U" ); curl_args.append(_metricsenc->value("CCProxyLogin") + ":" + _metricsenc->value("CCPassword")); } QString curlCmd = curl_path + ((DEBUG) ? (" " + curl_args.join(" ")) : ""); if (DEBUG) qDebug("%s", curlCmd.toAscii().data()); QApplication::setOverrideCursor( QCursor(Qt::WaitCursor) ); /* TODO: consider changing to the original implementation: start the proc in a separate thread capture the output as it's generated while (proc->isRunning()) qApp->processEvents(); */ proc.start(curl_path, curl_args); if ( !proc.waitForStarted() ) { QApplication::restoreOverrideCursor(); _errorMsg = errorMsg(-18) .arg(curlCmd) .arg("") .arg(QString(proc.readAllStandardError())); return -18; } if (! proc.waitForFinished()) { QApplication::restoreOverrideCursor(); _errorMsg = errorMsg(-18) .arg(curlCmd) .arg("") .arg(QString(proc.readAllStandardError())); return -18; } QApplication::restoreOverrideCursor(); if (proc.exitStatus() != QProcess::NormalExit) { _errorMsg = errorMsg(-18) .arg(curlCmd) .arg("") .arg(QString(proc.readAllStandardError())); return -18; } if (proc.exitCode() != 0) { _errorMsg = errorMsg(-18) .arg(curlCmd) .arg(proc.exitCode()) .arg(QString(proc.readAllStandardError())); return -18; } presponse = proc.readAllStandardOutput(); if (isTest()) _metrics->set("CCTestMe", presponse); return 0; }