Extension:RudeProxyBlock

What can this extension do?
I built this extension on a request from Jack Phoenix when he wanted to be able to block all the open proxies that Wikipedia had blocked. I used a bot to grab all the pages in that category and turned it into a list. But unfortunately the block function in userlib.py was always returning a BlockError, so to allow Jack to block the users I instead built this quick extension which disallows access to all users listed in MediaWiki:Openproxylist.

Usage
To use the extension create a list of proxies at MediaWiki:Openproxylist on your wiki (One proxy per line, no extra text on those lines). Any IP listed there will not be allowed to edit or view pages and will be redirected to Special:RudeProxyBlock and will have a message displayed to them (When viewed from a normal IP the page is just a link back to the Main Page). You can customize the title using MediaWiki:Rudeproxyblock and the message using MediaWiki:Rudeproxyblockmsg.

Installation
Copy the code below into extensions/RudeProxyBlock.php and add the change to LocalSettings.php.

Changes to LocalSettings.php
require_once("$IP/extensions/RudeProxyBlock.php");

extensions/RudeProxyBlock.php
<?php

/** * The RudeProxyBlock Extension's task's are: * - Auto Blocking and Restriction of users using an OpenProxy listed in MediaWiki:Openproxylist * * @package DantmanQuickExts * @subpackage RudeProxyBlock * @author Daniel Friesen (http://www.wikia.com/wiki/User:Dantman) (dan_the_man@telus.net) * @license http://www.gnu.org/copyleft/gpl.html GNU General Public Licence 2.0 or later */

if( !defined( 'MEDIAWIKI' ) ) die( "This is an extension to the MediaWiki package and cannot be run standalone." );

$wgExtensionFunctions[] = 'efRudeProxyBlockSetup';

require_once( "$IP/includes/SpecialPage.php" );

$wgExtensionCredits['other'][] = array(			'name' => 'RudeProxyBlock',			'author' => 'Daniel Friesen(aka: Dantman)'	);

$wgHooks['userCan'][] = "efBlockOpenProxies";

function efRudeProxyBlockSetup { global $egOpenProxies, $egIsOpenProxy, $wgMessageCache; $egOpenProxies = explode("\n", wfMsg('openproxylist')); $egIsOpenProxy = in_array( wfGetIP, $egOpenProxies ); $wgMessageCache->addMessages(		array( 'rudeproxyblock'   => "Rude Proxy Block", 'rudeproxyblockmsg' => "We're sorry, but you are using a IP address which is listed as an Open Proxy.\n\nThis site does not allow users to view or edit the site under an open proxy." )	);	SpecialPage::addPage( new SpecialRudeProxyBlock ); }

function efBlockOpenProxies( &$self, &$wgUser, $action, &$result ) { global $egIsOpenProxy, $wgOut; if( $egIsOpenProxy ) { $s = SpecialPage::getTitleFor( 'RudeProxyBlock' ); if( !$self->equals( $s ) ) { $result = false; $wgOut->redirect( $s->getFullURL ); }	} }

class SpecialRudeProxyBlock extends SpecialPage { function SpecialRudeProxyBlock { global $wgRequest; SpecialPage::SpecialPage( 'RudeProxyBlock', false, false, false, 'default', false ); }	/**	 * Execute */	function execute( $par = null ) { global $wgOut, $egIsOpenProxy; $this->setHeaders; if( $egIsOpenProxy ) { $wgOut->addHTML(wfMsg('rudeproxyblockmsg')); } else { $wgOut->returnToMain; }	} }

?>