summaryrefslogtreecommitdiffstats
path: root/php
diff options
context:
space:
mode:
authorChristophe Nowicki <cnowicki@easter-eggs.com>2004-09-20 16:01:08 +0000
committerChristophe Nowicki <cnowicki@easter-eggs.com>2004-09-20 16:01:08 +0000
commit63eda2109992301e9e033f66c5d6f4912b1d56f5 (patch)
treebbb39e8845160a1d3047af1ea058467def2dc4e7 /php
parent4909ede99e0a938abdbb27305989f61938783c23 (diff)
downloadlasso-63eda2109992301e9e033f66c5d6f4912b1d56f5.tar.gz
lasso-63eda2109992301e9e033f66c5d6f4912b1d56f5.tar.xz
lasso-63eda2109992301e9e033f66c5d6f4912b1d56f5.zip
PHP session are now stored in the database
A now table was added 'sso_session' for storing information about the PHP Session, it's possible to view logged user Logout destroy the PHP session in the IdP Bug : user can't sso twice ;(
Diffstat (limited to 'php')
-rw-r--r--php/Attic/examples/sample-idp/admin_user.php27
-rw-r--r--php/Attic/examples/sample-idp/index.php12
-rw-r--r--php/Attic/examples/sample-idp/login.php15
-rw-r--r--php/Attic/examples/sample-idp/logout.php8
-rw-r--r--php/Attic/examples/sample-idp/setup.php23
-rw-r--r--php/Attic/examples/sample-idp/singleSignOn.php210
-rw-r--r--php/Attic/examples/sample-idp/soapEndpoint.php364
-rw-r--r--php/Attic/examples/sample-idp/user_add.php10
-rw-r--r--php/Attic/examples/sample-sp/admin_user.php7
-rw-r--r--php/Attic/examples/sample-sp/assertionConsumer.php13
-rw-r--r--php/Attic/examples/sample-sp/index.php9
-rw-r--r--php/Attic/examples/sample-sp/log_view.php4
-rw-r--r--php/Attic/examples/sample-sp/login.php10
-rw-r--r--php/Attic/examples/sample-sp/logout.php46
-rw-r--r--php/Attic/examples/sample-sp/register.php20
-rw-r--r--php/Attic/examples/sample-sp/session.php86
-rw-r--r--php/Attic/examples/sample-sp/setup.php22
17 files changed, 570 insertions, 316 deletions
diff --git a/php/Attic/examples/sample-idp/admin_user.php b/php/Attic/examples/sample-idp/admin_user.php
index 0f0c31c3..172dabe9 100644
--- a/php/Attic/examples/sample-idp/admin_user.php
+++ b/php/Attic/examples/sample-idp/admin_user.php
@@ -24,13 +24,14 @@
require_once 'Log.php';
require_once 'DB.php';
+ require_once 'session.php';
$config = unserialize(file_get_contents('config.inc'));
$number_of_users = 5;
-
- $db = &DB::connect($config['dsn']);
+ // connect to the data base
+ $db = &DB::connect($config['dsn']);
if (DB::isError($db))
die("Could not connect to the database");
@@ -38,6 +39,10 @@
$conf['db'] = $db;
$logger = &Log::factory($config['log_handler'], 'log', $_SERVER['PHP_SELF'], $conf);
+ // session handler
+ session_set_save_handler("open_session", "close_session",
+ "read_session", "write_session", "destroy_session", "gc_session");
+
// Show XML dump
if (!empty($_GET['dump']) && !empty($_GET['type']))
{
@@ -179,8 +184,14 @@
if ($count > $number_of_users)
echo "| <a href=\"$PHP_SELF?show_all=1\">Show All</a>";
}
+ if ($count)
+ {
+ ?>
+ | <a href="javascript:void(0)" onClick="ToggleAll();">Toggle All</a>
+ <?php
+ }
?>
- | <a href="javascript:void(0)" onClick="ToggleAll();">Toggle All</a></td>
+ </td>
<td align='right'><a href="javascript:openpopup('user_add.php')">add user</a></td>
</tr>
<tr align="center">
@@ -241,9 +252,10 @@
<td colspan="<?php echo $num_col; ?>" align='center'>
<?php
// get all federations for this user
- if (!empty($session_dump) && !empty($identity_dump))
+ if (!empty($identity_dump))
{
- $login->setSessionFromDump($session_dump);
+ if (!empty($session_dump))
+ $login->setSessionFromDump($session_dump);
$login->setIdentityFromDump($identity_dump);
$identity = $login->identity;
@@ -292,7 +304,6 @@
</body>
</html>
-<?php
- lasso_shutdown();
- $db->disconnect();
+<?php
+ lasso_shutdown();
?>
diff --git a/php/Attic/examples/sample-idp/index.php b/php/Attic/examples/sample-idp/index.php
index 2b14c010..79d6a318 100644
--- a/php/Attic/examples/sample-idp/index.php
+++ b/php/Attic/examples/sample-idp/index.php
@@ -23,6 +23,7 @@
*/
require_once 'DB.php';
+ require_once 'session.php';
if(!extension_loaded('lasso')) {
$ret = @dl('lasso.' . PHP_SHLIB_SUFFIX);
@@ -56,6 +57,10 @@ You can get more informations about <b>Lasso</b> at <br>
$db = &DB::connect($config['dsn']);
if (DB::isError($db))
die($db->getMessage());
+
+ // session handler
+ session_set_save_handler("open_session", "close_session",
+ "read_session", "write_session", "destroy_session", "gc_session");
session_start();
@@ -65,7 +70,7 @@ You can get more informations about <b>Lasso</b> at <br>
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
-<title>Lasso Service Provider Example</title>
+<title>Lasso Identity Provider Example</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" />
</head>
@@ -74,7 +79,7 @@ You can get more informations about <b>Lasso</b> at <br>
<b>Identity Provider Administration</b><br>
<a href="setup.php">Setup</a><br>
<a href="admin_user.php">Users Management</a><br>
- <a href="view_sessions.php">View Online Users</a>
+ <a href="view_session.php">View Online Users</a>
<?php if ($config['log_handler'] == 'sql') { ?>
<br><a href="log_view.php">View log</a>
<?php } ?>
@@ -129,6 +134,5 @@ You can get more informations about <b>Lasso</b> at <br>
</html>
<?php
- $db->disconnect();
lasso_shutdown();
- ?>
+?>
diff --git a/php/Attic/examples/sample-idp/login.php b/php/Attic/examples/sample-idp/login.php
index db24681e..3014ac20 100644
--- a/php/Attic/examples/sample-idp/login.php
+++ b/php/Attic/examples/sample-idp/login.php
@@ -25,8 +25,9 @@
require_once 'HTML/QuickForm.php';
require_once 'Log.php';
require_once 'DB.php';
+ require_once 'session.php';
- $config = unserialize(file_get_contents('config.inc'));
+ $config = unserialize(file_get_contents('config.inc'));
// connect to the data base
$db = &DB::connect($config['dsn']);
@@ -37,6 +38,10 @@
$conf['db'] = $db;
$logger = &Log::factory($config['log_handler'], 'log', $_SERVER['PHP_SELF'], $conf);
+ // session handler
+ session_set_save_handler("open_session", "close_session",
+ "read_session", "write_session", "destroy_session", "gc_session");
+
session_start();
/*
@@ -69,7 +74,7 @@
$logger->log("DB Error :" . $db->getMessage(), PEAR_LOG_CRIT);
$logger->log("DB Error :" . $db->getDebugInfo(), PEAR_LOG_DEBUG);
die("Internal Server Error");
- } send by
+ }
if ($res->numRows())
{
@@ -84,7 +89,6 @@
if (!isset($_SERVER['PHP_AUTH_USER']))
{
sendHTTPBasicAuth();
- $db->disconnect();
exit;
}
else
@@ -94,7 +98,6 @@
{
$logger->log("Authentication failure with login '".$form->exportValue('username')." password '". $form->exportValue('password') ."' IP " . $_SERVER['REMOTE_ADDR'], PEAR_LOG_WARNING);
sendHTTPBasicAuth();
- $db->disconnect();
exit;
}
else
@@ -122,8 +125,6 @@
$_SESSION['session_dump'] = $row[1];
} */
- $db->disconnect();
-
$url = 'index.php';
header("Request-URI: $url");
header("Content-Location: $url");
@@ -159,12 +160,10 @@
header("Request-URI: $url");
header("Content-Location: $url");
header("Location: $url\r\n\r\n");
- $db->disconnect();
exit;
}
else
$logger->log("Authentication failure with login '".$form->exportValue('username')." password '". $form->exportValue('password') ."' IP '" . $_SERVER['REMOTE_ADDR']."'", PEAR_LOG_WARNING);
- $db->disconnect();
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
diff --git a/php/Attic/examples/sample-idp/logout.php b/php/Attic/examples/sample-idp/logout.php
index 8b5681b3..bc742e52 100644
--- a/php/Attic/examples/sample-idp/logout.php
+++ b/php/Attic/examples/sample-idp/logout.php
@@ -24,6 +24,7 @@
require_once 'Log.php';
require_once 'DB.php';
+ require_once 'session.php';
$config = unserialize(file_get_contents('config.inc'));
@@ -36,11 +37,14 @@
$conf['db'] = $db;
$logger = &Log::factory($config['log_handler'], 'log', $_SERVER['PHP_SELF'], $conf);
+ // session handler
+ session_set_save_handler("open_session", "close_session",
+ "read_session", "write_session", "destroy_session", "gc_session");
+
session_start();
- # Destroy The PHP Session
+ // Destroy The PHP Session
$_SESSION = array();
-
session_destroy();
$url = "index.php";
diff --git a/php/Attic/examples/sample-idp/setup.php b/php/Attic/examples/sample-idp/setup.php
index eaa9fa88..5284f886 100644
--- a/php/Attic/examples/sample-idp/setup.php
+++ b/php/Attic/examples/sample-idp/setup.php
@@ -287,8 +287,23 @@
$query = "CREATE TABLE sessions (
id varchar(32) primary key,
- expiry integer,
- data text
+ lastupdate timestamp,
+ data text)";
+
+ $res =& $db->query($query);
+ if (DB::isError($res))
+ die($res->getMessage());
+
+ print "OK";
+
+ print "<br>Create table 'sso_sessions' : ";
+ $query = "DROP TABLE sso_sessions CASCADE";
+ $res =& $db->query($query);
+
+ $query = "CREATE TABLE sso_sessions (
+ name_identifier character varying(100),
+ session_id character varying(32),
+ ip integer
)";
$res =& $db->query($query);
@@ -300,7 +315,6 @@
$db->disconnect();
// Check if IdP files does exists
-
$keys = array_keys($config);
$files = preg_grep("/idp/", $keys);
@@ -551,7 +565,8 @@
<input type='submit' name='setup' value='setup'>
</p>
</form>
-<br>
+<p align='center'><a href='index.php'>Index</a>
+</p>
<p>Copyright &copy; 2004 Entr'ouvert</p>
</body>
</html>
diff --git a/php/Attic/examples/sample-idp/singleSignOn.php b/php/Attic/examples/sample-idp/singleSignOn.php
index 96dc50b2..b73d5515 100644
--- a/php/Attic/examples/sample-idp/singleSignOn.php
+++ b/php/Attic/examples/sample-idp/singleSignOn.php
@@ -25,6 +25,7 @@
require_once 'HTML/QuickForm.php';
require_once 'Log.php';
require_once 'DB.php';
+ require_once 'session.php';
$config = unserialize(file_get_contents('config.inc'));
@@ -37,6 +38,10 @@
$conf['db'] = $db;
$logger = &Log::factory($config['log_handler'], 'log', $_SERVER['PHP_SELF'], $conf);
+ // session handler
+ session_set_save_handler("open_session", "close_session",
+ "read_session", "write_session", "destroy_session", "gc_session");
+
session_start();
lasso_init();
@@ -51,7 +56,6 @@
if (!isset($_SERVER['PHP_AUTH_USER']))
{
sendHTTPBasicAuth();
- $db->disconnect();
exit;
}
else
@@ -76,15 +80,16 @@
$array = getIdentityDumpAndSessionDumpFromUserID($db, $user_id);
if (empty($array))
{
- $logger->log("User must no authenticate, but I don't find session and identity dump in the database", PEAR_LOG_CRIT);
+ $logger->log("User must no authenticate, but I don't find session and identity
+ dump in the database", PEAR_LOG_CRIT);
die("Could not get Identity and Session Dump");
}
$login->setIdentityFromDump($array['identity_dump']);
- $login->setSessionFromDump($array['session_dump']);
+ if (!empty($array['session_dump']))
+ $login->setSessionFromDump($array['session_dump']);
doneSingleSignOn($db, $login, $user_id);
- $db->disconnect();
exit;
}
@@ -92,22 +97,21 @@
if (!($user_id = authentificateUser($db, $_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW'])))
{
sendHTTPBasicAuth();
- $db->disconnect();
exit;
}
else
{
$array = getIdentityDumpAndSessionDumpFromUserID($db, $user_id);
- $is_first_sso = (empty($array) ? TRUE : FALSE);
+ $is_first_sso = (isset($array['identity_dump']) ? FALSE : TRUE);
+
+ /*if (!$is_first_sso)
+ $login->setIdentityFromDump($array['identity_dump']); */
+
+ if (!empty($array['session_dump']))
+ $login->setSessionFromDump($array['session_dump']);
- if (!$is_first_sso)
- {
- $login->setIdentityFromDump($array['identity_dump']);
- $login->setSessionFromDump($array['session_dump']);
- }
doneSingleSignOn($db, $login, $user_id, $is_first_sso);
}
- $db->disconnect();
}
exit;
}
@@ -147,15 +151,16 @@
global $logger;
$query = "UPDATE users SET identity_dump=".$db->quoteSmart($identity_dump);
- $query .= " WHERE user_id='$user_id'";
+ $query .= " WHERE user_id='$user_id'";
- $res =& $db->query($query);
- if (DB::isError($res))
+ $res =& $db->query($query);
+ if (DB::isError($res))
{
$logger->log("DB Error :" . $db->getMessage(), PEAR_LOG_CRIT);
$logger->log("DB Error :" . $db->getDebugInfo(), PEAR_LOG_DEBUG);
die("Internal Server Error");
}
+ $logger->log("Update user '$user_id' identity dump", PEAR_LOG_DEBUG);
}
/*
@@ -165,17 +170,17 @@
{
global $logger;
- $query = "UPDATE users SET session_dump=".$db->quoteSmart($session_dump);
- $query .= " WHERE user_id='$user_id'";
+ $query = "UPDATE users SET session_dump=".$db->quoteSmart($session_dump);
+ $query .= " WHERE user_id='$user_id'";
- $res =& $db->query($query);
+ $res =& $db->query($query);
if (DB::isError($res))
{
$logger->log("DB Error :" . $db->getMessage(), PEAR_LOG_CRIT);
$logger->log("DB Error :" . $db->getDebugInfo(), PEAR_LOG_DEBUG);
die("Internal Server Error");
}
-
+ $logger->log("Update user '$user_id' session dump", PEAR_LOG_DEBUG);
}
/*
@@ -183,27 +188,27 @@
*/
function saveAssertionArtifact($db, $artifact, $assertion)
{
- global $logger;
+ global $logger;
- $assertion_dump = $assertion->dump();
+ $assertion_dump = $assertion->dump();
- if (empty($assertion_dump))
- {
- $logger->log("assertion dump is empty", PEAR_LOG_ALERT);
+ if (empty($assertion_dump))
+ {
+ $logger->log("assertion dump is empty", PEAR_LOG_ALERT);
die("assertion dump is empty");
- }
+ }
- // Save assertion
- $query = "INSERT INTO assertions (assertion, response_dump, created) VALUES ";
- $query .= "('".$artifact."',".$db->quoteSmart($assertion_dump).", NOW())";
+ // Save assertion
+ $query = "INSERT INTO assertions (assertion, response_dump, created) VALUES ";
+ $query .= "('".$artifact."',".$db->quoteSmart($assertion_dump).", NOW())";
- $res =& $db->query($query);
- if (DB::isError($res))
- {
- $logger->log("DB Error :" . $db->getMessage(), PEAR_LOG_CRIT);
- $logger->log("DB Error :" . $db->getDebugInfo(), PEAR_LOG_DEBUG);
- die("Internal Server Error");
- }
+ $res =& $db->query($query);
+ if (DB::isError($res))
+ {
+ $logger->log("DB Error :" . $db->getMessage(), PEAR_LOG_CRIT);
+ $logger->log("DB Error :" . $db->getDebugInfo(), PEAR_LOG_DEBUG);
+ die("Internal Server Error");
+ }
}
/*
@@ -216,14 +221,14 @@
// Get session and identity dump if there are available
if (!empty($_SESSION['session_dump']))
{
- $logger->log("Update user's session dump", PEAR_LOG_DEBUG);
$login->setSessionFromDump($_SESSION['session_dump']);
+ $logger->log("Update user's session dump", PEAR_LOG_DEBUG);
}
if (!empty($_SESSION['identity_dump']))
{
- $logger->log("Update user's identity dump", PEAR_LOG_DEBUG);
$login->setIdentityFromDump($_SESSION['identity_dump']);
+ $logger->log("Update user's identity dump", PEAR_LOG_DEBUG);
}
}
@@ -277,10 +282,9 @@
*/
function getUserIDFromNameIdentifier($db, $nameidentifier)
{
- $query = "SELECT user_id FROM nameidentifiers WHERE name_identifier='$nameidentifier'";
- // echo $query;
+ $query = "SELECT user_id FROM nameidentifiers WHERE name_identifier='$nameidentifier'";
- $res =& $db->query($query);
+ $res =& $db->query($query);
if (DB::isError($res))
{
$logger->log("DB Error :" . $db->getMessage(), PEAR_LOG_CRIT);
@@ -288,12 +292,12 @@
die($res->getMessage());
}
- // UserID not found
- if (!$res->numRows())
- return (0);
+ // UserID not found
+ if (!$res->numRows())
+ return (0);
- $row = $res->fetchRow();
- return ($row[0]);
+ $row = $res->fetchRow();
+ return ($row[0]);
}
/*
@@ -301,20 +305,18 @@
*/
function getIdentityDumpAndSessionDumpFromUserID($db, $user_id)
{
- // User is authentificated
- $query = "SELECT identity_dump,session_dump FROM users WHERE identity_dump";
- $query .= " IS NOT NULL AND session_dump IS NOT NULL AND user_id='$user_id'";
+ $query = "SELECT identity_dump,session_dump FROM users WHERE user_id='$user_id'";
- $res =& $db->query($query);
- if (DB::isError($res))
+ $res =& $db->query($query);
+ if (DB::isError($res))
die($res->getMessage());
- if ($res->numRows())
- {
+ if ($res->numRows())
+ {
$row =& $res->fetchRow();
$ret = array("identity_dump" => $row[0], "session_dump" => $row[1]);
return ($ret);
- }
+ }
}
@@ -325,7 +327,7 @@
{
global $logger;
- $authenticationMethod =
+ $authenticationMethod =
(($_SERVER["HTTPS"] == 'on') ? lassoSamlAuthenticationMethodSecureRemotePassword : lassoSamlAuthenticationMethodPassword);
// reauth in session_cache_expire, default is 180 minutes
@@ -373,12 +375,30 @@
die("assertion Artifact is empty");
}
- saveAssertionArtifact($db, $login->assertionArtifact, $login->assertion);
+ saveAssertionArtifact($db, $login->assertionArtifact, $login->assertion);
+
+
+ // Save PHP Session ID in the sso_session table
+ $query = "INSERT INTO sso_sessions(name_identifier, session_id, ip)";
+ $query .= " VALUES('" . $login->nameIdentifier . "','" . session_id() . "','";
+ $query .= ip2long($_SERVER['REMOTE_ADDR']) . "')";
+
+ echo $query;
+
+ $res =& $db->query($query);
+ if (DB::isError($res))
+ {
+ $logger->log("DB Error :" . $res->getMessage(), PEAR_LOG_CRIT);
+ $logger->log("DB Error :" . $res->getDebugInfo(), PEAR_LOG_DEBUG);
+ die($res->getMessage());
+ }
unset($_SESSION['login_dump']); // delete login_dump
- $_SESSION['identity_dump'] = $session->dump();
+ $_SESSION['identity_dump'] = $identity->dump();
$_SESSION['session_dump'] = $session->dump();
+ $logger->log("New Single Sign On Session started for user '$user_id'", PEAR_LOG_INFO);
+
switch($login->protocolProfile)
{
case lassoLoginProtocolProfileBrwsArt:
@@ -392,8 +412,8 @@
case lassoLoginProtocolProfileBrwsPost:
// TODO : lassoLoginProtocolProfileBrwsPost
default:
- $logger->log("Unknown Login Protocol Profile :" . $db->getMessage(), PEAR_LOG_CRIT);
- die("Unknown Login Protocol Profile");
+ $logger->log("Unknown Login Protocol Profile :" . $db->getMessage(), PEAR_LOG_CRIT);
+ die("Unknown Login Protocol Profile");
}
}
@@ -401,63 +421,63 @@
if ($form->validate())
{
if (empty($_SESSION['login_dump']))
- {
- $logger->log("Login dump is not registred in the session", PEAR_LOG_ERR);
- die("Login dump is not registred");
- }
+ {
+ $logger->log("Login dump is not registred in the session", PEAR_LOG_ERR);
+ die("Login dump is not registred");
+ }
$login = LassoLogin::newFromDump($server, $_SESSION['login_dump']);
if (($user_id = authentificateUser($db, $form->exportValue('username'),
$form->exportValue('password'))))
{
- $array = getIdentityDumpAndSessionDumpFromUserID($db, $user_id);
- $is_first_sso = (empty($array) ? TRUE : FALSE);
-
- if (!$is_first_sso)
- {
- $login->setIdentityFromDump($array['identity_dump']);
- $login->setSessionFromDump($array['session_dump']);
- }
- else
- $logger->log("First SingleSignOn for user '$user_id'", PEAR_LOG_INFO);
-
- doneSingleSignOn($db, $login, $user_id, $is_first_sso);
- $db->disconnect();
- exit;
- }
- else
- $logger->log("Authentication failure with login '".$form->exportValue('username')." password '". $form->exportValue('password') ."' IP '" . $_SERVER['REMOTE_ADDR']."'", PEAR_LOG_WARNING);
+ $array = getIdentityDumpAndSessionDumpFromUserID($db, $user_id);
+ $is_first_sso = (isset($array['identity_dump']) ? FALSE : TRUE);
+
+ if (!empty($array['identity_dump']))
+ $login->setIdentityFromDump($array['identity_dump']);
+
+ /* if (!$is_first_sso)
+ $login->setIdentityFromDump($array['identity_dump']);
+ else
+ $logger->log("First SingleSignOn for user '$user_id'", PEAR_LOG_INFO); */
+
+ if (!empty($array['session_dump']))
+ $login->setSessionFromDump($array['session_dump']);
+ doneSingleSignOn($db, $login, $user_id, $is_first_sso);
+ exit;
+ }
+ else
+ $logger->log("Authentication failure with login '". $form->exportValue('username')."
+ password '". $form->exportValue('password') ."' IP '" . $_SERVER['REMOTE_ADDR']."'", PEAR_LOG_WARNING);
}
else
{
$login = new LassoLogin($server);
- // init login
- updateDumpsFromSession($login);
- initFromAuthnRequest($login);
+ // init login
+ updateDumpsFromSession($login);
+ initFromAuthnRequest($login);
// User must NOT Authenticate with the IdP
if (!$login->mustAuthenticate())
{
- $user_id = getUserIDFromNameIdentifier($db, $login->nameIdentifier);
+ $user_id = getUserIDFromNameIdentifier($db, $login->nameIdentifier);
- if (!$user_id)
- {
- $logger->log("Could not get UserID from Name Identifier '" . $login->nameIdentifier . "'", PEAR_LOG_ERR);
- die("Internal Server Error");
- }
-
- doneSingleSignOn($db, $login, $user_id);
- $db->disconnect();
- exit;
+ if (!$user_id)
+ {
+ $logger->log("Could not get UserID from Name Identifier '" . $login->nameIdentifier . "'", PEAR_LOG_ERR);
+ die("Internal Server Error");
+ }
+ doneSingleSignOn($db, $login, $user_id);
+ exit;
}
else
{
- // register login dump in this session,
- // we can not transfert xml dump with hidden input
- $_SESSION['login_dump'] = $login->dump();
+ // register login dump in this session,
+ // we can not transfert xml dump with hidden input
+ $_SESSION['login_dump'] = $login->dump();
}
}
?>
diff --git a/php/Attic/examples/sample-idp/soapEndpoint.php b/php/Attic/examples/sample-idp/soapEndpoint.php
index 9172e9fd..16812432 100644
--- a/php/Attic/examples/sample-idp/soapEndpoint.php
+++ b/php/Attic/examples/sample-idp/soapEndpoint.php
@@ -23,6 +23,7 @@
*/
require_once 'Log.php';
require_once 'DB.php';
+ require_once 'session.php';
$config = unserialize(file_get_contents('config.inc'));
@@ -42,6 +43,12 @@
$conf['db'] = $db;
$logger = &Log::factory($config['log_handler'], 'log', $_SERVER['PHP_SELF'], $conf);
+ // session handler
+ session_set_save_handler("open_session", "close_session",
+ "read_session", "write_session", "destroy_session", "gc_session");
+
+ session_start();
+
if (empty($HTTP_RAW_POST_DATA))
{
$logger->log("HTTP_RAW_POST_DATA is empty", PEAR_LOG_WARNING);
@@ -57,7 +64,7 @@
{
// Login
case lassoRequestTypeLogin:
- $logger->log("SOAP Login Request from " . $_SERVER['REMOTE_ADDR'], PEAR_LOG_INFO);
+ $logger->log("SOAP Login Request from " . $_SERVER['REMOTE_ADDR'], PEAR_LOG_INFO);
$login = new LassoLogin($server);
$login->processRequestMsg($HTTP_RAW_POST_DATA);
@@ -69,10 +76,9 @@
if (DB::isError($res))
{
header("HTTP/1.0 500 Internal Server Error");
- $logger->log("DB Error :" . $db->getMessage(), PEAR_LOG_CRIT);
- $logger->log("DB Error :" . $db->getDebugInfo(), PEAR_LOG_DEBUG);
- exit;
-
+ $logger->log("DB Error :" . $db->getMessage(), PEAR_LOG_CRIT);
+ $logger->log("DB Error :" . $db->getDebugInfo(), PEAR_LOG_DEBUG);
+ exit;
}
// Good Artifact, send reponse_dump
@@ -85,203 +91,243 @@
if (DB::isError($res))
{
- header("HTTP/1.0 500 Internal Server Error");
- $logger->log("DB Error :" . $db->getMessage(), PEAR_LOG_CRIT);
- $logger->log("DB Error :" . $db->getDebugInfo(), PEAR_LOG_DEBUG);
- exit;
+ header("HTTP/1.0 500 Internal Server Error");
+ $logger->log("DB Error :" . $db->getMessage(), PEAR_LOG_CRIT);
+ $logger->log("DB Error :" . $db->getDebugInfo(), PEAR_LOG_DEBUG);
+ exit;
}
- $logger->log("Delete assertion '$artifact'", PEAR_LOG_DEBUG);
+ $logger->log("Delete assertion '$artifact'", PEAR_LOG_DEBUG);
$login->setAssertionFromDump($row[0]);
$login->buildResponseMsg();
header("Content-Length: " . strlen($login->msgBody) . "\r\n");
echo $login->msgBody;
- exit;
+
+ exit;
}
else
{
// Wrong Artifact
header("HTTP/1.0 403 Forbidden");
header("Content-Length: 0\r\n");
- $logger->log("Wrong artifact send by " . $_SERVER['REMOTE_ADDR'], PEAR_LOG_WARNING);
+ $logger->log("Wrong artifact send by " . $_SERVER['REMOTE_ADDR'], PEAR_LOG_WARNING);
exit;
}
break;
case lassoRequestTypeLogout:
- $logger->log("SOAP Logout Request from " . $_SERVER['REMOTE_ADDR'], PEAR_LOG_INFO);
+ $logger->log("SOAP Logout Request from " . $_SERVER['REMOTE_ADDR'], PEAR_LOG_INFO);
- // Logout
- $logout = new LassoLogout($server, lassoProviderTypeIdp);
- $logout->processRequestMsg($HTTP_RAW_POST_DATA, lassoHttpMethodSoap);
- $nameIdentifier = $logout->nameIdentifier;
+ // Logout
+ $logout = new LassoLogout($server, lassoProviderTypeIdp);
+ $logout->processRequestMsg($HTTP_RAW_POST_DATA, lassoHttpMethodSoap);
+ $nameIdentifier = $logout->nameIdentifier;
- // name identifier is empty, wrong request
- if (empty($nameIdentifier))
- {
- header("HTTP/1.0 500 Internal Server Error");
- $logger->log("Name Identifier is empty", PEAR_LOG_ERR);
- exit;
- }
+ // name identifier is empty, wrong request
+ if (empty($nameIdentifier))
+ {
+ header("HTTP/1.0 500 Internal Server Error");
+ $logger->log("Name Identifier is empty", PEAR_LOG_ERR);
+ exit;
+ }
- $logger->log("Name Identifier '$nameIdentifier'", PEAR_LOG_DEBUG);
+ $logger->log("Name Identifier '$nameIdentifier'", PEAR_LOG_DEBUG);
- $query = "SELECT user_id FROM nameidentifiers WHERE name_identifier='$nameIdentifier'";
+ $query = "SELECT user_id FROM nameidentifiers WHERE name_identifier='$nameIdentifier'";
- $res =& $db->query($query);
- if (DB::isError($res))
- {
- header("HTTP/1.0 500 Internal Server Error");
- $logger->log("DB Error :" . $db->getMessage(), PEAR_LOG_CRIT);
- $logger->log("DB Error :" . $db->getDebugInfo(), PEAR_LOG_DEBUG);
- exit;
- }
+ $res =& $db->query($query);
+ if (DB::isError($res))
+ {
+ header("HTTP/1.0 500 Internal Server Error");
+ $logger->log("DB Error :" . $db->getMessage(), PEAR_LOG_CRIT);
+ $logger->log("DB Error :" . $db->getDebugInfo(), PEAR_LOG_DEBUG);
+ exit;
+ }
- if (!$res->numRows())
- {
- header("HTTP/1.0 500 Internal Server Error");
- $logger->log("Could not find user_id matching nameidentifier '$nameIdentifier'", PEAR_LOG_ERR);
- exit;
- }
+ if (!$res->numRows())
+ {
+ header("HTTP/1.0 500 Internal Server Error");
+ $logger->log("Could not find user_id matching nameidentifier '$nameIdentifier'", PEAR_LOG_ERR);
+ exit;
+ }
- $row = $res->fetchRow();
- $user_id = $row[0];
-
- $logger->log("'$nameIdentifier' match UserID '$user_id'", PEAR_LOG_DEBUG);
+ $row = $res->fetchRow();
+ $user_id = $row[0];
- $query = "SELECT identity_dump,session_dump FROM users WHERE user_id='$user_id'";
+ $logger->log("Name Identifier '$nameIdentifier' match UserID '$user_id'", PEAR_LOG_DEBUG);
- $res =& $db->query($query);
- if (DB::isError($res))
- {
- header("HTTP/1.0 500 Internal Server Error");
- $logger->log("DB Error :" . $db->getMessage(), PEAR_LOG_CRIT);
- $logger->log("DB Error :" . $db->getDebugInfo(), PEAR_LOG_DEBUG);
- exit;
- }
+ $query = "SELECT identity_dump,session_dump FROM users WHERE user_id='$user_id'";
+
+ $res =& $db->query($query);
+ if (DB::isError($res))
+ {
+ header("HTTP/1.0 500 Internal Server Error");
+ $logger->log("DB Error :" . $db->getMessage(), PEAR_LOG_CRIT);
+ $logger->log("DB Error :" . $db->getDebugInfo(), PEAR_LOG_DEBUG);
+ exit;
+ }
- if (!$res->numRows())
- {
- header("HTTP/1.0 500 Internal Server Error");
- $logger->log("Could not fetch identity and session dump for user '$user_id'", PEAR_LOG_ERR);
- exit;
- }
+ if (!$res->numRows())
+ {
+ header("HTTP/1.0 500 Internal Server Error");
+ $logger->log("Could not fetch identity and session dump for user '$user_id'", PEAR_LOG_ERR);
+ exit;
+ }
- $row = $res->fetchRow();
- $user_dump = $row[0];
- $session_dump = $row[1];
+ $row = $res->fetchRow();
+ $user_dump = $row[0];
+ $session_dump = $row[1];
- $logout->setSessionFromDump($session_dump);
- $logout->setIdentityFromDump($user_dump);
+ $logout->setSessionFromDump($session_dump);
+ $logout->setIdentityFromDump($user_dump);
- // TODO : handle bad validate request
- $logout->validateRequest();
+ // TODO : handle bad validate request
+ $logout->validateRequest();
- if ($logout->isIdentityDirty)
- {
- $identity = $logout->identity;
- $query = "UPDATE users SET identity_dump=".$db->quoteSmart($identity->dump());
- $query .= " WHERE user_id='$user_id'";
+ if ($logout->isIdentityDirty)
+ {
+ $identity = $logout->identity;
+ $query = "UPDATE users SET identity_dump=".$db->quoteSmart($identity->dump());
+ $query .= " WHERE user_id='$user_id'";
+ $logger->log("ici3", PEAR_LOG_DEBUG);
- $res =& $db->query($query);
- if (DB::isError($res))
- {
- header("HTTP/1.0 500 Internal Server Error");
- $logger->log("DB Error :" . $db->getMessage(), PEAR_LOG_CRIT);
- $logger->log("DB Error :" . $db->getDebugInfo(), PEAR_LOG_DEBUG);
- exit;
- }
- $logger->log("Update identity dump for user '$user_id'", PEAR_LOG_DEBUG);
- }
-
- if ($logout->isSessionDirty)
- {
- $identity = $logout->session;
- $query = "UPDATE users SET session_dump=".$db->quoteSmart($session->dump());
- $query .= " WHERE user_id='$user_id'";
+ $res =& $db->query($query);
+ if (DB::isError($res))
+ {
+ header("HTTP/1.0 500 Internal Server Error");
+ $logger->log("DB Error :" . $db->getMessage(), PEAR_LOG_CRIT);
+ $logger->log("DB Error :" . $db->getDebugInfo(), PEAR_LOG_DEBUG);
+ exit;
+ }
+ $logger->log("Update identity dump for user '$user_id'", PEAR_LOG_DEBUG);
+ }
- $res =& $db->query($query);
- if (DB::isError($res))
- {
- header("HTTP/1.0 500 Internal Server Error");
- $logger->log("DB Error :" . $db->getMessage(), PEAR_LOG_CRIT);
- $logger->log("DB Error :" . $db->getDebugInfo(), PEAR_LOG_DEBUG);
- exit;
- }
- $logger->log("Update session dump for user '$user_id'", PEAR_LOG_DEBUG);
- }
+ if ($logout->isSessionDirty)
+ {
+ $session = $logout->session;
+ $query = "UPDATE users SET session_dump=".$db->quoteSmart($session->dump());
+ $query .= " WHERE user_id='$user_id'";
+
+ $res =& $db->query($query);
+ if (DB::isError($res))
+ {
+ header("HTTP/1.0 500 Internal Server Error");
+ $logger->log("DB Error :" . $db->getMessage(), PEAR_LOG_CRIT);
+ $logger->log("DB Error :" . $db->getDebugInfo(), PEAR_LOG_DEBUG);
+ exit;
+ }
+ $logger->log("Update session dump for user '$user_id'", PEAR_LOG_DEBUG);
+ }
- // TODO : try multiple sp logout
- while(($providerID = $logout->getNextProviderId()))
- {
- $logout->initRequest($providerID, lassoHttpMethodAny); // FIXME
- $logout->buildRequestMsg();
- $url = parse_url($logout->msgUrl);
+ // TODO : try multiple sp logout
+ while(($providerID = $logout->getNextProviderId()))
+ {
+ $logout->initRequest($providerID, lassoHttpMethodAny); // FIXME
+ $logout->buildRequestMsg();
+ $url = parse_url($logout->msgUrl);
- $logger->log("Send SOAP Logout Request to '$providerID' for user '$user_id'", PEAR_LOG_INFO);
+ $logger->log("Send SOAP Logout Request to '$providerID' for user '$user_id'", PEAR_LOG_INFO);
- $soap = sprintf("POST %s HTTP/1.1\r\nHost: %s:%d\r\nContent-Length: %d\r\nContent-Type: text/xml\r\n\r\n%s\r\n",
- $url['path'], $url['host'], $url['port'], strlen($logout->msgBody), $logout->msgBody);
-
- $fp = fsockopen("ssl://" . $url['host'], $url['port'], $errno, $errstr, 30);
- if (!$fp)
- {
- $logger->log("Could not send SOAP Logout Request to '$providerID' for user '$user_id' : $errstr ($errno)", PEAR_LOG_WARN);
- continue;
- }
- fwrite($fp, $soap);
- $ret = fgets($fp);
+ $soap = sprintf("POST %s HTTP/1.1\r\nHost: %s:%d\r\nContent-Length: %d\r\nContent-Type: text/xml\r\n\r\n%s\r\n",
+ $url['path'], $url['host'], $url['port'], strlen($logout->msgBody), $logout->msgBody);
+ $logger->log('Send SOAP Request to '. $url['host'] . ":" .$url['port']. $url['path'], PEAR_LOG_INFO);
+ $logger->log('SOAP Request : ' . $soap, PEAR_LOG_DEBUG);
+
+ $fp = fsockopen("ssl://" . $url['host'], $url['port'], $errno, $errstr, 30);
+ if (!$fp)
+ {
+ $logger->log("Could not send SOAP Logout Request to '$providerID'
+ for user '$user_id' : $errstr ($errno)", PEAR_LOG_WARN);
+ continue;
+ }
+ fwrite($fp, $soap);
- // header
- do $header .= fread($fp, 1); while (!preg_match('/\\r\\n\\r\\n$/',$header));
-
- // chunked encoding
- if (preg_match('/Transfer\\-Encoding:\\s+chunked\\r\\n/',$header))
- {
- do {
- $byte = '';
- $chunk_size = '';
-
- do {
- $chunk_size .= $byte;
- $byte = fread($fp, 1);
- } while ($byte != "\\r");
-
- fread($fp, 1);
- $chunk_size = hexdec($chunk_size);
- $response .= fread($fp, $chunk_size);
- fread($fp, 2);
- } while ($chunk_size);
- }
- else
- {
- if (preg_match('/Content\\-Length:\\s+([0-9]+)\\r\\n/', $header, $matches))
- $response = fread($fp, $matches[1]);
- else
- while (!feof($fp)) $response .= fread($fp, 1024);
- }
- fclose($fp);
-
- if (!preg_match("/^HTTP\/1\\.. 200/i", $header))
- {
- $logger->log("Logout faild for user '$user_id' on '$providerID'", PEAR_LOG_WARN);
- continue;
- }
- $logout->processResponseMsg($response, lassoHttpMethodSoap);
- }
+ // header
+ do $header .= fread($fp, 1); while (!preg_match('/\\r\\n\\r\\n$/',$header));
+
+ // chunked encoding
+ if (preg_match('/Transfer\\-Encoding:\\s+chunked\\r\\n/',$header))
+ {
+ do {
+ $byte = '';
+ $chunk_size = '';
+ do {
+ $chunk_size .= $byte;
+ $byte = fread($fp, 1);
+ } while ($byte != "\\r");
+ fread($fp, 1);
+ $chunk_size = hexdec($chunk_size);
+ $response .= fread($fp, $chunk_size);
+ fread($fp, 2);
+ } while ($chunk_size);
+ }
+ else
+ {
+ if (preg_match('/Content\\-Length:\\s+([0-9]+)\\r\\n/', $header, $matches))
+ $response = fread($fp, $matches[1]);
+ else
+ while (!feof($fp)) $response .= fread($fp, 1024);
+ }
+ fclose($fp);
+ $logger->log('SOAP Response Header : ' . $header, PEAR_LOG_DEBUG);
+ $logger->log('SOAP Response Body : ' . $response, PEAR_LOG_DEBUG);
+
+ if (!preg_match("/^HTTP\/1\\.. 200/i", $header))
+ {
+ $logger->log("Logout faild for user '$user_id' on '$providerID'", PEAR_LOG_WARN);
+ continue;
+ }
+ $logout->processResponseMsg($response, lassoHttpMethodSoap);
+ }
+
- $logout->buildResponseMsg();
- header("Content-Length: " . strlen($logout->msgBody) . "\r\n");
- echo $logout->msgBody;
- $logger->log("User '$user_id' logged out", PEAR_LOG_INFO);
- break;
+ $logout->buildResponseMsg();
+ header("Content-Length: " . strlen($logout->msgBody) . "\r\n");
+ echo $logout->msgBody;
+
+
+ // Get PHP session ID
+ $query = "SELECT session_id FROM sso_sessions WHERE name_identifier='$nameIdentifier'";
+ $res =& $db->query($query);
+ if (DB::isError($res))
+ {
+ header("HTTP/1.0 500 Internal Server Error");
+ $logger->log("DB Error :" . $db->getMessage(), PEAR_LOG_CRIT);
+ $logger->log("DB Error :" . $db->getDebugInfo(), PEAR_LOG_DEBUG);
+ exit;
+ }
+ $row = $res->fetchRow();
+ $session_id = $row[0];
+
+ $logger->log("Name Identifier '$nameIdentifier' match PHP Session ID '$session_id'", PEAR_LOG_DEBUG);
+
+ session_id($session_id);
+
+ // Destroy The PHP Session
+ $_SESSION = array();
+ session_destroy();
+
+ // Delete SSO Session from table 'sso_sessions'
+ $query = "DELETE FROM sso_sessions WHERE name_identifier='$nameIdentifier'";
+ $res =& $db->query($query);
+ if (DB::isError($res))
+ {
+ header("HTTP/1.0 500 Internal Server Error");
+ $logger->log("DB Error :" . $db->getMessage(), PEAR_LOG_CRIT);
+ $logger->log("DB Error :" . $db->getDebugInfo(), PEAR_LOG_DEBUG);
+ exit;
+ }
+ $logger->log("Destroy PHP Session '$session_id'", PEAR_LOG_DEBUG);
+
+ $logger->log("User '$user_id' is logged out", PEAR_LOG_INFO);
+ break;
case lassoRequestTypeDefederation:
default:
- header("HTTP/1.0 500 Internal Server Error");
- $logger->log("Unknown or unsupported SOAP request", PEAR_LOG_CRIT);
+ header("HTTP/1.0 500 Internal Server Error");
+ $logger->log("Unknown or unsupported SOAP request", PEAR_LOG_CRIT);
}
lasso_shutdown();
diff --git a/php/Attic/examples/sample-idp/user_add.php b/php/Attic/examples/sample-idp/user_add.php
index ce451431..a93fbf2b 100644
--- a/php/Attic/examples/sample-idp/user_add.php
+++ b/php/Attic/examples/sample-idp/user_add.php
@@ -25,6 +25,7 @@
require_once 'HTML/QuickForm.php';
require_once 'Log.php';
require_once 'DB.php';
+ require_once 'session.php';
$config = unserialize(file_get_contents('config.inc'));
@@ -33,6 +34,10 @@
if (DB::isError($db))
die("Could not connect to the database");
+ // session handler
+ session_set_save_handler("open_session", "close_session",
+ "read_session", "write_session", "destroy_session", "gc_session");
+
// create logger
$conf['db'] = $db;
$logger = &Log::factory($config['log_handler'], 'log', $_SERVER['PHP_SELF'], $conf);
@@ -57,13 +62,12 @@
$res =& $db->query($query);
if (DB::isError($res))
{
- $logger->log("DB Error :" . $db->getMessage(), PEAR_LOG_ERR);
- $logger->log("DB Error :" . $db->getDebugInfo(), PEAR_LOG_DEBUG);
+ $logger->log("DB Error :" . $res->getMessage(), PEAR_LOG_ERR);
+ $logger->log("DB Error :" . $res->getDebugInfo(), PEAR_LOG_DEBUG);
die("username exist!");
}
$logger->log("Create User '" . $form->exportValue('username') . "'", PEAR_LOG_NOTICE);
- $db->disconnect();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
diff --git a/php/Attic/examples/sample-sp/admin_user.php b/php/Attic/examples/sample-sp/admin_user.php
index 82d828bd..30efe3c6 100644
--- a/php/Attic/examples/sample-sp/admin_user.php
+++ b/php/Attic/examples/sample-sp/admin_user.php
@@ -153,6 +153,13 @@
</tfoot>
</table>
+<br>
+<p align='center'><a href='index.php'>Index</a>
+</p>
+
+<br>
+<p>Copyright &copy; 2004 Entr'ouvert</p>
+
</body>
</html>
diff --git a/php/Attic/examples/sample-sp/assertionConsumer.php b/php/Attic/examples/sample-sp/assertionConsumer.php
index 85d67556..727c2c0f 100644
--- a/php/Attic/examples/sample-sp/assertionConsumer.php
+++ b/php/Attic/examples/sample-sp/assertionConsumer.php
@@ -24,16 +24,16 @@
require_once 'Log.php';
require_once 'DB.php';
-
+ require_once 'session.php';
$config = unserialize(file_get_contents('config.inc'));
if (!$_GET['SAMLart']) {
exit(1);
}
-
+
+ // connect to the data base
$db = &DB::connect($config['dsn']);
-
if (DB::isError($db))
die($db->getMessage());
@@ -41,6 +41,10 @@
$conf['db'] = $db;
$logger = &Log::factory($config['log_handler'], 'log', $_SERVER['PHP_SELF'], $conf);
+ // session handler
+ session_set_save_handler("open_session", "close_session",
+ "read_session", "write_session", "destroy_session", "gc_session");
+
session_start();
lasso_init();
@@ -158,7 +162,7 @@
}
else
{
- // New User
+ // New User
$login->acceptSso();
$identity = $login->identity;
@@ -227,7 +231,6 @@
header("Request-URI: $url");
header("Content-Location: $url");
header("Location: $url\n\n");
- $db->disconnect();
lasso_shutdown();
exit();
?>
diff --git a/php/Attic/examples/sample-sp/index.php b/php/Attic/examples/sample-sp/index.php
index 05d16e54..62c5faef 100644
--- a/php/Attic/examples/sample-sp/index.php
+++ b/php/Attic/examples/sample-sp/index.php
@@ -22,8 +22,8 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
- require_once 'HTTP/Session.php';
require_once 'DB.php';
+ require_once 'session.php';
if(!extension_loaded('lasso')) {
$ret = @dl('lasso.' . PHP_SHLIB_SUFFIX);
@@ -57,7 +57,11 @@ You can get more informations about <b>Lasso</b> at <br>
$db = &DB::connect($config['dsn']);
if (DB::isError($db))
die($db->getMessage());
-
+
+ // session handler
+ session_set_save_handler("open_session", "close_session",
+ "read_session", "write_session", "destroy_session", "gc_session");
+
session_start();
lasso_init();
@@ -166,5 +170,4 @@ You can get more informations about <b>Lasso</b> at <br>
</html>
<?php
lasso_shutdown();
- $db->disconnect();
?>
diff --git a/php/Attic/examples/sample-sp/log_view.php b/php/Attic/examples/sample-sp/log_view.php
index 68acc458..43384da4 100644
--- a/php/Attic/examples/sample-sp/log_view.php
+++ b/php/Attic/examples/sample-sp/log_view.php
@@ -1,6 +1,6 @@
<?php
/*
- * Identity Provider Example -- View log
+ * Service Provider Example -- View log
*
* Copyright (C) 2004 Entr'ouvert
* http://lasso.entrouvert.org
@@ -65,7 +65,7 @@
<html>
<head>
<head>
- <title>Lasso Identity Provider Example : View Logs</title>
+ <title>Lasso Service Provider Example : View Logs</title>
</head>
<body>
<br>
diff --git a/php/Attic/examples/sample-sp/login.php b/php/Attic/examples/sample-sp/login.php
index c857e5cd..55e55d5e 100644
--- a/php/Attic/examples/sample-sp/login.php
+++ b/php/Attic/examples/sample-sp/login.php
@@ -24,9 +24,19 @@
require_once 'Log.php';
require_once 'DB.php';
+ require_once 'session.php';
$config = unserialize(file_get_contents('config.inc'));
+ // connect to the data base
+ $db = &DB::connect($config['dsn']);
+ if (DB::isError($db))
+ die($db->getMessage());
+
+ // session handler
+ session_set_save_handler("open_session", "close_session",
+ "read_session", "write_session", "destroy_session", "gc_session");
+
session_start();
lasso_init();
diff --git a/php/Attic/examples/sample-sp/logout.php b/php/Attic/examples/sample-sp/logout.php
index 68f15fea..64c1214b 100644
--- a/php/Attic/examples/sample-sp/logout.php
+++ b/php/Attic/examples/sample-sp/logout.php
@@ -22,27 +22,37 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+ require_once 'Log.php';
+ require_once 'DB.php';
+ require_once 'session.php';
+
$config = unserialize(file_get_contents('config.inc'));
- require_once 'DB.php';
+ // connect to the data base
+ $db = &DB::connect($config['dsn']);
+ if (DB::isError($db))
+ die($db->getMessage());
+
+ // create logger
+ $conf['db'] = $db;
+ $logger = &Log::factory($config['log_handler'], 'log', $_SERVER['PHP_SELF'], $conf);
+
+ // session handler
+ session_set_save_handler("open_session", "close_session",
+ "read_session", "write_session", "destroy_session", "gc_session");
session_start();
if (!isset($_SESSION["nameidentifier"])) {
- print "User is not logged in";
+ $logger->log("Not logged in user '" . $_SERVER['REMOTE_ADDR'] , "', try to register.", PEAR_LOG_WARN);
exit(0);
- }
+ }
lasso_init();
- $db = &DB::connect($config['dsn']);
-
- if (DB::isError($db))
- die($db->getMessage());
-
$server_dump = file_get_contents($config['server_dump_filename']);
- $server = LassoServer::newfromdump($server_dump);
+ $server = LassoServer::newFromDump($server_dump);
$logout = new LassoLogout($server, lassoProviderTypeSp);
@@ -52,7 +62,11 @@
$res =& $db->query($query);
if (DB::isError($res))
- print $res->getMessage(). "\n";
+ {
+ $logger->log("DB Error :" . $db->getMessage(), PEAR_LOG_CRIT);
+ $logger->log("DB Error :" . $db->getDebugInfo(), PEAR_LOG_DEBUG);
+ die($db->getMessage());
+ }
$row = $res->fetchRow();
@@ -69,10 +83,11 @@
$url['path'], $url['host'], $url['port'],
strlen($logout->msgBody), $logout->msgBody);
+ $logger->log('Send SOAP Request to '. $url['host'] . ":" .$url['port']. $url['path'], PEAR_LOG_INFO);
+ $logger->log('SOAP Request : ' . $soap, PEAR_LOG_DEBUG);
# PHP 4.3.0 with OpenSSL support required
$fp = fsockopen("ssl://" . $url['host'], $url['port'], $errno, $errstr, 30) or die($errstr ($errno));
-
socket_set_timeout($fp, 10);
fwrite($fp, $soap);
@@ -106,16 +121,19 @@
}
fclose($fp);
+ $logger->log('SOAP Response Header : ' . $header, PEAR_LOG_DEBUG);
+ $logger->log('SOAP Response Body : ' . $response, PEAR_LOG_DEBUG);
+
if (!preg_match("/^HTTP\/1\\.. 200/i", $header)) {
+ $logger->log("User is already logged out" . $_SERVER['REMOTE_ADDR'], PEAR_LOG_WARN);
die("User is already logged out");
}
# Destroy The PHP Session
$_SESSION = array();
-
+ $logger->log("Destroy session '".session_id()."' for user '".$_SESSION['username']."'", PEAR_LOG_INFO);
session_destroy();
-
- $db->disconnect();
+
lasso_shutdown();
$url = "index.php";
diff --git a/php/Attic/examples/sample-sp/register.php b/php/Attic/examples/sample-sp/register.php
index 6c1b0152..26c468f5 100644
--- a/php/Attic/examples/sample-sp/register.php
+++ b/php/Attic/examples/sample-sp/register.php
@@ -22,9 +22,20 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
- $config = unserialize(file_get_contents('config.inc'));
-
require_once 'DB.php';
+ require_once 'session.php';
+
+ $config = unserialize(file_get_contents('config.inc'));
+
+ // connect to the data base
+ $db = &DB::connect($config['dsn']);
+ if (DB::isError($db))
+ die($db->getMessage());
+
+ // session handler
+ session_set_save_handler("open_session", "close_session",
+ "read_session", "write_session", "destroy_session", "gc_session");
+
session_start();
if (!isset($_SESSION["nameidentifier"])) {
@@ -34,11 +45,6 @@
switch($_POST['action']) {
case "submit":
- $db = &DB::connect($config['dsn']);
-
- if (DB::isError($db))
- die($db->getMessage());
-
// Update User info
$query = "UPDATE users SET first_name=" . $db->quoteSmart($_POST['first_name']);
$query .= ",last_name=" . $db->quoteSmart($_POST['last_name']);
diff --git a/php/Attic/examples/sample-sp/session.php b/php/Attic/examples/sample-sp/session.php
new file mode 100644
index 00000000..45bf99c7
--- /dev/null
+++ b/php/Attic/examples/sample-sp/session.php
@@ -0,0 +1,86 @@
+<?php
+/*
+ * Pear::DB session handler
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Authors: Christophe Nowicki <cnowicki@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+
+function open_session ($save_path, $session_name) {
+ return(true);
+}
+
+function close_session() {
+ global $db;
+ $db->disconnect();
+ return(true);
+}
+
+function read_session ($id) {
+ global $db;
+
+ $query = "SELECT * FROM sessions WHERE id='$id'";
+ $res =& $db->query($query);
+ if (DB::isError($res))
+ {
+ exit;
+ die($res->getMessage());
+ }
+
+ if ($res->numRows() == 1)
+ {
+ $row = $res->fetchRow();
+ return ($row[2]);
+ } else {
+ return("");
+ }
+}
+
+function write_session ($id, $sess_data) {
+ global $db;
+
+ $query = "DELETE FROM sessions WHERE id='$id'";
+ $res =& $db->query($query);
+ if (DB::isError($res))
+ die($res->getMessage());
+
+ $query = "INSERT INTO sessions(id, lastupdate, data) VALUES('$id', NOW(),";
+ $query .= $db->quoteSmart($sess_data).")";
+ $res =& $db->query($query);
+ if (DB::isError($res))
+ die($res->getMessage());
+}
+
+function destroy_session ($id) {
+ global $db;
+
+ $query = "DELETE FROM sessions WHERE id='$id'";
+ $res =& $db->query($query);
+ if (DB::isError($res))
+ die($res->getMessage());
+
+ return true;
+}
+
+function gc_session ($maxlifetime) {
+ return true;
+}
+
+?>
diff --git a/php/Attic/examples/sample-sp/setup.php b/php/Attic/examples/sample-sp/setup.php
index c6c44228..2886c88a 100644
--- a/php/Attic/examples/sample-sp/setup.php
+++ b/php/Attic/examples/sample-sp/setup.php
@@ -167,8 +167,22 @@
$query = "CREATE TABLE sessions (
id varchar(32) primary key,
- expiry integer,
- data text
+ lastupdate timestamp,
+ data text)";
+
+ $res =& $db->query($query);
+ if (DB::isError($res))
+ die($res->getMessage());
+
+ print "OK";
+
+ print "<br>Create table 'sso_sessions' : ";
+ $query = "DROP TABLE sso_sessions CASCADE";
+ $res =& $db->query($query);
+
+ $query = "CREATE TABLE sso_sessions (
+ name_identifier character varying(100),
+ session_id character varying(32)
)";
$res =& $db->query($query);
@@ -177,6 +191,7 @@
print "OK";
+
$db->disconnect();
$keys = array_keys($config);
@@ -375,6 +390,9 @@
</table>
<input type='hidden' name='action' value='setup'>
</form>
+<p align='center'><a href='index.php'>Index</a>
+</p>
+<p>Copyright &copy; 2004 Entr'ouvert</p>
</body>
</html>
<?php