<?php
// PukiWiki - Yet another WikiWikiWeb clone.
// $Id: xxxxx.inc.php,v 1.1 2012/01/22 00:00:00 acompass.net Exp $
//
// xxxxx plugin - Authenticate for Administrator.
// FileName xxxxx.inc.php and Plugin name plugin_xxxxx_action must be renamed. 
// Usage: http://SERVER_NAME/pukiwiki/?plugin=xxxxx
// expan.php is needed for authentication.
// Set $auth_users in pukiwiki.ini.php.
// Set $auth_ips in expan.php(or pukiwiki.ini.php) as below, if required.
//     username must be the same as username in $auth_users
//$auth_ips = array(
//        IP Address     => Username
//       '192.168.1.100' => 'foo',
//       '192.168.1.101' => 'bar'
//);

function plugin_xxxxx_action()   // <= Rename
{
	global $auth_users;
	global $auth_ips;

	$remote_ip = $_SERVER["REMOTE_ADDR"];
	$remote_host = gethostbyaddr($_SERVER["REMOTE_ADDR"]);

	expan_log( 'IP', $remote_ip, 'host', $remote_host );
	$retval = basic_HTTP_auth();
	$userid = $retval[ 'userid' ];
	$passwd = $retval[ 'passwd' ];
	if ($userid == '' || $passwd == '' ) {
		if ($userid != '' ) {
			expan_log( 'User ID', $userid, 'No Password', $passwd );
		}
		if ($passwd != '' ) {
			expan_log( 'No User ID', ' ', 'Password', $passwd );
		}
		sleep(2);
		$retval = basic_HTTP_auth( TRUE );
		return FALSE;
	}

	if (count($auth_ips) !== 0 ) {
		$auth_user = $auth_ips[ $remote_ip ];
		if ( $auth_user == '' ) {
			expan_log( 'Invalid IP! userid', $userid, 'Password', $passwd );
			sleep(2);
			$retval = basic_HTTP_auth( TRUE );
			return FALSE;
		}
		if ( $auth_user !== $userid ) {
			expan_log( 'Invalid User ID ?', $userid, 'Password', $passwd );
			sleep(2);
			$retval = basic_HTTP_auth( TRUE );
			return FALSE;
		}
		$auth_passwd = $auth_users[ $userid ];
		if ( $auth_passwd == '' ) {
			expan_log( 'System Error', 'Missing User ID', '$auth_users', $userid );
			return FALSE;
		}
	} else {
		$auth_passwd = $auth_users[ $userid ];
		if ( $auth_passwd == '' ) {
			expan_log( 'Invalid User ID !', $userid, 'Password', $passwd );
			sleep(2);
			$retval = basic_HTTP_auth( TRUE );
			return FALSE;
		}
	}

	if (pkwk_hash_compute($passwd, $auth_passwd) === $auth_passwd) {
		$obj = new expan_session();
		$obj->set();
		$login_id = $obj->get();
		expan_log( 'UserID', $userid, 'password', $login_id );
		return;
	} else {
		expan_log( 'UserID', $userid, 'Invalid passwd !', $passwd );
		sleep(2);
		$retval = basic_HTTP_auth( TRUE );
		return FALSE;
	}
}

?>
