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

Reply via email to