https://www.mediawiki.org/wiki/Special:Code/MediaWiki/101949
Revision: 101949
Author: khorn
Date: 2011-11-04 03:02:51 +0000 (Fri, 04 Nov 2011)
Log Message:
-----------
Adds another custom filter: One that is based on calling functions back in the
gateway, to get either a true/false, or a numeric ranking (from 1-100) of how
bad the result is.
When enabled, the filter will call all configured functions that exist in the
gateway adapter, and add the risk score in to the equation.
This can be disabled for any gateway by simply not defining any rules to apply
(and now, so can the referrer and source filters).
Modified Paths:
--------------
trunk/extensions/DonationInterface/donationinterface.php
trunk/extensions/DonationInterface/extras/custom_filters/custom_filters.body.php
trunk/extensions/DonationInterface/extras/custom_filters/filters/referrer/referrer.body.php
trunk/extensions/DonationInterface/extras/custom_filters/filters/source/source.body.php
Added Paths:
-----------
trunk/extensions/DonationInterface/extras/custom_filters/filters/functions/
trunk/extensions/DonationInterface/extras/custom_filters/filters/functions/functions.body.php
Modified: trunk/extensions/DonationInterface/donationinterface.php
===================================================================
--- trunk/extensions/DonationInterface/donationinterface.php 2011-11-04
02:43:42 UTC (rev 101948)
+++ trunk/extensions/DonationInterface/donationinterface.php 2011-11-04
03:02:51 UTC (rev 101949)
@@ -44,6 +44,7 @@
'GlobalCollect' => false,
'ReferrerFilter' => false, //extra
'SourceFilter' => false, //extra
+ 'FunctionsFilter' => false, //extra
'Minfraud_as_filter' => false, //extra
);
@@ -56,6 +57,7 @@
//this is getting annoying.
if ( $subextension === 'ReferrerFilter' ||
$subextension === 'SourceFilter' ||
+ $subextension === 'FunctionsFilter' ||
$subextension === 'Minfraud_as_filter' ||
$subextension === 'ConversionLog' ||
$subextension === 'Minfraud' ||
@@ -66,6 +68,7 @@
if ( $subextension === 'ReferrerFilter' ||
$subextension === 'SourceFilter' ||
+ $subextension === 'FunctionsFilter' ||
$subextension === 'Minfraud_as_filter' ){
//and at least one of them is a custom filter.
@@ -174,6 +177,11 @@
$wgAutoloadClasses['Gateway_Extras_CustomFilters_Source'] =
$donationinterface_dir . "extras/custom_filters/filters/source/source.body.php";
}
+//Functions Filter classes
+if ( $optionalParts['FunctionsFilter'] === true ){
+ $wgAutoloadClasses['Gateway_Extras_CustomFilters_Functions'] =
$donationinterface_dir .
"extras/custom_filters/filters/functions/functions.body.php";
+}
+
//Recaptcha classes
if ( $optionalParts['Recaptcha'] === true ){
$wgAutoloadClasses['Gateway_Extras_ReCaptcha'] = $donationinterface_dir
. "extras/recaptcha/recaptcha.body.php";
@@ -403,6 +411,11 @@
$wgDonationInterfaceCustomFiltersSrcRules = array( );
}
+//Functions Filter globals
+if ( $optionalParts['FunctionsFilter'] === true ){
+ $wgDonationInterfaceCustomFiltersFunctions = array( );
+}
+
//Recaptcha globals
if ( $optionalParts['Recaptcha'] === true ){
/**
@@ -477,8 +490,13 @@
//Source Filter hooks
if ( $optionalParts['SourceFilter'] === true ){
$wgHooks["GatewayCustomFilter"][] = array(
'Gateway_Extras_CustomFilters_Source::onFilter' );
-}
+}
+//Functions Filter hooks
+if ( $optionalParts['FunctionsFilter'] === true ){
+ $wgHooks["GatewayCustomFilter"][] = array(
'Gateway_Extras_CustomFilters_Functions::onFilter' );
+}
+
//Conversion Log hooks
if ($optionalParts['ConversionLog'] === true){
// Sets the 'conversion log' as logger for post-processing
Modified:
trunk/extensions/DonationInterface/extras/custom_filters/custom_filters.body.php
===================================================================
---
trunk/extensions/DonationInterface/extras/custom_filters/custom_filters.body.php
2011-11-04 02:43:42 UTC (rev 101948)
+++
trunk/extensions/DonationInterface/extras/custom_filters/custom_filters.body.php
2011-11-04 03:02:51 UTC (rev 101949)
@@ -41,7 +41,7 @@
$this->risk_score = 0;
if ( $this->risk_score > 100 )
$this->risk_score = 100;
-
+// error_log("Risk score: " . $this->risk_score );
foreach ( $this->action_ranges as $action => $range ) {
if ( $this->risk_score >= $range[0] &&
$this->risk_score <= $range[1] ) {
return $action;
@@ -56,6 +56,7 @@
// expose a hook for custom filters
wfRunHooks( 'GatewayCustomFilter', array(
&$this->gateway_adapter, &$this ) );
$localAction = $this->determineAction();
+// error_log("Filter validation says " . $localAction);
$this->gateway_adapter->setValidationAction( $localAction );
$log_msg = '"' . $localAction . "\"\t\"" . $this->risk_score .
"\"";
Added:
trunk/extensions/DonationInterface/extras/custom_filters/filters/functions/functions.body.php
===================================================================
---
trunk/extensions/DonationInterface/extras/custom_filters/filters/functions/functions.body.php
(rev 0)
+++
trunk/extensions/DonationInterface/extras/custom_filters/filters/functions/functions.body.php
2011-11-04 03:02:51 UTC (rev 101949)
@@ -0,0 +1,63 @@
+<?php
+
+class Gateway_Extras_CustomFilters_Functions extends Gateway_Extras {
+
+ /**
+ * Container for an instance of self
+ * @var object
+ */
+ static $instance;
+
+ /**
+ * Custom filter object holder
+ * @var object
+ */
+ public $cfo;
+
+ public function __construct( &$gateway_adapter, &$custom_filter_object
) {
+ parent::__construct( $gateway_adapter );
+ $this->cfo = & $custom_filter_object;
+ }
+
+ public function filter() {
+
+ $functions = $this->gateway_adapter->getGlobal(
'CustomFiltersFunctions' );
+ foreach ( $functions as $function_name => $risk_score_modifier
) {
+ //run the function specified, if it exists.
+ if ( method_exists( $this->gateway_adapter,
$function_name ) ) {
+ $score =
$this->gateway_adapter->{$function_name}();
+ if ( is_null( $score ) ){
+ $score = 0; //TODO: Is this the correct
behavior?
+ } elseif ( is_bool( $score ) ) {
+ $score = ( $score ? 0 :
$risk_score_modifier );
+ } elseif ( is_numeric( $score ) && $score <=
100 ) {
+ $score = $score * $risk_score_modifier
/ 100;
+ } else {
+// error_log("Function Filter:
$function_name returned $score");
+ throw new MWException( "Filter
functions are returning somekinda nonsense." );
+ }
+
+ $this->cfo->risk_score += $score;
+ }
+ }
+
+ return TRUE;
+ }
+
+ static function onFilter( &$gateway_adapter, &$custom_filter_object ) {
+ if ( !$gateway_adapter->getGlobal( 'EnableFunctionsFilter' ) ||
+ !count( $gateway_adapter->getGlobal(
'CustomFiltersFunctions' ) ) ){
+ return true;
+ }
+ $gateway_adapter->debugarray[] = 'functions onFilter hook!';
+ return self::singleton( $gateway_adapter, $custom_filter_object
)->filter();
+ }
+
+ static function singleton( &$gateway_adapter, &$custom_filter_object ) {
+ if ( !self::$instance ) {
+ self::$instance = new self( $gateway_adapter,
$custom_filter_object );
+ }
+ return self::$instance;
+ }
+
+}
Property changes on:
trunk/extensions/DonationInterface/extras/custom_filters/filters/functions/functions.body.php
___________________________________________________________________
Added: svn:eol-style
+ native
Modified:
trunk/extensions/DonationInterface/extras/custom_filters/filters/referrer/referrer.body.php
===================================================================
---
trunk/extensions/DonationInterface/extras/custom_filters/filters/referrer/referrer.body.php
2011-11-04 02:43:42 UTC (rev 101948)
+++
trunk/extensions/DonationInterface/extras/custom_filters/filters/referrer/referrer.body.php
2011-11-04 03:02:51 UTC (rev 101949)
@@ -47,7 +47,8 @@
}
static function onFilter( &$gateway_adapter, &$custom_filter_object ) {
- if ( !$gateway_adapter->getGlobal( 'EnableReferrerFilter' ) ){
+ if ( !$gateway_adapter->getGlobal( 'EnableReferrerFilter' ) ||
+ !count( $gateway_adapter->getGlobal(
'CustomFiltersRefRules' ) ) ){
return true;
}
$gateway_adapter->debugarray[] = 'referrer onFilter hook!';
Modified:
trunk/extensions/DonationInterface/extras/custom_filters/filters/source/source.body.php
===================================================================
---
trunk/extensions/DonationInterface/extras/custom_filters/filters/source/source.body.php
2011-11-04 02:43:42 UTC (rev 101948)
+++
trunk/extensions/DonationInterface/extras/custom_filters/filters/source/source.body.php
2011-11-04 03:02:51 UTC (rev 101949)
@@ -47,7 +47,8 @@
}
static function onFilter( &$gateway_adapter, &$custom_filter_object ) {
- if ( !$gateway_adapter->getGlobal( 'EnableSourceFilter' ) ){
+ if ( !$gateway_adapter->getGlobal( 'EnableSourceFilter' ) ||
+ !count( $gateway_adapter->getGlobal(
'CustomFiltersSrcRules' ) ) ){
return true;
}
$gateway_adapter->debugarray[] = 'source onFilter hook!';
_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs