Permalink
Fetching contributors…
Cannot retrieve contributors at this time
110 lines (89 sloc) 3.34 KB
<?php
/**
*
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
* @author Andreas Gohr <gohr@cosmocode.de>
*/
// must be run within Dokuwiki
if(!defined('DOKU_INC')) die();
define('BB2_CWD', dirname(__FILE__));
if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
require_once(DOKU_PLUGIN.'action.php');
class action_plugin_badbehaviour extends DokuWiki_Action_Plugin {
/**
* return some info
*/
function getInfo(){
return confToHash(dirname(__FILE__).'/plugin.info.txt');
}
/**
* register the eventhandlers and initialize some options
*/
function register(Doku_Event_Handler $controller){
$controller->register_hook('DOKUWIKI_STARTED',
'BEFORE',
$this,
'handle_start',
array());
$controller->register_hook('TPL_METAHEADER_OUTPUT',
'BEFORE',
$this,
'handle_metaheaders',
array());
}
/**
* Do the magic
*/
function handle_start(&$event, $param){
require_once(BB2_CWD . "/bad-behavior/version.inc.php");
require_once(BB2_CWD . "/bad-behavior/core.inc.php");
bb2_start(array( 'log_table' => 'badbehaviour',
'display_stats' => true,
'strict' => false,
'verbose' => false,
'skipblackhole' => $this->getConf('skipblackhole')
));
}
/**
* Extend the meta headers
*/
function handle_metaheaders(&$event, $param){
global $bb2_javascript;
if (!$bb2_javascript) return;
// we just use some values from the bb2 script but build our own (better) version
preg_match('/(bb2_addLoadEvent\(function\(\) \{)(.*)(\}\);)/s',$bb2_javascript,$match);
$data = 'jQuery(function(){'.$match[2].'});';
$event->data['script'][] = array( 'type'=>'text/javascript', 'charset'=>'utf-8', '_data'=>$data);
}
}
/*
* Bad Behavior expects certain global functions. Mostly related to the DB logging,
* which is not used in DokuWiki
*/
function bb2_relative_path() { return DOKU_BASE; }
function bb2_db_date() { return gmdate('Y-m-d H:i:s'); }
function bb2_db_affected_rows() { return false; }
function bb2_db_escape($string) { return $string; }
function bb2_db_num_rows($result) { return ($result === FALSE) ? 0 : count($result); }
function bb2_db_query($query) { return false; }
function bb2_db_rows($result) { return $result; }
function bb2_email() {
$bb2 =& plugin_load('action','badbehaviour');
return $bb2->getConf('email');
}
/**
* This is an extension hook provided by BB2, we use it to do our
* own logging.
*/
function bb2_banned_callback($settings, $package, $key){
global $conf;
$data = array();
$data[] = time();
$data[] = stripctl($package['ip']);
$data[] = stripctl($package['request_method']);
$data[] = stripctl($package['request_uri']);
$data[] = stripctl($package['server_protocol']);
$data[] = stripctl($package['user_agent']);
$data[] = stripctl($key);
io_saveFile($conf['cachedir'].'/badbehaviour.log',join("\t",$data)."\n",true);
}