* @copyright 2005 Janrain, Inc. * @license http://www.gnu.org/copyleft/lesser.html LGPL */ /** * Data. */ $store_types = array("Filesystem" => "Auth_OpenID_FileStore", "MySQL" => "Auth_OpenID_MySQLStore", "PostgreSQL" => "Auth_OpenID_PostgreSQLStore", "SQLite" => "Auth_OpenID_SQLiteStore"); /** * Main. */ $messages = array(); session_start(); init_session(); if (!check_session()) { render_form(); } else { print generate_config(); } /** * Functions. */ function check_url($url) { $p = parse_url($url); if ($p === false) { return false; } if (!array_key_exists('host', $p)) { return false; } return true; } function build_url() { $port = (($_SERVER['SERVER_PORT'] == 80) ? null : $_SERVER['SERVER_PORT']); $parts = explode("/", $_SERVER['SERVER_PROTOCOL']); $scheme = strtolower($parts[0]); if ($port) { return sprintf("%s://%s:%s%s/server.php", $scheme, $_SERVER['SERVER_NAME'], $port, dirname($_SERVER['PHP_SELF'])); } else { return sprintf("%s://%s%s/server.php", $scheme, $_SERVER['SERVER_NAME'], dirname($_SERVER['PHP_SELF'])); } } function check_session() { global $messages; if ($_GET && isset($_GET['clear'])) { session_destroy(); $_SESSION = array(); init_session(); return false; } if (isset($_GET['generate'])) { if (!$_SESSION['server_url']) { $messages[] = "Please enter a server URL."; } if (!$_SESSION['store_type']) { $messages[] = "No store type chosen."; } else { switch ($_SESSION['store_type']) { case "Filesystem": if (!$_SESSION['store_data']['fs_path']) { $messages[] = "Please specify a filesystem store path."; } break; case "SQLite": if (!$_SESSION['store_data']['sqlite_path']) { $messages[] = "Please specify a SQLite database path."; } break; default: if (!($_SESSION['store_data']['host'] && $_SESSION['store_data']['database'] && $_SESSION['store_data']['username'] && $_SESSION['store_data']['password'])) { $messages[] = "Please specify database connection details."; } } } } if ($_SESSION['store_type'] && $_SESSION['server_url'] && (parse_url($_SESSION['server_url']) !== false) && ((($_SESSION['store_type'] == 'Filesystem') && $_SESSION['store_data']['fs_path']) || (($_SESSION['store_type'] == 'SQLite') && $_SESSION['store_data']['sqlite_path']) || ($_SESSION['store_data']['host'] && $_SESSION['store_data']['username'] && $_SESSION['store_data']['database'] && $_SESSION['store_data']['password']))) { return true; } return false; } function render_form() { global $store_types, $fields, $messages; $basedir_msg = ""; if (ini_get('open_basedir')) { $basedir_msg = "
Note: Due to the ". "open_basedir setting, be sure to ". "choose a path in one of the following directories:"; } $sqlite_found = false; if (extension_loaded('sqlite') || @dl('sqlite.' . PHP_SHLIB_SUFFIX)) { $sqlite_found = true; } $mysql_found = false; if (extension_loaded('mysql') || @dl('mysql.' . PHP_SHLIB_SUFFIX)) { $mysql_found = true; } $pgsql_found = false; if (extension_loaded('pgsql') || @dl('pgsql.' . PHP_SHLIB_SUFFIX)) { $pgsql_found = true; } ?>

OpenID Example Server Configuration

"; foreach ($messages as $m) { print "
$m
"; } print ""; } ?>

This form will auto-generate an OpenID example server configuration for use with the OpenID server example.

The server URL is the URL that points to the "server.php" file.

If this package isn't installed in the PHP include path, the package's directory should be added. For example, if the package is in /home/me/PHP-OpenID/, you should enter that directory here.

The server needs to store OpenID information in a "store". The following store types are available on your PHP installation:

Store method:
>
>
> >

Your OpenID server will need to know what URLs it can authenticate. Supply URLs and passwords here.

OpenID URLs to serve:
"; foreach ($_SESSION['users'] as $url => $p) { print ""; } print "
OpenID URLPassword Hash
".$url."".$p."
"; } ?>
Add an OpenID:

Your OpenID server can be configured to trust a set of sites by default. Enter those here.

Trusted sites:
"; foreach ($_SESSION['trust_roots'] as $url) { print ""; } print "
Trusted site URL
".$url."
"; } ?>
Add a trusted site:

OpenID Example Server Configuration

Put the following text into config.php.

Back to form


/**
 * Set any extra include paths needed to use the library
 */
set_include_path(get_include_path() . PATH_SEPARATOR . "");


/**
 * The URL for the server.
 *
 * This is the location of server.php. For example:
 *
 * $server_url = 'http://example.com/~user/server.php';
 *
 * This must be a full URL.
 */
$server_url = "";

/**
 * Initialize an OpenID store
 *
 * @return object $store an instance of OpenID store (see the
 * documentation for how to create one)
 */
function getOpenIDStore()
{
    require_once 'Auth/OpenID/MySQLStore.php';
    require_once 'DB.php';

    $dsn = array(
                 'phptype'  => 'mysql',
                 'username' => '',
                 'password' => '',
                 'hostspec' => ''
                 );

    $db =& DB::connect($dsn);

    if (PEAR::isError($db)) {
        return null;
    }

    $db->query("USE ");
        
    return new Auth_OpenID_MySQLStore($db);
require_once 'Auth/OpenID/PostgreSQLStore.php';
    require_once 'DB.php';

    $dsn = array(
                 'phptype'  => 'pgsql',
                 'username' => '',
                 'password' => '',
                 'hostspec' => '',
                 'database' => ''
                 );

    $db =& DB::connect($dsn);

    if (PEAR::isError($db)) {
        return null;
    }

    return new Auth_OpenID_PostgreSQLStore($db);

}

/**
 * Users who are allowed to log in to this OpenID server.
 *
 * This is an array from URL to password hash. The URL must include
 * the proper OpenID server information in order to work with this
 * server.
 *
 * This must be set for the server to be usable. If it is not set, no
 * users will be able to log in.
 *
 * Example:
 * $openid_users = array(
 *                    'http://joe.example.com/' => sha1('foo')
 *                      )
 */
$openid_users = array( $hash) {
    $i++;
    print "\n    '$url' => '$hash'";
    if ($i < count($_SESSION['users'])) {
        print ",";
    }
}
?>

);

/**
 * Trusted sites is an array of trust roots.
 *
 * Sites in this list will not have to be approved by the user in
 * order to be used. It is OK to leave this value as-is.
 *
 * In a more robust server, this site should be a per-user setting.
 */
$trusted_sites = array(

);