Files
DomFramework/authparams.php

99 lines
3.0 KiB
PHP

<?php
/** DomFramework
@package domframework
@author Dominique Fournier <dominique@fournier38.fr> */
/** Takes the email and the password of the user */
class authparams
{
/** The email of the user when provided */
public $email = null;
/** The password of the user when provided */
public $password = null;
/** Parse the different authentication processes to found the email/password
* of the user.
* If non is found, return "anonymous", "anonymous"
* @param array|null $authprocesses The authentication process to use
*/
public function __construct ($authprocesses=array("session","post"))
{
if (php_sapi_name () === "cli")
{
$this->email = "cli";
$this->password = "";
}
else
{
foreach ($authprocesses as $authprocess)
{
try
{
$res = $this->$authprocess();
$this->email = $res["email"];
$this->password = $res["password"];
break;
}
catch (\Exception $e)
{
$this->email = "anonymous";
$this->password = "anonymous";
}
}
}
}
/** Get information from $POST variables */
public function post()
{
if (!isset ($_POST["email"]) || !isset ($_POST["password"]))
throw new \Exception ("No POST provided", 401);
return array ("email"=>trim ($_POST["email"]),
"password"=>$_POST["password"]);
}
/** Get information from previous recorded session */
public function session()
{
if (!isset ($_SESSION))
throw new \Exception ("No session previously opened", 401);
if (!isset ($_SESSION["domframework"]["auth"]["email"]) ||
!isset ($_SESSION["domframework"]["auth"]["password"]))
throw new \Exception ("No previous email in session", 401);
return array ("email"=>$_SESSION["domframework"]["auth"]["email"],
"password"=>$_SESSION["domframework"]["auth"]["password"]);
}
/** Get information from a HTTP authentication */
public function http()
{
$realm = dgettext("domframework",
"Restricted access");
if (!isset($_SERVER['PHP_AUTH_USER']))
{
throw new \Exception ("No user defined in HTTP header", 401);
//header("WWW-Authenticate: Basic realm=\"$realm\"");
//header("HTTP/1.0 401 Unauthorized");
//die ($realm);
}
else
{
if (! array_key_exists ("PHP_AUTH_PW", $_SERVER))
$_SERVER["PHP_AUTH_PW"] = null;
return array ("email"=>trim ($_SERVER["PHP_AUTH_USER"]),
"password"=>$_SERVER["PHP_AUTH_PW"]);
}
}
/** Get the information from a shibboleth provider */
public function shibboleth ()
{
if (! isset ($_SERVER["Shib-Session-ID"]))
throw new \Exception ("No Shibboleth information available", 401);
if (! isset ($_SERVER["mail"]))
throw new \Exception ("No Shibboleth email provided", 401);
return array ("email"=>$_SERVER["mail"],
"password"=>"NONE IN SHIBBOLETH");
}
}