<?php
/*********************************************************************
*
* Pure PHP radius class, WWW Authentication file to be required
*
* This file must be required before displaying any protected page.
* This file should be prepended automatically using the
* PHP auto_prepend_file directive in a .htaccess file.
*
*
* LICENCE
*
* Copyright (c) 2008, SysCo systèmes de communication sa
* SysCo (tm) is a trademark of SysCo systèmes de communication sa
* (http://www.sysco.ch/)
* All rights reserved.
*
* This file is part of the Pure PHP radius class
*
* Pure PHP radius class is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version.
*
* Pure PHP radius class is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with Pure PHP radius class.
* If not, see <http://www.gnu.org/licenses/>.
*
*
* @author: SysCo/al
* @since CreationDate: 2008-01-06
* @copyright (c) 2008 by SysCo systèmes de communication sa
* @version $LastChangedRevision: 1.0 $
* @version $LastChangedDate: 2008-01-07 $
* @version $LastChangedBy: SysCo/al $
* @link $HeadURL: radius.www.authenticate.php $
* @link http://developer.sysco.ch/php/
* @link developer@sysco.ch
* Language: PHP 4.0.7 or higher
*
*
* Usage
*
* require_once("radius.www.authenticate.php");
* echo "User <strong>".$_SERVER['PHP_AUTH_USER']."</strong> authenticated.";
*
*
* External file needed
*
* radius.class.php
*
*
* External file created
*
* none.
*
*
* Change Log
*
* 2008-01-07 1.0 SysCo/al Initial release
*
*********************************************************************/
require_once('radius.class.php');
function authenticate_and_cache($ip_radius_server, $shared_secret, $username, $password, $timeout = 900)
{
$result = FALSE;
$cache_unique_id = (isset($_SESSION["authentication_unique_id"])?$_SESSION["authentication_unique_id"]:'');
if ('' != $cache_unique_id)
{
$cache_timestamp = $_SESSION[$cache_unique_id."_authentication_timestamp"];
$cache_remote_addr = $_SESSION[$cache_unique_id."_authentication_remote_addr"];
$cache_username = $_SESSION[$cache_unique_id."_authentication_username"];
}
if ((0 == $cache_timestamp) ||
(time() > ($cache_timestamp + $timeout)) ||
($cache_remote_addr != $_SERVER['REMOTE_ADDR']) ||
($cache_username != $username))
{
$radius = new Radius($ip_radius_server, $shared_secret);
$radius->SetDebugMode($php_debug_mode);
$result = $radius->AccessRequest($username, $password);
if (TRUE == $result)
{
if ('' == $cache_unique_id)
{
$cache_unique_id = md5(uniqid(rand(), true));
}
$_SESSION["authentication_unique_id"] = $cache_unique_id;
$_SESSION[$cache_unique_id."_authentication_timestamp"] = time();
$_SESSION[$cache_unique_id."_authentication_remote_addr"] = $_SERVER['REMOTE_ADDR'];
$_SESSION[$cache_unique_id."_authentication_username"] = $username;
}
else
{
$_SESSION["authentication_unique_id"] = '';
}
}
else
{
$_SESSION[$cache_unique_id."_authentication_timestamp"] = time();
$result = TRUE;
}
return $result;
}
// Start session if not already done
if ('' == session_id())
{
session_start();
}
$php_auth_user = $_SERVER['PHP_AUTH_USER'];
$php_auth_pw = $_SERVER['PHP_AUTH_PW'];
$php_auth_realm = (isset($custom_auth_realm)?$custom_auth_realm:$_SERVER["SERVER_NAME"]);
$php_auth_timeout = (isset($custom_auth_timeout)?$custom_auth_timeout:(15*60));
$php_ip_radius_server = (isset($custom_ip_radius_server)?$custom_ip_radius_server:'');
$php_shared_secret = (isset($custom_shared_secret)?$custom_shared_secret:'');
$php_debug_mode = (isset($custom_debug_mode)?(TRUE === $custom_debug_mode):FALSE);
if (('' == $php_auth_user) || (!authenticate_and_cache($php_ip_radius_server, $php_shared_secret, $php_auth_user, $php_auth_pw, $php_auth_timeout)))
{
header("HTTP/1.0 401 Unauthorized");
header("WWW-Authenticate: Basic realm=\"".$php_auth_realm."\"");
echo "<html>";
echo "<head><title>401 Unauthorized access</title></head>";
echo "<body>";
echo "<h1>401 Unauthorized access</h1>";
echo "<br />";
echo "You must login using your username and your password.";
echo "</body>";
echo "</html>";
exit;
}
?>
|