register_hook('DOKUWIKI_STARTED', 'BEFORE', $this, 'dw_start');
}
function dw_start(&$event, $param)
{
global $ACT, $INPUT, $USERINFO;
$ip = $_SERVER['REMOTE_ADDR'];
if(!$this->getConf('enable_test')) {
return;
}
if(file_exists(DOKU_PLUGIN . 'abortlogin/disabled')) {
msg("Remove the disabled file from the plugin directory when you are finished setting up. Your current IP is $ip",2);
return;
}
if($ACT != 'login') return;
$u = $INPUT->str('u'); $p=$INPUT->str('p'); $action = $INPUT->post->str('do');
$test = $this->getConf('test');
$allowed = $this->getConf('allowed');
if($_REQUEST['do'] =='admin' && empty($_REQUEST['http_credentials']) && empty($USERINFO)) {
header("HTTP/1.0 403 Forbidden");
exit("
403: Login Forbidden
");
}
if( !empty($u) && !empty($p) && $action != 'login' ) {
header("HTTP/1.0 403 Forbidden");
exit("403: Login Forbidden
");
}
if( empty($u) && empty($p) && empty($_REQUEST['http_credentials']) && !empty($USERINFO) && !$this->is_allowed($allowed, $ip)){
unset($USERINFO) ;
global $ACT; $ACT = 'logout';
}
if($test && isset($USERINFO) && in_array('admin', $USERINFO['grps'])) {
$tests = explode(',',$test);
foreach ($tests as $test) {
$test = trim($test);
if(!$this->is_allowed($allowed, $test)) {
msg("$test is not a valid IP");
}
else msg("$test is a valid IP",2);
}
return;
}
if($ACT == 'login' && !$this->is_allowed($allowed, $ip)) {
if($this->getConf('log')) {
$this->log($ip);
}
header("HTTP/1.0 403 Forbidden");
exit("403: Login Not Available
");
}
}
function is_allowed($allowed, $ip) {
static $cache = '';
if($cache) {
$allowed = $cache;
}
else {
$allowed = trim($allowed,', ');
$allowed = preg_quote($allowed);
$allowed=str_replace(array(' ', ','), array("",'|'),$allowed);
$cache = $allowed;
}
if(!$allowed ) return false; // if allowed string is empty then all ips are allowed
if( preg_match("/" . $allowed . "/", $ip) ) {
return true;
}
return false;
}
function log($ip) {
$log = metaFN('abortlogin:aborted_ip','.log');
io_saveFile($log,"$ip\n",1);
}
}
?>