Version 4.0.13.1

This commit is contained in:
Neo committed 2025-12-19 04:57:54 -08:00
1 parent f9e857d255
commit c6a86f0d9b
7517 files changed
+597400 -668041

No files matched your search

@@ -0,0 +1,200 @@
<?php
/**
* @brief MaxMind Request
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
* @license http://www.invisionpower.com/legal/standards/
* @package IPS Social Suite
* @subpackage Nexus
* @since 07 Mar 2014
* @version SVN_VERSION_NUMBER
*/
namespace IPS\nexus\Fraud\MaxMind;
/* To prevent PHP errors (extending class does not exist) revealing path */
if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
{
header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' );
exit;
}
/**
* MaxMind Request
*/
class _Request
{
/**
* @brief Data that will be posted
*/
protected $data = array();
/**
* Constructor
*
* @param bool $session Set session data (set to FALSE if this is being initiated outside the checkout sequence)
* @param NULL|string $maxmindKey MaxMind License Key (NULL to get from settings)
* @return void
*/
public function __construct( $session=TRUE, $maxmindKey=NULL )
{
$this->data['license_key'] = $maxmindKey ?: \IPS\Settings::i()->maxmind_key;
if ( $session )
{
$this->setIpAddress( $_SERVER['REMOTE_ADDR'] );
if ( isset( $_SERVER['HTTP_X_FORWARDED_FOR'] ) )
{
$this->data['forwardedIP'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
elseif( isset( $_SERVER['HTTP_CLIENT_IP'] ) )
{
$this->data['forwardedIP'] = $_SERVER['HTTP_CLIENT_IP'];
}
$this->data['sessionID'] = session_id();
if ( isset( $_SERVER['HTTP_USER_AGENT'] ) and $_SERVER['HTTP_USER_AGENT'] )
{
$this->data['user_agent'] = $_SERVER['HTTP_USER_AGENT'];
}
if ( isset( $_SERVER['HTTP_ACCEPT_LANGUAGE'] ) and $_SERVER['HTTP_ACCEPT_LANGUAGE'] )
{
$this->data['accept_language'] = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
}
}
}
/**
* Set IP Address
*
* @param string $ipAddress IP Address
* @return void
*/
public function setIpAddress( $ipAddress )
{
$this->data['i'] = $ipAddress;
}
/**
* Set Transaction
*
* @param \IPS\nexus\Transaction $transaction
* @return void
*/
public function setTransaction( \IPS\nexus\Transaction $transaction )
{
$this->setMember( $transaction->member );
if ( $billingAddress = $transaction->invoice->billaddress )
{
$this->setBillingAddress( $transaction->invoice->billaddress );
}
if ( $shippingAddress = $transaction->invoice->shipaddress )
{
$this->setShippingAddress( $transaction->invoice->shipaddress );
}
$this->data['order_amount'] = $transaction->amount->amount;
$this->data['order_currency'] = $transaction->amount->currency;
}
/**
* Set Billing Address
*
* @param \IPS\GeoLocation $billingAddress
* @return void
*/
public function setBillingAddress( \IPS\GeoLocation $billingAddress )
{
$this->data['city'] = $billingAddress->city;
$this->data['region'] = $billingAddress->region;
$this->data['postal'] = $billingAddress->postalCode;
$this->data['country'] = $billingAddress->country;
}
/**
* Set Shipping Address
*
* @param \IPS\GeoLocation $billingAddress
* @return void
*/
public function setShippingAddress( \IPS\GeoLocation $shippingAddress )
{
$this->data['shipAddr'] = implode( ', ', $shippingAddress->addressLines );
$this->data['shipCity'] = $shippingAddress->city;
$this->data['shipRegion'] = $shippingAddress->region;
$this->data['shipPostal'] = $shippingAddress->postalCode;
$this->data['shipCountry'] = $shippingAddress->country;
}
/**
* Set Member
*
* @param \IPS\Member $member
* @return void
*/
public function setMember( \IPS\Member $member )
{
$this->data['domain'] = mb_substr( $member->email, mb_strrpos( $member->email, '@' ) + 1 );
$this->data['emailMD5'] = md5( $member->email );
$this->data['usernameMD5'] = md5( $member->name );
}
/**
* Set Phone Number
*
* @param string $phoneNumber
* @return void
*/
public function setPhone( $phoneNumber )
{
$this->data['custPhone'] = $phoneNumber;
}
/**
* Set Credit Card
*
* @param string $cardNumber The card number
* @return void
*/
public function setCard( \IPS\nexus\CreditCard $card )
{
$this->data['txn_type'] = 'creditcard';
$this->data['bin'] = mb_substr( $card->number, 0, 6 );
}
/**
* Set Transaction Type
*
* @param string $type Transaction Type
* @return void
*/
public function setTransactionType( $type )
{
$this->data['txn_type'] = $type;
}
/**
* Set AVS Result
*
* @param string $code AVS Code
* @return void
*/
public function setAVS( $code )
{
$this->data['avs_result'] = $code;
}
/**
* Make Request
*
* @return \IPS\nexus\Fraud\MaxMind\Response
* @throws \IPS\Http\Request\Exception
*/
public function request()
{
return new \IPS\nexus\Fraud\MaxMind\Response( \IPS\Http\Url::external( 'https://minfraud.maxmind.com/app/ccv2r' )->request()->post( $this->data ) );
}
}
@@ -0,0 +1,97 @@
<?php
/**
* @brief MaxMind Response
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
* @license http://www.invisionpower.com/legal/standards/
* @package IPS Social Suite
* @subpackage Nexus
* @since 07 Mar 2014
* @version SVN_VERSION_NUMBER
*/
namespace IPS\nexus\Fraud\MaxMind;
/* To prevent PHP errors (extending class does not exist) revealing path */
if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
{
header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' );
exit;
}
/**
* MaxMind Response
*/
class _Response
{
/**
* @brief Data
*/
protected $data = array();
/**
* Constructor
*
* @param \IPS\Http\Response
* @return void
*/
public function __construct( \IPS\Http\Response $data = NULL )
{
if ( $data )
{
foreach ( explode( ';', $data ) as $row )
{
$exploded = explode( '=', $row );
$this->data[ $exploded[0] ] = $exploded[1];
}
}
}
/**
* Get data
*
* @param string $key Key
* @return mixed
*/
public function __get( $key )
{
if ( isset( $this->data[ $key ] ) )
{
return $this->data[ $key ];
}
return NULL;
}
/**
* Build from JSON
*
* @param string $json JSON data
* @return \IPS\nexus\Fraud\MaxMind\Response
*/
public static function buildFromJson( $json )
{
$obj = new static;
$obj->data = json_decode( $json, TRUE );
return $obj;
}
/**
* JSON encoded
*
* @return string
*/
public function __toString()
{
return json_encode( $this->data );
}
/**
* proxyScore as percentage
*
* @return int
*/
public function proxyScorePercentage()
{
return ( 100 - 10 ) / 3 * $this->proxyScore + ( $this->proxyScore > 3 ? ( 10 * ( $this->proxyScore - 3 ) ) : 0 );
}
}
Whitespace-only changes.