From 2f842992283f7cf71f3c7b2159e6eda61ec202e2 Mon Sep 17 00:00:00 2001 From: Christophe Nowicki Date: Wed, 1 Sep 2004 15:01:59 +0000 Subject: PHP IdP Sample : - setup system is working - user management (add, delete, etc ...) - sso login in progress --- php/Attic/examples/sample-idp/setup.php | 478 ++++++++++++++++++++++++++++++++ 1 file changed, 478 insertions(+) create mode 100644 php/Attic/examples/sample-idp/setup.php (limited to 'php/Attic/examples/sample-idp/setup.php') diff --git a/php/Attic/examples/sample-idp/setup.php b/php/Attic/examples/sample-idp/setup.php new file mode 100644 index 00000000..306aa854 --- /dev/null +++ b/php/Attic/examples/sample-idp/setup.php @@ -0,0 +1,478 @@ + + * + * 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 + */ +?> + +The Lasso Extension is not available
"; + print "Please check your PHP extensions
"; + print "You can get more informations about Lasso at
"; + print "http://lasso.entrouvert.org/

"; + exit(); + } + } + + /* + * This callback function is called by array_walk and + * add an service provider to the identity provider. + */ + function add_service_provider(&$item, $key, $server) + { + print "
$key : "; + + $ret = $server->addProvider($item['metadata'], $item['public_key'], $item['ca']); + + /*if ($ret != TRUE) + { + print "Failed"; + break; + } + else */ + print "OK"; + } + + function write_config_inc($config) + { + $config_ser = serialize($config); + $filename = "config.inc"; + + if ($fd = fopen($filename, "w")) + { + fwrite($fd, $config_ser); + fclose($fd); + return TRUE; + } + return FALSE; + } + + require_once 'DB.php'; + + # default config + if (!file_exists('config.inc')) + { + $cwd = getcwd(); + $config = array( + 'dsn' => "pgsql://idp:idp@localhost/idp", + 'server_dump_filename' => "lasso_server_dump.xml", + 'idp-metadata' => "/home/cnowicki/mcvs/lasso/tests/data/idp1-la/metadata.xml", + 'idp-public_key' => "/home/cnowicki/mcvs/lasso/tests/data/idp1-la/public-key.pem", + 'idp-private_key' => "/home/cnowicki/mcvs/lasso/tests/data/idp1-la/private-key-raw.pem", + 'idp-ca' => "/home/cnowicki/mcvs/lasso/tests/data/idp1-la/certificate.pem", + 'sp' => array( + 'sp1' => array( + 'metadata' => "/home/cnowicki/mcvs/lasso/tests/data/sp1-la/metadata.xml", + 'public_key' => "/home/cnowicki/mcvs/lasso/tests/data/sp1-la/public-key.pem", + 'ca' => "/home/cnowicki/mcvs/lasso/tests/data/ca1-la/certificate.pem"), + 'sp2' => array( + 'metadata' => "/home/cnowicki/mcvs/lasso/tests/data/sp2-la/metadata.xml", + 'public_key' => "/home/cnowicki/mcvs/lasso/tests/data/sp2-la/public-key.pem", + 'ca' => "/home/cnowicki/mcvs/lasso/tests/data/ca1-la/certificate.pem") + )); + + $config_ser = serialize($config); + + if (!write_config_inc($config)) + die("Could not write default config file"); + } + else + { + $config = unserialize(file_get_contents('config.inc')); + } + + $keys = array_keys($_POST); + + $to_del = preg_grep('/delete_(\w)/', $keys); + + if (!empty($to_del)) + { + $keys = array_values($to_del); + foreach($keys as $key) + { + $name = substr($key, 7); + unset($config['sp'][$name]); + write_config_inc($config); + } + } + + $to_update = preg_grep('/update_(\w)/', $keys); + + if (!empty($to_update)) + { + $keys = array_values($to_update); + foreach($keys as $key) + { + $name = substr($key, 7); + $config['sp'][$name]['metadata'] = $_POST['sp^'.$name.'^metadata']; + $config['sp'][$name]['public_key'] = $_POST['sp^'.$name.'^public_key']; + $config['sp'][$name]['ca'] = $_POST['sp^'.$name.'^ca']; + write_config_inc($config); + } + } + + + if (array_key_exists('new', $_POST)) + { + $form = array('sp' => 'Name', + 'metadata' => 'Metadata', + 'public_key' => 'Public Key', + 'ca' => 'Certificate'); + + foreach ($form as $input => $name) + if (empty($_POST[$input])) + die("Field $name is empty"); + + $config['sp'][$_POST['sp']] = array( + 'metadata' => $_POST['metadata'], + 'public_key' => $_POST['public_key'], + 'ca' => $_POST['ca']); + + write_config_inc($config); + } + + if (array_key_exists('setup', $_POST)) + { + ob_start(); + + $setup = FALSE; + + print "Lasso Identity Provider Setup
"; + + unset($_POST['setup'], $_POST['metadata'], $_POST['public_key'], $_POST['ca'], $_POST['sp']); + + $sps = array_values(preg_grep("/sp\^/", array_keys($_POST))); + + + $_POST['sp'] = array(); + + foreach ($sps as $sp) { + list($null, $name, $type) = split("\^", $sp, 3); + $_POST['sp'][$name][$type] = $_POST[$sp]; + unset($_POST[$sp]); + } + + $diff = array_diff($_POST, $config); + + foreach($diff as $key => $value) { + $config[$key] = $value; + } + + print "Check Data base : "; + + $db = &DB::connect($config['dsn']); + + if (DB::isError($db)) { + die("Failed (" . $db->getMessage() . ")"); + } + else + print "OK"; + + print "
Create sequence 'user_id_seq' : "; + + $query = "DROP SEQUENCE user_id_seq"; + $res =& $db->query($query); + + $query = "CREATE SEQUENCE user_id_seq"; + $res =& $db->query($query); + if (DB::isError($res)) + die($res->getMessage()); + + print "OK"; + + print "
Create table 'users' : "; + $query = "DROP TABLE users CASCADE"; + $res =& $db->query($query); + + $query = "CREATE TABLE users ( + user_id varchar(100) primary key, + username varchar(255), + password varchar(255), + user_dump text, + session_dump text)"; + $res =& $db->query($query); + if (DB::isError($res)) + die($res->getMessage()); + + print "OK"; + + print "
Create table 'nameidentifiers' : "; + + $query = "DROP TABLE nameidentifiers CASCADE"; + $res =& $db->query($query); + + $query = "CREATE TABLE nameidentifiers ( + name_identifier varchar(100) primary key, + user_id varchar(100), + FOREIGN KEY (user_id) REFERENCES users (user_id))"; + $res =& $db->query($query); + if (DB::isError($res)) + die($res->getMessage()); + + print "OK"; + + print "
Create table 'assertions' : "; + $query = "DROP TABLE assertions CASCADE"; + $res =& $db->query($query); + + $query = "CREATE TABLE assertions ( + assertion text, + response_dump text)"; + + $res =& $db->query($query); + if (DB::isError($res)) + die($res->getMessage()); + + print "OK"; + + $db->disconnect(); + + // Check if IdP files does exists + + $keys = array_keys($config); + $files = preg_grep("/idp/", $keys); + + foreach($files as $file) + { + print "
Check file " . $config[$file] . " : "; + if (!file_exists($config[$file])) + { + die("Failed (file does not exist)"); + } + else + print "OK"; + } + + + foreach($config['sp'] as $key) + { + foreach ($key as $file) + { + print "
Check file " . $file . " : "; + if (!file_exists($file)) + { + die("Failed (file does not exist)"); + } + else + print "OK"; + + } + } + + lasso_init(); + + print "
Create Server : "; + + $server = new LassoServer($config['idp-metadata'], + $config['idp-public_key'], $config['idp-private_key'], + $config['idp-ca'], lassoSignatureMethodRsaSha1); + + if (empty($server)) + { + die("Failed"); + } + else + print "OK"; + + + print "
Add Service Provider(s) :"; + + array_walk($config['sp'], 'add_service_provider', $server); + + print "
Write XML Server Dump : "; + + $dump = $server->dump(); + + if (($fd = fopen($config['server_dump_filename'], "w"))) + { + fwrite($fd, $dump); + fclose($fd); + print "OK"; + } + else + die("Failed"); + + lasso_shutdown(); + + print "
Save configuration file : "; + + + # Save configuration file + $config_ser = serialize($config); + if (($fd = fopen("config.inc", "w"))) + { + fwrite($fd, $config_ser); + fclose($fd); + print "OK"; + } + else + { + print("Failed"); + break; + } + $setup = TRUE; + } + ob_start(); +?> + + +Setup script for Lasso (Liberty Alliance Single Sign On) + + + + + + + + + + + + + +Setup script for Lasso (Liberty Alliance Single Sign On) + + + +
+ +

Lasso Identity Provider Setup

+

+ + + + + + + + +
Database Configuration
DSN (Data Source Name) :' maxlength='100'>Help
Server XML Dump:' maxlength='100'> 
+

+
+

+ + + + + + + + + + + + + + + + + + + + + +
Identity Provider
Metadata'> 
Public Key'> 
Private Key'> 
Certificate'> 
+

+ +
+ $name) + { +?> + + + + + + + + + + + + + + + + + + +
Service Provider
Metadata'> 
Public Key'> 
Certificate'> 
+ + +
+ + +

+ +

+ + + + + + + + + + + + + + + + + + + + + + + +
Add a new Service Provider
Name 
Metadata 
Public Key 
Certificate 
+ +
+

+
+

+ +

+
+ + + -- cgit