Ejemplo n.º 1
0
unsigned Test::TestGroup::getChildIndex(TestGroup& child)
{
	PX_ASSERT(!isTest());
	TestGroup** p = mChildren.find(&child);
	PX_ASSERT(p != mChildren.end());
	return unsigned(p - mChildren.begin());
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
Test::TestGroup::~TestGroup()
{
	if (!isTest())
	{
		for (PxU32 i = 0; i < mChildren.size(); i++)
			delete mChildren[i];

		delete[] mName;
	}
}
Ejemplo n.º 4
0
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());
	}
}
Ejemplo n.º 5
0
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);
}
Ejemplo n.º 6
0
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;
}
Ejemplo n.º 7
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;
}
Ejemplo n.º 8
0
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();
}
Ejemplo n.º 9
0
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;
}