aboutsummaryrefslogtreecommitdiff
path: root/models/openid-php-openid-782224d/examples
diff options
context:
space:
mode:
Diffstat (limited to 'models/openid-php-openid-782224d/examples')
-rw-r--r--models/openid-php-openid-782224d/examples/README134
-rw-r--r--models/openid-php-openid-782224d/examples/consumer/common.php97
-rw-r--r--models/openid-php-openid-782224d/examples/consumer/finish_auth.php98
-rw-r--r--models/openid-php-openid-782224d/examples/consumer/index.php73
-rw-r--r--models/openid-php-openid-782224d/examples/consumer/try_auth.php83
-rw-r--r--models/openid-php-openid-782224d/examples/detect.php536
-rw-r--r--models/openid-php-openid-782224d/examples/discover.php100
-rw-r--r--models/openid-php-openid-782224d/examples/server/index.php5
-rw-r--r--models/openid-php-openid-782224d/examples/server/lib/actions.php164
-rw-r--r--models/openid-php-openid-782224d/examples/server/lib/common.php95
-rw-r--r--models/openid-php-openid-782224d/examples/server/lib/render.php114
-rw-r--r--models/openid-php-openid-782224d/examples/server/lib/render/about.php47
-rw-r--r--models/openid-php-openid-782224d/examples/server/lib/render/idpXrds.php32
-rw-r--r--models/openid-php-openid-782224d/examples/server/lib/render/idpage.php31
-rw-r--r--models/openid-php-openid-782224d/examples/server/lib/render/login.php65
-rw-r--r--models/openid-php-openid-782224d/examples/server/lib/render/trust.php56
-rw-r--r--models/openid-php-openid-782224d/examples/server/lib/render/userXrds.php34
-rw-r--r--models/openid-php-openid-782224d/examples/server/lib/session.php178
-rw-r--r--models/openid-php-openid-782224d/examples/server/openid-server.css74
-rw-r--r--models/openid-php-openid-782224d/examples/server/server.php48
-rw-r--r--models/openid-php-openid-782224d/examples/server/setup.php558
21 files changed, 2622 insertions, 0 deletions
diff --git a/models/openid-php-openid-782224d/examples/README b/models/openid-php-openid-782224d/examples/README
new file mode 100644
index 000000000..fd01ccbbd
--- /dev/null
+++ b/models/openid-php-openid-782224d/examples/README
@@ -0,0 +1,134 @@
+OpenID Example Code
+-------------------
+
+After you've installed this package (see ../README), you can use these
+example packages to get started. They'll show you what this package
+can do, and you can use them as the basis for your own OpenID support.
+
+consumer/: OpenID Example Consumer
+==================================
+
+NOTE: If you want to try the example consumer without installing this
+package, just make sure you add the package's 'Auth' directory to your
+PHP include path.
+
+To try the example consumer implementation, just copy the consumer/
+directory into a place on your web server and point your browser at
+the new directory.
+
+1. Check to be sure that /tmp is in your "open_basedir" configuration,
+ if open_basedir is being used to restrict PHP's file I/O. See
+ http://us2.php.net/features.safe-mode for more information. For
+ example, in your php.ini, change
+
+ open_basedir = "..."
+
+ to
+
+ open_basedir = "/tmp:..."
+
+ (If you really don't want to add /tmp to your open_basedir, you can
+ modify consumer/common.php and change $store_path so it doesn't
+ create the store directory in /tmp.)
+
+2. Copy or symlink the consumer/ directory into a part of your
+ webserver's docroot. For example, if your DocumentRoot is
+ /var/www/, do this:
+
+ # cd /var/www
+ # ln -s /path/to/PHP-OpenID-X.Y.Z/examples/consumer
+
+3. Navigate to http://www.example.com/consumer and enter an OpenID
+ into the form presented there and click "Verify".
+
+consumer/ Files
+===============
+
+The 'index.php' file will render a form and get you started. These
+are the example consumer files:
+
+ consumer/index.php - Renders a form so you can begin the OpenID auth
+process. The form submits the OpenID to try_auth.php.
+
+ consumer/try_auth.php - Starts the authentication with the OpenID
+server that manages your OpenID and redirects your browser to the
+server's login page. Instructs the server to return to
+finish_auth.php when you're done authenticating.
+
+ consumer/finish_auth.php - Finishes the authentication by checking
+the server's response. Tells you if the authentication was
+successful.
+
+ consumer/common.php - Includes the setup code you'll need to create
+a Consumer object and participate in an OpenID authentication.
+
+server/: OpenID Example Server
+==============================
+
+To try the example server, follow these steps:
+
+1. Copy or symlink the server/ directory into a part of your
+ webserver's docroot. For example, if your DocumentRoot is
+ /var/www/, do this:
+
+ # cd /var/www
+ # ln -s /path/to/PHP-OpenID-X.Y.Z/examples/server
+
+2. Navigate to the server example. You'll be redirected to
+ server/setup.php where you can choose some configuration options to
+ generate a configuration. Once finished, you can download a file
+ "config.php." Save that file in the example server directory.
+
+The example server has the following features:
+
+ - It serves its own identity pages, whose URLs are of the form
+
+ http://.../server/server.php/idpage?user=USERNAME
+
+ - It does not require passwords.
+
+ - It does not support a "trusted sites" page, as you pointed out.
+
+In general, the example server is NOT supposed to be treated as a
+fully-equiped OpenID server (i.e., with user accounts and other
+state). It is supposed to demonstrate how to write PHP applications
+that use the library.
+
+Upgrading from the 1.X.X example server
+=======================================
+
+The 2.X.X library's example server is different from the 1.X.X example
+server in the following ways:
+
+ - The new example server does not support authenticating arbitrary
+ URLs. It serves its own URLs. This makes it easier to set up and
+ test.
+
+ - The new example server does not support password authentication.
+ This makes it easier to set up and is not necessary for
+ illustrating the use of the library.
+
+ - The new example server does not have a "trusted sites" page.
+
+server/ Files
+=============
+
+These files make up the server example code:
+
+ config.php - The configuration file you'll need to customize to run
+the example server.
+
+ server.php - The PHP rendering script that takes care of handling
+server requests from both regular user agents and consumers.
+
+ lib/actions.php - Handles the various types of requests that the
+server supports.
+
+ lib/common.php - Supplies functions that wrap the OpenID API calls
+to make them easier to use.
+
+ lib/render.php - Miscellaneous page rendering code.
+
+ lib/session.php - Code to handle session data for user settings.
+
+ lib/render/*.php - Files for each page presented by the server.
diff --git a/models/openid-php-openid-782224d/examples/consumer/common.php b/models/openid-php-openid-782224d/examples/consumer/common.php
new file mode 100644
index 000000000..2f01ba0a6
--- /dev/null
+++ b/models/openid-php-openid-782224d/examples/consumer/common.php
@@ -0,0 +1,97 @@
+<?php
+
+$path_extra = dirname(dirname(dirname(__FILE__)));
+$path = ini_get('include_path');
+$path = $path_extra . PATH_SEPARATOR . $path;
+ini_set('include_path', $path);
+
+function displayError($message) {
+ $error = $message;
+ include 'index.php';
+ exit(0);
+}
+
+function doIncludes() {
+ /**
+ * Require the OpenID consumer code.
+ */
+ require_once "Auth/OpenID/Consumer.php";
+
+ /**
+ * Require the "file store" module, which we'll need to store
+ * OpenID information.
+ */
+ require_once "Auth/OpenID/FileStore.php";
+
+ /**
+ * Require the Simple Registration extension API.
+ */
+ require_once "Auth/OpenID/SReg.php";
+
+ /**
+ * Require the PAPE extension module.
+ */
+ require_once "Auth/OpenID/PAPE.php";
+}
+
+doIncludes();
+
+global $pape_policy_uris;
+$pape_policy_uris = array(
+ PAPE_AUTH_MULTI_FACTOR_PHYSICAL,
+ PAPE_AUTH_MULTI_FACTOR,
+ PAPE_AUTH_PHISHING_RESISTANT
+ );
+
+function &getStore() {
+ /**
+ * This is where the example will store its OpenID information.
+ * You should change this path if you want the example store to be
+ * created elsewhere. After you're done playing with the example
+ * script, you'll have to remove this directory manually.
+ */
+ $store_path = "/tmp/_php_consumer_test";
+
+ if (!file_exists($store_path) &&
+ !mkdir($store_path)) {
+ print "Could not create the FileStore directory '$store_path'. ".
+ " Please check the effective permissions.";
+ exit(0);
+ }
+
+ return new Auth_OpenID_FileStore($store_path);
+}
+
+function &getConsumer() {
+ /**
+ * Create a consumer object using the store object created
+ * earlier.
+ */
+ $store = getStore();
+ $consumer =& new Auth_OpenID_Consumer($store);
+ return $consumer;
+}
+
+function getScheme() {
+ $scheme = 'http';
+ if (isset($_SERVER['HTTPS']) and $_SERVER['HTTPS'] == 'on') {
+ $scheme .= 's';
+ }
+ return $scheme;
+}
+
+function getReturnTo() {
+ return sprintf("%s://%s:%s%s/finish_auth.php",
+ getScheme(), $_SERVER['SERVER_NAME'],
+ $_SERVER['SERVER_PORT'],
+ dirname($_SERVER['PHP_SELF']));
+}
+
+function getTrustRoot() {
+ return sprintf("%s://%s:%s%s/",
+ getScheme(), $_SERVER['SERVER_NAME'],
+ $_SERVER['SERVER_PORT'],
+ dirname($_SERVER['PHP_SELF']));
+}
+
+?> \ No newline at end of file
diff --git a/models/openid-php-openid-782224d/examples/consumer/finish_auth.php b/models/openid-php-openid-782224d/examples/consumer/finish_auth.php
new file mode 100644
index 000000000..b19a665cf
--- /dev/null
+++ b/models/openid-php-openid-782224d/examples/consumer/finish_auth.php
@@ -0,0 +1,98 @@
+<?php
+
+require_once "common.php";
+session_start();
+
+function escape($thing) {
+ return htmlentities($thing);
+}
+
+function run() {
+ $consumer = getConsumer();
+
+ // Complete the authentication process using the server's
+ // response.
+ $return_to = getReturnTo();
+ $response = $consumer->complete($return_to);
+
+ // Check the response status.
+ if ($response->status == Auth_OpenID_CANCEL) {
+ // This means the authentication was cancelled.
+ $msg = 'Verification cancelled.';
+ } else if ($response->status == Auth_OpenID_FAILURE) {
+ // Authentication failed; display the error message.
+ $msg = "OpenID authentication failed: " . $response->message;
+ } else if ($response->status == Auth_OpenID_SUCCESS) {
+ // This means the authentication succeeded; extract the
+ // identity URL and Simple Registration data (if it was
+ // returned).
+ $openid = $response->getDisplayIdentifier();
+ $esc_identity = escape($openid);
+
+ $success = sprintf('You have successfully verified ' .
+ '<a href="%s">%s</a> as your identity.',
+ $esc_identity, $esc_identity);
+
+ if ($response->endpoint->canonicalID) {
+ $escaped_canonicalID = escape($response->endpoint->canonicalID);
+ $success .= ' (XRI CanonicalID: '.$escaped_canonicalID.') ';
+ }
+
+ $sreg_resp = Auth_OpenID_SRegResponse::fromSuccessResponse($response);
+
+ $sreg = $sreg_resp->contents();
+
+ if (@$sreg['email']) {
+ $success .= " You also returned '".escape($sreg['email']).
+ "' as your email.";
+ }
+
+ if (@$sreg['nickname']) {
+ $success .= " Your nickname is '".escape($sreg['nickname']).
+ "'.";
+ }
+
+ if (@$sreg['fullname']) {
+ $success .= " Your fullname is '".escape($sreg['fullname']).
+ "'.";
+ }
+
+ $pape_resp = Auth_OpenID_PAPE_Response::fromSuccessResponse($response);
+
+ if ($pape_resp) {
+ if ($pape_resp->auth_policies) {
+ $success .= "<p>The following PAPE policies affected the authentication:</p><ul>";
+
+ foreach ($pape_resp->auth_policies as $uri) {
+ $escaped_uri = escape($uri);
+ $success .= "<li><tt>$escaped_uri</tt></li>";
+ }
+
+ $success .= "</ul>";
+ } else {
+ $success .= "<p>No PAPE policies affected the authentication.</p>";
+ }
+
+ if ($pape_resp->auth_age) {
+ $age = escape($pape_resp->auth_age);
+ $success .= "<p>The authentication age returned by the " .
+ "server is: <tt>".$age."</tt></p>";
+ }
+
+ if ($pape_resp->nist_auth_level) {
+ $auth_level = escape($pape_resp->nist_auth_level);
+ $success .= "<p>The NIST auth level returned by the " .
+ "server is: <tt>".$auth_level."</tt></p>";
+ }
+
+ } else {
+ $success .= "<p>No PAPE response was sent by the provider.</p>";
+ }
+ }
+
+ include 'index.php';
+}
+
+run();
+
+?> \ No newline at end of file
diff --git a/models/openid-php-openid-782224d/examples/consumer/index.php b/models/openid-php-openid-782224d/examples/consumer/index.php
new file mode 100644
index 000000000..1ff091125
--- /dev/null
+++ b/models/openid-php-openid-782224d/examples/consumer/index.php
@@ -0,0 +1,73 @@
+<?php
+require_once "common.php";
+
+global $pape_policy_uris;
+?>
+<html>
+ <head><title>PHP OpenID Authentication Example</title></head>
+ <style type="text/css">
+ * {
+ font-family: verdana,sans-serif;
+ }
+ body {
+ width: 50em;
+ margin: 1em;
+ }
+ div {
+ padding: .5em;
+ }
+ table {
+ margin: none;
+ padding: none;
+ }
+ .alert {
+ border: 1px solid #e7dc2b;
+ background: #fff888;
+ }
+ .success {
+ border: 1px solid #669966;
+ background: #88ff88;
+ }
+ .error {
+ border: 1px solid #ff0000;
+ background: #ffaaaa;
+ }
+ #verify-form {
+ border: 1px solid #777777;
+ background: #dddddd;
+ margin-top: 1em;
+ padding-bottom: 0em;
+ }
+ </style>
+ <body>
+ <h1>PHP OpenID Authentication Example</h1>
+ <p>
+ This example consumer uses the <a
+ href="http://github.com/openid/php-openid">PHP
+ OpenID</a> library. It just verifies that the URL that you enter
+ is your identity URL.
+ </p>
+
+ <?php if (isset($msg)) { print "<div class=\"alert\">$msg</div>"; } ?>
+ <?php if (isset($error)) { print "<div class=\"error\">$error</div>"; } ?>
+ <?php if (isset($success)) { print "<div class=\"success\">$success</div>"; } ?>
+
+ <div id="verify-form">
+ <form method="get" action="try_auth.php">
+ Identity&nbsp;URL:
+ <input type="hidden" name="action" value="verify" />
+ <input type="text" name="openid_identifier" value="" />
+
+ <p>Optionally, request these PAPE policies:</p>
+ <p>
+ <?php foreach ($pape_policy_uris as $i => $uri) {
+ print "<input type=\"checkbox\" name=\"policies[]\" value=\"$uri\" />";
+ print "$uri<br/>";
+ } ?>
+ </p>
+
+ <input type="submit" value="Verify" />
+ </form>
+ </div>
+ </body>
+</html>
diff --git a/models/openid-php-openid-782224d/examples/consumer/try_auth.php b/models/openid-php-openid-782224d/examples/consumer/try_auth.php
new file mode 100644
index 000000000..7efec7657
--- /dev/null
+++ b/models/openid-php-openid-782224d/examples/consumer/try_auth.php
@@ -0,0 +1,83 @@
+<?php
+
+require_once "common.php";
+session_start();
+
+function getOpenIDURL() {
+ // Render a default page if we got a submission without an openid
+ // value.
+ if (empty($_GET['openid_identifier'])) {
+ $error = "Expected an OpenID URL.";
+ include 'index.php';
+ exit(0);
+ }
+
+ return $_GET['openid_identifier'];
+}
+
+function run() {
+ $openid = getOpenIDURL();
+ $consumer = getConsumer();
+
+ // Begin the OpenID authentication process.
+ $auth_request = $consumer->begin($openid);
+
+ // No auth request means we can't begin OpenID.
+ if (!$auth_request) {
+ displayError("Authentication error; not a valid OpenID.");
+ }
+
+ $sreg_request = Auth_OpenID_SRegRequest::build(
+ // Required
+ array('nickname'),
+ // Optional
+ array('fullname', 'email'));
+
+ if ($sreg_request) {
+ $auth_request->addExtension($sreg_request);
+ }
+
+ $policy_uris = $_GET['policies'];
+
+ $pape_request = new Auth_OpenID_PAPE_Request($policy_uris);
+ if ($pape_request) {
+ $auth_request->addExtension($pape_request);
+ }
+
+ // Redirect the user to the OpenID server for authentication.
+ // Store the token for this authentication so we can verify the
+ // response.
+
+ // For OpenID 1, send a redirect. For OpenID 2, use a Javascript
+ // form to send a POST request to the server.
+ if ($auth_request->shouldSendRedirect()) {
+ $redirect_url = $auth_request->redirectURL(getTrustRoot(),
+ getReturnTo());
+
+ // If the redirect URL can't be built, display an error
+ // message.
+ if (Auth_OpenID::isFailure($redirect_url)) {
+ displayError("Could not redirect to server: " . $redirect_url->message);
+ } else {
+ // Send redirect.
+ header("Location: ".$redirect_url);
+ }
+ } else {
+ // Generate form markup and render it.
+ $form_id = 'openid_message';
+ $form_html = $auth_request->htmlMarkup(getTrustRoot(), getReturnTo(),
+ false, array('id' => $form_id));
+
+ // Display an error if the form markup couldn't be generated;
+ // otherwise, render the HTML.
+ if (Auth_OpenID::isFailure($form_html)) {
+ displayError("Could not redirect to server: " . $form_html->message);
+ } else {
+ print $form_html;
+ }
+ }
+}
+
+run();
+
+?> \ No newline at end of file
diff --git a/models/openid-php-openid-782224d/examples/detect.php b/models/openid-php-openid-782224d/examples/detect.php
new file mode 100644
index 000000000..947fe4c95
--- /dev/null
+++ b/models/openid-php-openid-782224d/examples/detect.php
@@ -0,0 +1,536 @@
+<?php
+
+$path_extra = dirname(dirname(__FILE__));
+$path = ini_get('include_path');
+$path = $path_extra . PATH_SEPARATOR . $path;
+ini_set('include_path', $path);
+
+define('IS_WINDOWS', strtoupper(substr(PHP_OS, 0, 3)) === 'WIN');
+
+class PlainText {
+ function start($title)
+ {
+ return '';
+ }
+
+ function tt($text)
+ {
+ return $text;
+ }
+
+ function link($href, $text=null)
+ {
+ if ($text) {
+ return $text . ' <' . $href . '>';
+ } else {
+ return $href;
+ }
+ }
+
+ function b($text)
+ {
+ return '*' . $text . '*';
+ }
+
+ function contentType()
+ {
+ return 'text/plain';
+ }
+
+ function p($text)
+ {
+ return wordwrap($text) . "\n\n";
+ }
+
+ function pre($text)
+ {
+ $out = '';
+ $lines = array_map('trim', explode("\n", $text));
+ foreach ($lines as $line) {
+ $out .= ' ' . $line . "\n";
+ }
+ $out .= "\n";
+ return $out;
+ }
+
+ function ol($items)
+ {
+ $out = '';
+ $c = 1;
+ foreach ($items as $item) {
+ $item = wordwrap($item, 72);
+ $lines = array_map('trim', explode("\n", $item));
+ $out .= $c . '. ' . $lines[0] . "\n";
+ unset($lines[0]);
+ foreach ($lines as $line) {
+ $out .= ' ' . $line . "\n";
+ }
+ $out .= "\n";
+ $c += 1;
+ }
+ return $out;
+ }
+
+ function h2($text)
+ {
+ return $this->h($text, 2);
+ }
+
+ function h1($text)
+ {
+ return $this->h($text, 1);
+ }
+
+ function h($text, $n)
+ {
+ $chars = '#=+-.';
+ $c = $chars[$n - 1];
+ return "\n" . $text . "\n" . str_repeat($c, strlen($text)) . "\n\n";
+ }
+
+ function end()
+ {
+ return '';
+ }
+}
+
+class HTML {
+ function start($title)
+ {
+ return '<html><head><title>' . $title . '</title>' .
+ $this->stylesheet().
+ '</head><body>' . "\n";
+ }
+
+ function stylesheet()
+ {
+ return "<style type='text/css'>\n".
+ "p {\n".
+ " width: 50em;\n".
+ "}\n".
+ '</style>';
+ }
+
+ function tt($text)
+ {
+ return '<code>' . $text . '</code>';
+ }
+
+ function contentType()
+ {
+ return 'text/html';
+ }
+
+ function b($text)
+ {
+ return '<strong>' . $text . '</strong>';
+ }
+
+ function p($text)
+ {
+ return '<p>' . wordwrap($text) . "</p>\n";
+ }
+
+ function pre($text)
+ {
+ return '<pre>' . $text . "</pre>\n";
+ }
+
+ function ol($items)
+ {
+ $out = '<ol>';
+ foreach ($items as $item) {
+ $out .= '<li>' . wordwrap($item) . "</li>\n";
+ }
+ $out .= "</ol>\n";
+ return $out;
+ }
+
+ function h($text, $n)
+ {
+ return "<h$n>$text</h$n>\n";
+ }
+
+ function h2($text)
+ {
+ return $this->h($text, 2);
+ }
+
+ function h1($text)
+ {
+ return $this->h($text, 1);
+ }
+
+ function link($href, $text=null)
+ {
+ return '<a href="' . $href . '">' . ($text ? $text : $href) . '</a>';
+ }
+
+ function end()
+ {
+ return "</body>\n</html>\n";
+ }
+}
+
+if (isset($_SERVER['REQUEST_METHOD'])) {
+ $r = new HTML();
+} else {
+ $r = new PlainText();
+}
+
+function detect_math($r, &$out)
+{
+ $out .= $r->h2('Math support');
+ $ext = Auth_OpenID_detectMathLibrary(Auth_OpenID_math_extensions());
+ if (!isset($ext['extension']) || !isset($ext['class'])) {
+ $out .= $r->p(
+ 'Your PHP installation does not include big integer math ' .
+ 'support. This support is required if you wish to run a ' .
+ 'secure OpenID server without using SSL.');
+ $out .= $r->p('To use this library, you have a few options:');
+
+ $gmp_lnk = $r->link('http://www.php.net/manual/en/ref.gmp.php', 'GMP');
+ $bc_lnk = $r->link('http://www.php.net/manual/en/ref.bc.php', 'bcmath');
+ $out .= $r->ol(array(
+ 'Install the ' . $gmp_lnk . ' PHP extension',
+ 'Install the ' . $bc_lnk . ' PHP extension',
+ 'If your site is low-security, call ' .
+ 'Auth_OpenID_setNoMathSupport(), defined in Auth/OpenID/BigMath.php. ',
+ 'The library will function, but ' .
+ 'the security of your OpenID server will depend on the ' .
+ 'security of the network links involved. If you are only ' .
+ 'using consumer support, you should still be able to operate ' .
+ 'securely when the users are communicating with a ' .
+ 'well-implemented server.'));
+ return false;
+ } else {
+ switch ($ext['extension']) {
+ case 'bcmath':
+ $out .= $r->p('Your PHP installation has bcmath support. This is ' .
+ 'adequate for small-scale use, but can be CPU-intensive. ' .
+ 'You may want to look into installing the GMP extension.');
+ $lnk = $r->link('http://www.php.net/manual/en/ref.gmp.php');
+ $out .= $r->p('See ' . $lnk .' for more information ' .
+ 'about the GMP extension.');
+ break;
+ case 'gmp':
+ $out .= $r->p('Your PHP installation has gmp support. Good.');
+ break;
+ default:
+ $class = $ext['class'];
+ $lib = new $class();
+ $one = $lib->init(1);
+ $two = $lib->add($one, $one);
+ $t = $lib->toString($two);
+ $out .= $r->p('Uh-oh. I do not know about the ' .
+ $ext['extension'] . ' extension!');
+ if ($t != '2') {
+ $out .= $r->p('It looks like it is broken. 1 + 1 = ' .
+ var_export($t, false));
+ return false;
+ } else {
+ $out .= $r->p('But it seems to be able to add one and one.');
+ }
+ }
+ return true; // Math library is OK
+ }
+}
+
+function detect_random($r, &$out)
+{
+ $out .= $r->h2('Cryptographic-quality randomness source');
+ if (Auth_OpenID_RAND_SOURCE === null) {
+ $out .= $r->p('Using (insecure) pseudorandom number source, because ' .
+ 'Auth_OpenID_RAND_SOURCE has been defined as null.');
+ return false;
+ }
+
+ $msg = 'The library will try to access ' . Auth_OpenID_RAND_SOURCE
+ . ' as a source of random data. ';
+
+ $numbytes = 6;
+
+ $f = @fopen(Auth_OpenID_RAND_SOURCE, 'r');
+ if ($f !== false) {
+ $data = fread($f, $numbytes);
+ $stat = fstat($f);
+ $size = $stat['size'];
+ fclose($f);
+ } else {
+ $data = null;
+ $size = true;
+ }
+
+ if ($f !== false) {
+ $dataok = (Auth_OpenID::bytes($data) == $numbytes);
+ $ok = $dataok && !$size;
+ $msg .= 'It seems to exist ';
+ if ($dataok) {
+ $msg .= 'and be readable. Here is some hex data: ' .
+ bin2hex($data) . '.';
+ } else {
+ $msg .= 'but reading data failed.';
+ }
+ if ($size) {
+ $msg .= ' This is a ' . $size . ' byte file. Unless you know ' .
+ 'what you are doing, it is likely that you are making a ' .
+ 'mistake by using a regular file as a randomness source.';
+ }
+ } else {
+ $msg .= Auth_OpenID_RAND_SOURCE .
+ ' could not be opened. This could be because of restrictions on' .
+ ' your PHP environment or that randomness source may not exist' .
+ ' on this platform.';
+ if (IS_WINDOWS) {
+ $msg .= ' You seem to be running Windows. This library does not' .
+ ' have access to a good source of randomness on Windows.';
+ }
+ $ok = false;
+ }
+
+ $out .= $r->p($msg);
+
+ if (!$ok) {
+ $out .= $r->p(
+ 'To set a source of randomness, define Auth_OpenID_RAND_SOURCE ' .
+ 'to the path to the randomness source. If your platform does ' .
+ 'not provide a secure randomness source, the library can' .
+ 'operate in pseudorandom mode, but it is then vulnerable to ' .
+ 'theoretical attacks. If you wish to operate in pseudorandom ' .
+ 'mode, define Auth_OpenID_RAND_SOURCE to null.');
+ $out .= $r->p('You are running on:');
+ $out .= $r->pre(php_uname());
+ $out .= $r->p('There does not seem to be an available source ' .
+ 'of randomness. On a Unix-like platform ' .
+ '(including MacOS X), try /dev/random and ' .
+ '/dev/urandom.');
+ }
+ return $ok;
+}
+
+function detect_stores($r, &$out)
+{
+ $out .= $r->h2('Data storage');
+
+ $found = array();
+ foreach (array('sqlite', 'mysql', 'pgsql') as $dbext) {
+ if (extension_loaded($dbext) || @dl($dbext . '.' . PHP_SHLIB_SUFFIX)) {
+ $found[] = $dbext;
+ }
+ }
+ if (count($found) == 0) {
+ $text = 'No SQL database support was found in this PHP ' .
+ 'installation. See the PHP manual if you need to ' .
+ 'use an SQL database.';
+ } else {
+ $text = 'Support was found for ';
+ if (count($found) == 1) {
+ $text .= $found[0] . '.';
+ } else {
+ $last = array_pop($found);
+ $text .= implode(', ', $found) . ' and ' . $last . '.';
+ }
+ $text = $r->b($text);
+ }
+ $text .= ' The library supports the MySQL, PostgreSQL, and SQLite ' .
+ 'database engines, as well as filesystem-based storage. In ' .
+ 'addition, PEAR DB is required to use databases.';
+ $out .= $r->p($text);
+
+ if (function_exists('posix_getpwuid') &&
+ function_exists('posix_geteuid')) {
+ $processUser = posix_getpwuid(posix_geteuid());
+ $web_user = $r->b($r->tt($processUser['name']));
+ } else {
+ $web_user = 'the PHP process';
+ }
+
+ if (in_array('sqlite', $found)) {
+ $out .= $r->p('If you are using SQLite, your database must be ' .
+ 'writable by ' . $web_user . ' and not available over' .
+ ' the web.');
+ }
+
+ $basedir_str = ini_get('open_basedir');
+ if (gettype($basedir_str) == 'string') {
+ $url = 'http://www.php.net/manual/en/features.safe-mode.php' .
+ '#ini.open-basedir';
+ $lnk = $r->link($url, 'open_basedir');
+ $out .= $r->p('If you are using a filesystem-based store or SQLite, ' .
+ 'be aware that ' . $lnk . ' is in effect. This means ' .
+ 'that your data will have to be stored in one of the ' .
+ 'following locations:');
+ $out .= $r->pre(var_export($basedir_str, true));
+ } else {
+ $out .= $r->p('The ' . $r->b($r->tt('open_basedir')) . ' configuration restriction ' .
+ 'is not in effect.');
+ }
+
+ $out .= $r->p('If you are using the filesystem store, your ' .
+ 'data directory must be readable and writable by ' .
+ $web_user . ' and not availabe over the Web.');
+ return true;
+}
+
+function detect_xml($r, &$out)
+{
+ global $__Auth_Yadis_xml_extensions;
+
+ $out .= $r->h2('XML Support');
+
+ // Try to get an XML extension.
+ $ext = Auth_Yadis_getXMLParser();
+
+ if ($ext !== null) {
+ $out .= $r->p('XML parsing support is present using the '.
+ $r->b(get_class($ext)).' interface.');
+ return true;
+ } else {
+ $out .= $r->p('XML parsing support is absent; please install one '.
+ 'of the following PHP extensions:');
+ foreach ($__Auth_Yadis_xml_extensions as $name => $cls) {
+ $out .= "<li>" . $r->b($name) . "</li>";
+ }
+ return false;
+ }
+}
+
+function detect_query_corruption($r, &$out)
+{
+ $out .= $r->h2('Query Corruption');
+ if ($_SERVER["QUERY_STRING"]!="test_query=a%26b")
+ {
+ $out.=$r->p("Your web server seems to corrupt queries. Received ".$_SERVER["QUERY_STRING"].", expected a=%26b. Check for mod_encoding.");
+ return false;
+ }
+ else
+ {
+ $out.=$r->p("Your web server does not corrupt queries. Good.");
+ return true;
+ }
+}
+
+function detect_fetcher($r, &$out)
+{
+ $out .= $r->h2('HTTP Fetching');
+
+ $result = @include 'Auth/Yadis/Yadis.php';
+
+ if (!$result) {
+ $out .= $r->p('Yadis code unavailable; could not test fetcher support.');
+ return false;
+ }
+
+ if (Auth_Yadis_Yadis::curlPresent()) {
+ $out .= $r->p('This PHP installation has support for libcurl. Good.');
+ } else {
+ $out .= $r->p('This PHP installation does not have support for ' .
+ 'libcurl. CURL is not required but is recommended. '.
+ 'The OpenID library will use an fsockopen()-based fetcher.');
+ $lnk = $r->link('http://us3.php.net/manual/en/ref.curl.php');
+ $out .= $r->p('See ' . $lnk . ' about enabling the libcurl support ' .
+ 'for PHP.');
+ }
+
+ $ok = true;
+ $fetcher = Auth_Yadis_Yadis::getHTTPFetcher();
+ $fetch_url = 'http://www.openidenabled.com/resources/php-fetch-test';
+ $expected_url = $fetch_url . '.txt';
+ $result = $fetcher->get($fetch_url);
+
+ if (isset($result)) {
+ $parts = array('An HTTP request was completed.');
+ // list ($code, $url, $data) = $result;
+ if ($result->status != '200' && $result->status != '206') {
+ $ok = false;
+ $parts[] = $r->b(
+ sprintf(
+ 'Got %s instead of the expected HTTP status ' .
+ 'code (200 or 206).', $result->status));
+ }
+
+ $url = $result->final_url;
+ if ($url != $expected_url) {
+ $ok = false;
+ if ($url == $fetch_url) {
+ $msg = 'The redirected URL was not returned.';
+ } else {
+ $msg = 'An unexpected URL was returned: <' . $url . '>.';
+ }
+ $parts[] = $r->b($msg);
+ }
+
+ $data = $result->body;
+ if ($data != 'Hello World!') {
+ $ok = false;
+ $parts[] = $r->b('Unexpected data was returned.');
+ }
+ $out .= $r->p(implode(' ', $parts));
+ } else {
+ $ok = false;
+ $out .= $r->p('Fetching URL ' . $lnk . ' failed!');
+ }
+
+ if ($fetcher->supportsSSL()) {
+ $out .= $r->p('Your PHP installation appears to support SSL, so it ' .
+ 'will be able to process HTTPS identity URLs and server URLs.');
+ } else {
+ $out .= $r->p('Your PHP installation does not support SSL, so it ' .
+ 'will NOT be able to process HTTPS identity URLs and server URLs.');
+ }
+
+ return $ok;
+}
+
+header('Content-Type: ' . $r->contentType() . '; charset=us-ascii');
+if (!$_GET["test_query"])
+{
+ header("Location: ".$_SERVER['PHP_SELF']."?test_query=a%26b");
+}
+
+ $title = 'OpenID Library Support Report';
+$out = $r->start($title) .
+ $r->h1($title) .
+ $r->p('This script checks your PHP installation to determine if you ' .
+ 'are set up to use the JanRain PHP OpenID library.');
+
+$body = '';
+
+$_include = include 'Auth/OpenID.php';
+
+if (!$_include) {
+ $path = ini_get('include_path');
+ $body .= $r->p(
+ 'Cannot find the OpenID library. It must be in your PHP include ' .
+ 'path. Your PHP include path is currently:');
+ $body .= $r->pre($path);
+} else {
+ $status = array();
+
+ $status[] = detect_math($r, $body);
+ $status[] = detect_random($r, $body);
+ $status[] = detect_stores($r, $body);
+ $status[] = detect_fetcher($r, $body);
+ $status[] = detect_xml($r, $body);
+ $status[] = detect_query_corruption($r, $body);
+ $result = true;
+
+ foreach ($status as $v) {
+ if (!$v) {
+ $result = false;
+ break;
+ }
+ }
+
+ if ($result) {
+ $out .= $r->h2('Setup Complete!');
+ $out .= $r->p('Your system should be ready to run the OpenID library.');
+ } else {
+ $out .= $r->h2('Setup Incomplete');
+ $out .= $r->p('Your system needs a few changes before it will be ready to run the OpenID library.');
+ }
+}
+
+$out .= $body . $r->end();
+print $out;
+?>
diff --git a/models/openid-php-openid-782224d/examples/discover.php b/models/openid-php-openid-782224d/examples/discover.php
new file mode 100644
index 000000000..31e6b61b7
--- /dev/null
+++ b/models/openid-php-openid-782224d/examples/discover.php
@@ -0,0 +1,100 @@
+<?php
+
+require_once "consumer/common.php";
+
+require_once "Auth/OpenID/Discover.php";
+require_once "Auth/Yadis/Yadis.php";
+
+function getOpenIDIdentifier()
+{
+ return $_GET['openid_identifier'];
+}
+
+function escape($x)
+{
+ return htmlentities($x);
+}
+
+
+$identifier = getOpenIDIdentifier();
+?>
+<html>
+<head>
+<title>OpenID discovery</title>
+</head>
+<body>
+ <h2>OpenID discovery tool</h2>
+ <p>
+ Enter an OpenID URL to begin discovery:
+ </p>
+ <form>
+ <input type="text" name="openid_identifier" size="40" />
+ <input type="submit" value="Begin" />
+ </form>
+<?
+if ($identifier) {
+
+ $fetcher = Auth_Yadis_Yadis::getHTTPFetcher();
+ list($normalized_identifier, $endpoints) = Auth_OpenID_discover(
+ $identifier, $fetcher);
+
+?>
+ <h3>Discovery Results for <?= escape($identifier) ?></h3>
+
+ <table cellpadding="7" cellspacing="0">
+ <tbody>
+ <tr>
+ <th>Claimed Identifier</th>
+ <td><?= escape($normalized_identifier) ?></td>
+ </tr>
+<?
+if (!$endpoints) {
+?>
+ <tr>
+ <td colspan="2">No OpenID services discovered.</td>
+ </tr>
+<?
+} else {
+?>
+ <tr>
+ <td colspan="2">Discovered OpenID services:</td>
+ </tr>
+<?
+foreach ($endpoints as $endpoint) {
+?>
+ <tr>
+ <td colspan="2"><hr/></td>
+ </tr>
+ <tr>
+ <th>Server URL</th>
+ <td><tt><?= escape($endpoint->server_url) ?></tt></td>
+ </tr>
+ <tr>
+ <th>Local ID</th>
+ <td><tt><?= escape($endpoint->local_id) ?></tt></td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <h3>Service types:</h3>
+ <ul>
+<?
+foreach ($endpoint->type_uris as $type_uri) {
+?>
+ <li><tt><?= escape($type_uri) ?></tt></li>
+<?
+}
+?>
+ </ul>
+ </td>
+ </tr>
+<?
+}
+}
+?>
+ </tbody>
+</table>
+<?
+}
+?>
+</body>
+</html> \ No newline at end of file
diff --git a/models/openid-php-openid-782224d/examples/server/index.php b/models/openid-php-openid-782224d/examples/server/index.php
new file mode 100644
index 000000000..7a9506458
--- /dev/null
+++ b/models/openid-php-openid-782224d/examples/server/index.php
@@ -0,0 +1,5 @@
+<?php
+
+header("Location: server.php");
+
+?> \ No newline at end of file
diff --git a/models/openid-php-openid-782224d/examples/server/lib/actions.php b/models/openid-php-openid-782224d/examples/server/lib/actions.php
new file mode 100644
index 000000000..50dc19a1b
--- /dev/null
+++ b/models/openid-php-openid-782224d/examples/server/lib/actions.php
@@ -0,0 +1,164 @@
+<?php
+
+require_once "lib/common.php";
+require_once "lib/session.php";
+require_once "lib/render.php";
+
+require_once "lib/render/login.php";
+require_once "lib/render/idpage.php";
+require_once "lib/render/idpXrds.php";
+require_once "lib/render/userXrds.php";
+
+require_once "Auth/OpenID.php";
+
+/**
+ * Handle a standard OpenID server request
+ */
+function action_default()
+{
+ header('X-XRDS-Location: '.buildURL('idpXrds'));
+
+ $server =& getServer();
+ $method = $_SERVER['REQUEST_METHOD'];
+ $request = null;
+ if ($method == 'GET') {
+ $request = $_GET;
+ } else {
+ $request = $_POST;
+ }
+
+ $request = $server->decodeRequest();
+
+ if (!$request) {
+ return about_render();
+ }
+
+ setRequestInfo($request);
+
+ if (in_array($request->mode,
+ array('checkid_immediate', 'checkid_setup'))) {
+
+ if ($request->idSelect()) {
+ // Perform IDP-driven identifier selection
+ if ($request->mode == 'checkid_immediate') {
+ $response =& $request->answer(false);
+ } else {
+ return trust_render($request);
+ }
+ } else if ((!$request->identity) &&
+ (!$request->idSelect())) {
+ // No identifier used or desired; display a page saying
+ // so.
+ return noIdentifier_render();
+ } else if ($request->immediate) {
+ $response =& $request->answer(false, buildURL());
+ } else {
+ if (!getLoggedInUser()) {
+ return login_render();
+ }
+ return trust_render($request);
+ }
+ } else {
+ $response =& $server->handleRequest($request);
+ }
+
+ $webresponse =& $server->encodeResponse($response);
+
+ if ($webresponse->code != AUTH_OPENID_HTTP_OK) {
+ header(sprintf("HTTP/1.1 %d ", $webresponse->code),
+ true, $webresponse->code);
+ }
+
+ foreach ($webresponse->headers as $k => $v) {
+ header("$k: $v");
+ }
+
+ header(header_connection_close);
+ print $webresponse->body;
+ exit(0);
+}
+
+/**
+ * Log out the currently logged in user
+ */
+function action_logout()
+{
+ setLoggedInUser(null);
+ setRequestInfo(null);
+ return authCancel(null);
+}
+
+/**
+ * Check the input values for a login request
+ */
+function login_checkInput($input)
+{
+ $openid_url = false;
+ $errors = array();
+
+ if (!isset($input['openid_url'])) {
+ $errors[] = 'Enter an OpenID URL to continue';
+ }
+ if (count($errors) == 0) {
+ $openid_url = $input['openid_url'];
+ }
+ return array($errors, $openid_url);
+}
+
+/**
+ * Log in a user and potentially continue the requested identity approval
+ */
+function action_login()
+{
+ $method = $_SERVER['REQUEST_METHOD'];
+ switch ($method) {
+ case 'GET':
+ return login_render();
+ case 'POST':
+ $info = getRequestInfo();
+ $fields = $_POST;
+ if (isset($fields['cancel'])) {
+ return authCancel($info);
+ }
+
+ list ($errors, $openid_url) = login_checkInput($fields);
+ if (count($errors) || !$openid_url) {
+ $needed = $info ? $info->identity : false;
+ return login_render($errors, @$fields['openid_url'], $needed);
+ } else {
+ setLoggedInUser($openid_url);
+ return doAuth($info);
+ }
+ default:
+ return login_render(array('Unsupported HTTP method: $method'));
+ }
+}
+
+/**
+ * Ask the user whether he wants to trust this site
+ */
+function action_trust()
+{
+ $info = getRequestInfo();
+ $trusted = isset($_POST['trust']);
+ return doAuth($info, $trusted, true, @$_POST['idSelect']);
+}
+
+function action_idpage()
+{
+ $identity = $_GET['user'];
+ return idpage_render($identity);
+}
+
+function action_idpXrds()
+{
+ return idpXrds_render();
+}
+
+function action_userXrds()
+{
+ $identity = $_GET['user'];
+ return userXrds_render($identity);
+}
+
+?> \ No newline at end of file
diff --git a/models/openid-php-openid-782224d/examples/server/lib/common.php b/models/openid-php-openid-782224d/examples/server/lib/common.php
new file mode 100644
index 000000000..80d05f51a
--- /dev/null
+++ b/models/openid-php-openid-782224d/examples/server/lib/common.php
@@ -0,0 +1,95 @@
+<?php
+
+require_once "lib/render.php";
+require_once "lib/session.php";
+
+require_once "lib/render/login.php";
+require_once "lib/render/about.php";
+require_once "lib/render/trust.php";
+
+require_once "Auth/OpenID/Server.php";
+require_once "Auth/OpenID/SReg.php";
+
+function authCancel($info)
+{
+ if ($info) {
+ setRequestInfo();
+ $url = $info->getCancelURL();
+ } else {
+ $url = getServerURL();
+ }
+ return redirect_render($url);
+}
+
+function doAuth($info, $trusted=null, $fail_cancels=false,
+ $idpSelect=null)
+{
+ if (!$info) {
+ // There is no authentication information, so bail
+ return authCancel(null);
+ }
+
+ if ($info->idSelect()) {
+ if ($idpSelect) {
+ $req_url = idURL($idpSelect);
+ } else {
+ $trusted = false;
+ }
+ } else {
+ $req_url = $info->identity;
+ }
+
+ $user = getLoggedInUser();
+ setRequestInfo($info);
+
+ if ((!$info->idSelect()) && ($req_url != idURL($user))) {
+ return login_render(array(), $req_url, $req_url);
+ }
+
+ $trust_root = $info->trust_root;
+
+ if ($trusted) {
+ setRequestInfo();
+ $server =& getServer();
+ $response =& $info->answer(true, null, $req_url);
+
+ // Answer with some sample Simple Registration data.
+ $sreg_data = array(
+ 'fullname' => 'Example User',
+ 'nickname' => 'example',
+ 'dob' => '1970-01-01',
+ 'email' => 'invalid@example.com',
+ 'gender' => 'F',
+ 'postcode' => '12345',
+ 'country' => 'ES',
+ 'language' => 'eu',
+ 'timezone' => 'America/New_York');
+
+ // Add the simple registration response values to the OpenID
+ // response message.
+ $sreg_request = Auth_OpenID_SRegRequest::fromOpenIDRequest(
+ $info);
+
+ $sreg_response = Auth_OpenID_SRegResponse::extractResponse(
+ $sreg_request, $sreg_data);
+
+ $sreg_response->toMessage($response->fields);
+
+ // Generate a response to send to the user agent.
+ $webresponse =& $server->encodeResponse($response);
+
+ $new_headers = array();
+
+ foreach ($webresponse->headers as $k => $v) {
+ $new_headers[] = $k.": ".$v;
+ }
+
+ return array($new_headers, $webresponse->body);
+ } elseif ($fail_cancels) {
+ return authCancel($info);
+ } else {
+ return trust_render($info);
+ }
+}
+
+?> \ No newline at end of file
diff --git a/models/openid-php-openid-782224d/examples/server/lib/render.php b/models/openid-php-openid-782224d/examples/server/lib/render.php
new file mode 100644
index 000000000..33d2aefcd
--- /dev/null
+++ b/models/openid-php-openid-782224d/examples/server/lib/render.php
@@ -0,0 +1,114 @@
+<?php
+
+define('page_template',
+'<html>
+ <head>
+ <meta http-equiv="cache-control" content="no-cache"/>
+ <meta http-equiv="pragma" content="no-cache"/>
+ <title>%s</title>
+%s
+ </head>
+ <body>
+ %s
+<div id="content">
+ <h1>%s</h1>
+ %s
+</div>
+ </body>
+</html>');
+
+define('logged_in_pat', 'You are logged in as %s (URL: %s)');
+
+/**
+ * HTTP response line contstants
+ */
+define('http_bad_request', 'HTTP/1.1 400 Bad Request');
+define('http_found', 'HTTP/1.1 302 Found');
+define('http_ok', 'HTTP/1.1 200 OK');
+define('http_internal_error', 'HTTP/1.1 500 Internal Error');
+
+/**
+ * HTTP header constants
+ */
+define('header_connection_close', 'Connection: close');
+define('header_content_text', 'Content-Type: text/plain; charset=us-ascii');
+
+define('redirect_message',
+ 'Please wait; you are being redirected to <%s>');
+
+
+/**
+ * Return a string containing an anchor tag containing the given URL
+ *
+ * The URL does not need to be quoted, but if text is passed in, then
+ * it does.
+ */
+function link_render($url, $text=null) {
+ $esc_url = htmlspecialchars($url, ENT_QUOTES);
+ $text = ($text === null) ? $esc_url : $text;
+ return sprintf('<a href="%s">%s</a>', $esc_url, $text);
+}
+
+/**
+ * Return an HTTP redirect response
+ */
+function redirect_render($redir_url)
+{
+ $headers = array(http_found,
+ header_content_text,
+ header_connection_close,
+ 'Location: ' . $redir_url,
+ );
+ $body = sprintf(redirect_message, $redir_url);
+ return array($headers, $body);
+}
+
+function navigation_render($msg, $items)
+{
+ $what = link_render(buildURL(), 'PHP OpenID Server');
+ if ($msg) {
+ $what .= ' &mdash; ' . $msg;
+ }
+ if ($items) {
+ $s = '<p>' . $what . '</p><ul class="bottom">';
+ foreach ($items as $action => $text) {
+ $url = buildURL($action);
+ $s .= sprintf('<li>%s</li>', link_render($url, $text));
+ }
+ $s .= '</ul>';
+ } else {
+ $s = '<p class="bottom">' . $what . '</p>';
+ }
+ return sprintf('<div class="navigation">%s</div>', $s);
+}
+
+/**
+ * Render an HTML page
+ */
+function page_render($body, $user, $title, $h1=null, $login=false)
+{
+ $h1 = $h1 ? $h1 : $title;
+
+ if ($user) {
+ $msg = sprintf(logged_in_pat, link_render(idURL($user), $user),
+ link_render(idURL($user)));
+ $nav = array('logout' => 'Log Out');
+
+ $navigation = navigation_render($msg, $nav);
+ } else {
+ if (!$login) {
+ $msg = link_render(buildURL('login'), 'Log In');
+ $navigation = navigation_render($msg, array());
+ } else {
+ $navigation = '';
+ }
+ }
+
+ $style = getStyle();
+ $text = sprintf(page_template, $title, $style, $navigation, $h1, $body);
+ // No special headers here
+ $headers = array();
+ return array($headers, $text);
+}
+
+?> \ No newline at end of file
diff --git a/models/openid-php-openid-782224d/examples/server/lib/render/about.php b/models/openid-php-openid-782224d/examples/server/lib/render/about.php
new file mode 100644
index 000000000..53e3694e9
--- /dev/null
+++ b/models/openid-php-openid-782224d/examples/server/lib/render/about.php
@@ -0,0 +1,47 @@
+<?php
+
+require_once "lib/session.php";
+require_once "lib/render.php";
+
+define('about_error_template',
+ '<div class="error">
+An error occurred when processing your request:
+<br />
+%s
+</div>');
+
+define('about_body',
+ '<p>
+ This is an <a href="http://www.openid.net/">OpenID</a> server
+ endpoint. This server is built on the <a
+ href="http://github.com/openid/php-openid">JanRain PHP OpenID
+ library</a>. Since OpenID consumer sites will need to directly contact this
+ server, it must be accessible over the Internet (not behind a firewall).
+</p>
+<p>
+ To use this server, you will have to set up a URL to use as an identifier.
+ Insert the following markup into the <code>&lt;head&gt;</code> of the HTML
+ document at that URL:
+</p>
+<pre>&lt;link rel="openid.server" href="%s" /&gt;</pre>
+<p>
+ Then configure this server so that you can log in with that URL.
+</p>
+');
+
+/**
+ * Render the about page, potentially with an error message
+ */
+function about_render($error=false, $internal=true)
+{
+ $headers = array();
+ $body = sprintf(about_body, buildURL());
+ if ($error) {
+ $headers[] = $internal ? http_internal_error : http_bad_request;
+ $body .= sprintf(about_error_template, htmlspecialchars($error));
+ }
+ $current_user = getLoggedInUser();
+ return page_render($body, $current_user, 'OpenID Server Endpoint');
+}
+
+?> \ No newline at end of file
diff --git a/models/openid-php-openid-782224d/examples/server/lib/render/idpXrds.php b/models/openid-php-openid-782224d/examples/server/lib/render/idpXrds.php
new file mode 100644
index 000000000..6e4ae1ce7
--- /dev/null
+++ b/models/openid-php-openid-782224d/examples/server/lib/render/idpXrds.php
@@ -0,0 +1,32 @@
+<?php
+
+require_once "lib/session.php";
+require_once "lib/render.php";
+
+require_once "Auth/OpenID/Discover.php";
+
+define('idp_xrds_pat', '<?xml version="1.0" encoding="UTF-8"?>
+<xrds:XRDS
+ xmlns:xrds="xri://$xrds"
+ xmlns="xri://$xrd*($v*2.0)">
+ <XRD>
+ <Service priority="0">
+ <Type>%s</Type>
+ <URI>%s</URI>
+ </Service>
+ </XRD>
+</xrds:XRDS>
+');
+
+function idpXrds_render()
+{
+ $headers = array('Content-type: application/xrds+xml');
+
+ $body = sprintf(idp_xrds_pat,
+ Auth_OpenID_TYPE_2_0_IDP,
+ buildURL());
+
+ return array($headers, $body);
+}
+
+?> \ No newline at end of file
diff --git a/models/openid-php-openid-782224d/examples/server/lib/render/idpage.php b/models/openid-php-openid-782224d/examples/server/lib/render/idpage.php
new file mode 100644
index 000000000..48c2486df
--- /dev/null
+++ b/models/openid-php-openid-782224d/examples/server/lib/render/idpage.php
@@ -0,0 +1,31 @@
+<?php
+
+require_once "lib/session.php";
+require_once "lib/render.php";
+
+define('idpage_pat',
+ '<html>
+<head>
+ <link rel="openid2.provider openid.server" href="%s"/>
+ <meta http-equiv="X-XRDS-Location" content="%s" />
+</head>
+<body>
+ This is the identity page for users of this server.
+</body>
+</html>');
+
+function idpage_render($identity)
+{
+ $xrdsurl = buildURL('userXrds')."?user=".urlencode($identity);
+
+ $headers = array(
+ 'X-XRDS-Location: '.$xrdsurl);
+
+
+ $body = sprintf(idpage_pat,
+ buildURL(),
+ $xrdsurl);
+ return array($headers, $body);
+}
+
+?>
diff --git a/models/openid-php-openid-782224d/examples/server/lib/render/login.php b/models/openid-php-openid-782224d/examples/server/lib/render/login.php
new file mode 100644
index 000000000..986a88545
--- /dev/null
+++ b/models/openid-php-openid-782224d/examples/server/lib/render/login.php
@@ -0,0 +1,65 @@
+<?php
+
+require_once "lib/session.php";
+require_once "lib/render.php";
+
+define('login_form_pat',
+ '<div class="form">
+ <p>
+
+ Enter your username into this form to log in to this server. It
+ can be anything; this is just for demonstration purposes. For
+ example, entering USERNAME will give you the identity URL
+
+ <pre>%s</pre>
+ </p>
+
+ <form method="post" action="%s">
+ <table>
+ <tr>
+ <th><label for="openid_url">Name:</label></th>
+ <td><input type="text" name="openid_url"
+ value="%s" id="openid_url" /></td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <input type="submit" value="Log in" />
+ <input type="submit" name="cancel" value="Cancel" />
+ </td>
+ </tr>
+ </table>
+ </form>
+</div>
+');
+
+define('login_needed_pat',
+ 'You must be logged in as %s to approve this request.');
+
+function login_render($errors=null, $input=null, $needed=null)
+{
+ $current_user = getLoggedInUser();
+ if ($input === null) {
+ $input = $current_user;
+ }
+ if ($needed) {
+ $errors[] = sprintf(login_needed_pat, link_render($needed));
+ }
+
+ $esc_input = htmlspecialchars($input, ENT_QUOTES);
+ $login_url = buildURL('login', true);
+ $body = sprintf(login_form_pat, idURL('USERNAME'), $login_url, $esc_input);
+ if ($errors) {
+ $body = loginError_render($errors) . $body;
+ }
+ return page_render($body, $current_user, 'Log In', null, true);
+}
+
+function loginError_render($errors)
+{
+ $text = '';
+ foreach ($errors as $error) {
+ $text .= sprintf("<li>%s</li>\n", $error);
+ }
+ return sprintf("<ul class=\"error\">\n%s</ul>\n", $text);
+}
+?> \ No newline at end of file
diff --git a/models/openid-php-openid-782224d/examples/server/lib/render/trust.php b/models/openid-php-openid-782224d/examples/server/lib/render/trust.php
new file mode 100644
index 000000000..681d4560a
--- /dev/null
+++ b/models/openid-php-openid-782224d/examples/server/lib/render/trust.php
@@ -0,0 +1,56 @@
+<?php
+
+require_once "lib/session.php";
+require_once "lib/render.php";
+
+define('trust_form_pat',
+ '<div class="form">
+ <form method="post" action="%s">
+ %s
+ <input type="submit" name="trust" value="Confirm" />
+ <input type="submit" value="Do not confirm" />
+ </form>
+</div>
+');
+
+define('normal_pat',
+ '<p>Do you wish to confirm your identity ' .
+ '(<code>%s</code>) with <code>%s</code>?</p>');
+
+define('id_select_pat',
+ '<p>You entered the server URL at the RP.
+Please choose the name you wish to use. If you enter nothing, the request will be cancelled.<br/>
+<input type="text" name="idSelect" /></p>
+');
+
+define('no_id_pat',
+'
+You did not send an identifier with the request,
+and it was not an identifier selection request.
+Please return to the relying party and try again.
+');
+
+function trust_render($info)
+{
+ $current_user = getLoggedInUser();
+ $lnk = link_render(idURL($current_user));
+ $trust_root = htmlspecialchars($info->trust_root);
+ $trust_url = buildURL('trust', true);
+
+ if ($info->idSelect()) {
+ $prompt = id_select_pat;
+ } else {
+ $prompt = sprintf(normal_pat, $lnk, $trust_root);
+ }
+
+ $form = sprintf(trust_form_pat, $trust_url, $prompt);
+
+ return page_render($form, $current_user, 'Trust This Site');
+}
+
+function noIdentifier_render()
+{
+ return page_render(no_id_pat, null, 'No Identifier Sent');
+}
+
+?> \ No newline at end of file
diff --git a/models/openid-php-openid-782224d/examples/server/lib/render/userXrds.php b/models/openid-php-openid-782224d/examples/server/lib/render/userXrds.php
new file mode 100644
index 000000000..a9ea95ea3
--- /dev/null
+++ b/models/openid-php-openid-782224d/examples/server/lib/render/userXrds.php
@@ -0,0 +1,34 @@
+<?php
+
+require_once "lib/session.php";
+require_once "lib/render.php";
+
+require_once "Auth/OpenID/Discover.php";
+
+define('user_xrds_pat', '<?xml version="1.0" encoding="UTF-8"?>
+<xrds:XRDS
+ xmlns:xrds="xri://$xrds"
+ xmlns="xri://$xrd*($v*2.0)">
+ <XRD>
+ <Service priority="0">
+ <Type>%s</Type>
+ <Type>%s</Type>
+ <URI>%s</URI>
+ </Service>
+ </XRD>
+</xrds:XRDS>
+');
+
+function userXrds_render($identity)
+{
+ $headers = array('Content-type: application/xrds+xml');
+
+ $body = sprintf(user_xrds_pat,
+ Auth_OpenID_TYPE_2_0,
+ Auth_OpenID_TYPE_1_1,
+ buildURL());
+
+ return array($headers, $body);
+}
+
+?> \ No newline at end of file
diff --git a/models/openid-php-openid-782224d/examples/server/lib/session.php b/models/openid-php-openid-782224d/examples/server/lib/session.php
new file mode 100644
index 000000000..201b6ee23
--- /dev/null
+++ b/models/openid-php-openid-782224d/examples/server/lib/session.php
@@ -0,0 +1,178 @@
+<?php
+
+require_once "config.php";
+require_once "lib/render.php";
+require_once "Auth/OpenID/Server.php";
+
+/**
+ * Set up the session
+ */
+function init()
+{
+ session_name('openid_server');
+ session_start();
+}
+
+/**
+ * Get the style markup
+ */
+function getStyle()
+{
+ $parent = rtrim(dirname(getServerURL()), '/');
+ $url = htmlspecialchars($parent . '/openid-server.css', ENT_QUOTES);
+ return sprintf('<link rel="stylesheet" type="text/css" href="%s" />', $url);
+}
+
+/**
+ * Get the URL of the current script
+ */
+function getServerURL()
+{
+ $path = $_SERVER['SCRIPT_NAME'];
+ $host = $_SERVER['HTTP_HOST'];
+ $port = $_SERVER['SERVER_PORT'];
+ $s = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] ? 's' : '';
+ if (($s && $port == "443") || (!$s && $port == "80")) {
+ $p = '';
+ } else {
+ $p = ':' . $port;
+ }
+
+ return "http$s://$host$p$path";
+}
+
+/**
+ * Build a URL to a server action
+ */
+function buildURL($action=null, $escaped=true)
+{
+ $url = getServerURL();
+ if ($action) {
+ $url .= '/' . $action;
+ }
+ return $escaped ? htmlspecialchars($url, ENT_QUOTES) : $url;
+}
+
+/**
+ * Extract the current action from the request
+ */
+function getAction()
+{
+ $path_info = @$_SERVER['PATH_INFO'];
+ $action = ($path_info) ? substr($path_info, 1) : '';
+ $function_name = 'action_' . $action;
+ return $function_name;
+}
+
+/**
+ * Write the response to the request
+ */
+function writeResponse($resp)
+{
+ list ($headers, $body) = $resp;
+ array_walk($headers, 'header');
+ header(header_connection_close);
+ print $body;
+}
+
+/**
+ * Instantiate a new OpenID server object
+ */
+function getServer()
+{
+ static $server = null;
+ if (!isset($server)) {
+ $server =& new Auth_OpenID_Server(getOpenIDStore(),
+ buildURL());
+ }
+ return $server;
+}
+
+/**
+ * Return a hashed form of the user's password
+ */
+function hashPassword($password)
+{
+ return bin2hex(Auth_OpenID_SHA1($password));
+}
+
+/**
+ * Get the openid_url out of the cookie
+ *
+ * @return mixed $openid_url The URL that was stored in the cookie or
+ * false if there is none present or if the cookie is bad.
+ */
+function getLoggedInUser()
+{
+ return isset($_SESSION['openid_url'])
+ ? $_SESSION['openid_url']
+ : false;
+}
+
+/**
+ * Set the openid_url in the cookie
+ *
+ * @param mixed $identity_url The URL to set. If set to null, the
+ * value will be unset.
+ */
+function setLoggedInUser($identity_url=null)
+{
+ if (!isset($identity_url)) {
+ unset($_SESSION['openid_url']);
+ } else {
+ $_SESSION['openid_url'] = $identity_url;
+ }
+}
+
+function getRequestInfo()
+{
+ return isset($_SESSION['request'])
+ ? unserialize($_SESSION['request'])
+ : false;
+}
+
+function setRequestInfo($info=null)
+{
+ if (!isset($info)) {
+ unset($_SESSION['request']);
+ } else {
+ $_SESSION['request'] = serialize($info);
+ }
+}
+
+
+function getSreg($identity)
+{
+ // from config.php
+ global $openid_sreg;
+
+ if (!is_array($openid_sreg)) {
+ return null;
+ }
+
+ return $openid_sreg[$identity];
+
+}
+
+function idURL($identity)
+{
+ return buildURL('idpage') . "?user=" . $identity;
+}
+
+function idFromURL($url)
+{
+ if (strpos($url, 'idpage') === false) {
+ return null;
+ }
+
+ $parsed = parse_url($url);
+
+ $q = $parsed['query'];
+
+ $parts = array();
+ parse_str($q, $parts);
+
+ return @$parts['user'];
+}
+
+?> \ No newline at end of file
diff --git a/models/openid-php-openid-782224d/examples/server/openid-server.css b/models/openid-php-openid-782224d/examples/server/openid-server.css
new file mode 100644
index 000000000..311d556a2
--- /dev/null
+++ b/models/openid-php-openid-782224d/examples/server/openid-server.css
@@ -0,0 +1,74 @@
+body {
+ padding: 0;
+ margin: 0;
+}
+
+#content {
+ padding: 0.5em;
+ max-width: 50em;
+}
+
+ul.error {
+ background: #ffaaaa;
+ border: 1px solid #ff0000;
+ padding: 0.5em;
+ padding-left: 1.5em;
+}
+
+.login th {
+ text-align: left;
+}
+
+div.form {
+ border: thin solid #777777;
+ background: #dddddd;
+ padding: 0.5em;
+ margin-top: 1em;
+}
+
+div.navigation {
+ border-bottom: thin solid #cccccc;
+ background: #eeeeee;
+ font-size: smaller;
+ padding: 0.5em;
+}
+
+div.navigation h2 {
+ margin-top: 0;
+}
+
+div.navigation p {
+ margin: 0;
+}
+
+div.navigation ul {
+ margin: 0;
+}
+
+div.login p {
+ margin-top: 0;
+}
+
+h1 {
+ margin-top: 0;
+}
+
+pre {
+ padding: 1em;
+ border: 1px solid black;
+ background: #ffeebb;
+}
+
+#checkup {
+ background: url('http://openid.net/favicon.ico') no-repeat;
+ padding-left: 16px;
+}
+
+th {
+ text-align: left;
+}
+
+table {
+ border-collapse: collapse;
+ margin-bottom: 1em;
+} \ No newline at end of file
diff --git a/models/openid-php-openid-782224d/examples/server/server.php b/models/openid-php-openid-782224d/examples/server/server.php
new file mode 100644
index 000000000..f054be818
--- /dev/null
+++ b/models/openid-php-openid-782224d/examples/server/server.php
@@ -0,0 +1,48 @@
+<?php
+
+$path_extra = dirname(dirname(dirname(__FILE__)));
+$path = ini_get('include_path');
+$path = $path_extra . PATH_SEPARATOR . $path;
+ini_set('include_path', $path);
+
+$try_include = @include 'config.php';
+
+if (!$try_include) {
+ header("Location: setup.php");
+}
+
+header('Cache-Control: no-cache');
+header('Pragma: no-cache');
+
+if (function_exists('getOpenIDStore')) {
+ require_once 'lib/session.php';
+ require_once 'lib/actions.php';
+
+ init();
+
+ $action = getAction();
+ if (!function_exists($action)) {
+ $action = 'action_default';
+ }
+
+ $resp = $action();
+
+ writeResponse($resp);
+} else {
+?>
+<html>
+ <head>
+ <title>PHP OpenID Server</title>
+ <body>
+ <h1>PHP OpenID Server</h1>
+ <p>
+ This server needs to be configured before it can be used. Edit
+ <code>config.php</code> to reflect your server's setup, then
+ load this page again.
+ </p>
+ </body>
+ </head>
+</html>
+<?php
+}
+?> \ No newline at end of file
diff --git a/models/openid-php-openid-782224d/examples/server/setup.php b/models/openid-php-openid-782224d/examples/server/setup.php
new file mode 100644
index 000000000..e25ef341a
--- /dev/null
+++ b/models/openid-php-openid-782224d/examples/server/setup.php
@@ -0,0 +1,558 @@
+<?php
+
+/**
+ * OpenID server configuration script.
+ *
+ * This script generates a config.php file needed by the server
+ * example.
+ *
+ * @package OpenID.Examples
+ * @author JanRain, Inc. <openid@janrain.com>
+ * @copyright 2005-2008 Janrain, Inc.
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache
+ */
+
+$path_extra = dirname(dirname(dirname(__FILE__)));
+$path = ini_get('include_path');
+$path = $path_extra . PATH_SEPARATOR . $path;
+ini_set('include_path', $path);
+require_once "Auth/OpenID.php";
+
+/**
+ * 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() ||
+ isset($_GET['add_openid'])) {
+ render_form();
+} else {
+ print generate_config(isset($_GET['download']));
+}
+
+/**
+ * Functions.
+ */
+
+function check_url($url) {
+ return (Auth_OpenID::normalizeUrl($url) !== null);
+}
+
+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_open_basedir($path) {
+ if (ini_get('open_basedir')) {
+ $parts = explode(PATH_SEPARATOR, ini_get('open_basedir'));
+
+ $found = false;
+
+ foreach ($parts as $p) {
+ if (strpos($path, $p) === 0) {
+ $found = true;
+ break;
+ }
+ }
+
+ return $found;
+ } else {
+ return true;
+ }
+}
+
+function check_session() {
+
+ global $messages;
+
+ if ($_GET && isset($_GET['clear'])) {
+ session_destroy();
+ $_SESSION = array();
+ init_session();
+ return false;
+ }
+
+ $bad_path = false;
+
+ if (isset($_GET['generate'])) {
+ if (!$_SESSION['server_url']) {
+ $messages[] = "Please enter a server URL.";
+ }
+
+ if (!isset($_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.";
+ } else {
+ if (!check_open_basedir($_SESSION['store_data']['fs_path'])) {
+ $messages[] = "The filesystem store path violates PHP's <code>open_basedir</code> setting.";
+ $bad_path = true;
+ }
+ }
+ break;
+
+ case "SQLite":
+ if (!@$_SESSION['store_data']['sqlite_path']) {
+ $messages[] = "Please specify a SQLite database path.";
+ } else {
+ if (!check_open_basedir($_SESSION['store_data']['sqlite_path'])) {
+ $messages[] = "The SQLite store path violates PHP's <code>open_basedir</code> setting.";
+ $bad_path = true;
+ }
+ }
+ 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'])) &&
+ !$bad_path) {
+
+ return true;
+ }
+
+ return false;
+}
+
+function render_form() {
+
+ global $store_types, $fields, $messages;
+
+ $basedir_msg = "";
+
+ if (ini_get('open_basedir')) {
+ $basedir_msg = "</br><span class=\"notice\">Note: Due to the ".
+ "<code>open_basedir</code> php.ini setting, be sure to ".
+ "choose a path in one of the following directories:<ul><li>".
+ implode("<li>",
+ explode(PATH_SEPARATOR, ini_get('open_basedir'))).
+ "</ul></span>";
+ }
+
+ $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;
+ }
+
+?>
+<html>
+ <head>
+ <style type="text/css">
+span.label {
+ float: left;
+ width: 2in;
+}
+
+span.notice {
+ color: red;
+ font-size: 80%;
+}
+
+div p {
+ border-top: 1px solid #ccc;
+ font-style: italic;
+ padding-top: 0.5em;
+}
+
+div {
+ padding: 3px;
+}
+
+div.store_fields {
+ margin-left: 2in;
+ padding: default;
+}
+
+div.store_fields label.field {
+ float: left;
+ width: 1.75in;
+}
+
+div.store_fields > div {
+ border: 1px solid gray;
+ margin-bottom: 0.5em;
+ background: #eee;
+}
+
+div.store_fields > div > div {
+ margin-left: 0.4in;
+}
+
+div.errors {
+ background: #faa;
+ border: 1px solid red;
+}
+
+</style>
+</head>
+<body>
+
+<h2>OpenID Example Server Configuration</h2>
+
+<?php
+if ($messages) {
+ print "<div class=\"errors\">";
+ foreach ($messages as $m) {
+ print "<div>$m</div>";
+ }
+ print "</div>";
+
+}
+?>
+
+<p>
+Your browser has been redirected to this page so you can configure the
+server example. This form will auto-generate an OpenID example server
+configuration for use with the OpenID server example.
+</p>
+
+<form>
+<div>
+
+ <p>
+ The server URL is the URL that points to the "server.php" file. It
+ looks like your server URL should be <code><?php print build_url(); ?></code>.
+ </p>
+
+ <span class="label"><label for="i_server_url">Server URL:</label></span>
+ <span>
+ <input type="text" id="i_server_url" size="35" name="server_url"
+ value="<?php print $_SESSION['server_url'] ?>">
+ </span>
+</div>
+
+<div>
+
+ <p>
+ 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
+ <code>/home/me/PHP-OpenID/</code>, you should enter that directory here.
+ </p>
+
+ <span class="label">
+ <label for="i_include_path">Include path (optional):</label>
+ </span>
+ <span>
+ <input type="text" id="i_include_path" size="35" name="include_path"
+ value="<?php print $_SESSION['include_path'] ?>">
+ </span>
+</div>
+
+<div>
+
+ <p>
+ The server needs to store OpenID information in a "store". The
+ following store types are available on your PHP installation:
+ </p>
+
+ <span class="label">Store method:</span>
+ <div class="store_fields">
+
+ <div>
+ <input type="radio" name="store_type" value="Filesystem"
+ id="i_filesystem"<?php if ($_SESSION['store_type'] == 'Filesystem') { print " CHECKED"; } ?>>
+ <label for="i_filesystem">Filesystem</label>
+ <div>
+ <label for="i_fs_path" class="field">Filesystem path:</label>
+ <input type="text" name="fs_path" id="i_fs_path"
+ value="<?php print @$_SESSION['store_data']['fs_path']; ?>">
+ <?php print $basedir_msg; ?>
+ </div>
+ </div>
+
+<?php if ($sqlite_found) { ?>
+ <div>
+ <input type="radio" name="store_type" value="SQLite"
+ id="i_sqlite"<?php if ($_SESSION['store_type'] == 'SQLite') { print " CHECKED"; } ?>>
+ <label for="i_sqlite">SQLite</label>
+ <div>
+ <label for="i_sqlite_path" class="field">SQLite database path:</label>
+ <input type="text" value="<?php print @$_SESSION['store_data']['sqlite_path']; ?>"
+ name="sqlite_path" id="i_sqlite_path">
+ <?php print $basedir_msg; ?>
+ </div>
+ </div>
+<?php } ?>
+
+
+<?php if ($mysql_found || $pgsql_found) { ?>
+ <div>
+
+<?php if ($mysql_found) { ?>
+ <input type="radio" name="store_type" value="MySQL"
+ id="i_mysql"<?php if ($_SESSION['store_type'] == 'MySQL') { print " CHECKED"; } ?>>
+ <label for="i_mysql">MySQL</label>
+<?php } ?>
+
+<?php if ($pgsql_found) { ?>
+ <input type="radio" name="store_type" value="PostgreSQL"
+ id="i_pgsql"<?php if ($_SESSION['store_type'] == 'PostgreSQL') { print " CHECKED"; } ?>>
+ <label for="i_pgsql">PostgreSQL</label>
+<?php } ?>
+
+ <div>
+ <label for="i_m_host" class="field">Host:</label>
+ <input type="text" value="<?php print @$_SESSION['store_data']['host']; ?>" name="host" id="i_m_host">
+ </div>
+ <div>
+ <label for="i_m_database" class="field">Database:</label>
+ <input value="<?php print @$_SESSION['store_data']['database']; ?>" type="text" name="database" id="i_m_database">
+ </div>
+ <div>
+ <label for="i_m_username" class="field">Username:</label>
+ <input type="text" name="username" id="i_m_username" value="<?php print @$_SESSION['store_data']['username']; ?>">
+ </div>
+ <div>
+ <label for="i_m_password" class="field">Password:</label>
+ <input type="password" name="password" id="i_m_password" value="<?php print @$_SESSION['store_data']['password']; ?>">
+ </div>
+ </div>
+<?php } ?>
+</div>
+</div>
+
+<input type="submit" name="generate" value="Generate Configuration">
+</form>
+</body>
+</html>
+<?php
+}
+
+function init_session() {
+
+ global $messages;
+
+ // Set a guess value for the server url.
+ if (!array_key_exists('server_url', $_SESSION)) {
+ $_SESSION['server_url'] = build_url();
+ }
+
+ foreach (array('server_url', 'include_path', 'store_type') as $key) {
+ if (!isset($_SESSION[$key])) {
+ $_SESSION[$key] = "";
+ }
+ }
+
+ if (!isset($_SESSION['store_data'])) {
+ $_SESSION['store_data'] = array();
+ }
+
+ foreach (array('server_url', 'include_path', 'store_type') as $field) {
+ if (array_key_exists($field, $_GET)) {
+ $_SESSION[$field] = $_GET[$field];
+ }
+ }
+
+ foreach (array('username', 'password', 'database', 'host', 'fs_path', 'sqlite_path') as $field) {
+ if (array_key_exists($field, $_GET)) {
+ $_SESSION['store_data'][$field] = $_GET[$field];
+ }
+ }
+}
+
+function generate_config($download = false) {
+
+ if ($download) {
+ // Emit headers to force browser download.
+ header("Content-type: text/plain");
+ header("Content-disposition: attachment; filename=config.php");
+ print "<?php\n";
+ } else {
+?>
+<html>
+<body>
+
+<h2>OpenID Example Server Configuration</h2>
+
+<p>
+Put the following text into <strong><?php print dirname(__FILE__); print DIRECTORY_SEPARATOR; ?>config.php</strong>.
+</p>
+
+<p>
+<a href="setup.php?clear=1">Back to form</a> (resets settings)
+</p>
+
+<p>
+<a href="setup.php?download=1">Download this configuration</a>
+</p>
+
+<pre style="border: 1px solid gray; background: #eee; padding: 5px;">
+<?php
+print "&lt;?php\n";
+}
+?>
+<?php if ($_SESSION['include_path']) { ?>
+/**
+ * Set any extra include paths needed to use the library
+ */
+set_include_path(get_include_path() . PATH_SEPARATOR . "<?php
+print $_SESSION['include_path'];
+?>");
+
+<?php } ?>
+/**
+ * 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 = "<?php
+print $_SESSION['server_url'];
+?>";
+
+/**
+ * Initialize an OpenID store
+ *
+ * @return object $store an instance of OpenID store (see the
+ * documentation for how to create one)
+ */
+function getOpenIDStore()
+{
+ <?php
+
+ switch ($_SESSION['store_type']) {
+ case "Filesystem":
+
+ print "require_once \"Auth/OpenID/FileStore.php\";\n ";
+ print "return new Auth_OpenID_FileStore(\"".$_SESSION['store_data']['fs_path']."\");\n";
+ break;
+
+ case "SQLite":
+
+ print "require_once \"Auth/OpenID/SQLiteStore.php\";\n ";
+ print "\$s = new Auth_OpenID_SQLiteStore(\"".$_SESSION['store_data']['sqlite_path']."\");\n ";
+ print "\$s->createTables();\n ";
+ print "return \$s;\n";
+ break;
+
+ case "MySQL":
+
+ ?>require_once 'Auth/OpenID/MySQLStore.php';
+ require_once 'DB.php';
+
+ $dsn = array(
+ 'phptype' => 'mysql',
+ 'username' => '<?php print $_SESSION['store_data']['username']; ?>',
+ 'password' => '<?php print $_SESSION['store_data']['password']; ?>',
+ 'hostspec' => '<?php print $_SESSION['store_data']['host']; ?>'
+ );
+
+ $db =& DB::connect($dsn);
+
+ if (PEAR::isError($db)) {
+ return null;
+ }
+
+ $db->query("USE <?php print $_SESSION['store_data']['database']; ?>");
+
+ $s =& new Auth_OpenID_MySQLStore($db);
+
+ $s->createTables();
+
+ return $s;
+<?php
+ break;
+
+ case "PostgreSQL":
+
+ ?>require_once 'Auth/OpenID/PostgreSQLStore.php';
+ require_once 'DB.php';
+
+ $dsn = array(
+ 'phptype' => 'pgsql',
+ 'username' => '<?php print $_SESSION['store_data']['username']; ?>',
+ 'password' => '<?php print $_SESSION['store_data']['password']; ?>',
+ 'hostspec' => '<?php print $_SESSION['store_data']['host']; ?>',
+ 'database' => '<?php print $_SESSION['store_data']['database']; ?>'
+ );
+
+ $db =& DB::connect($dsn);
+
+ if (PEAR::isError($db)) {
+ return null;
+ }
+
+ $s =& new Auth_OpenID_PostgreSQLStore($db);
+
+ $s->createTables();
+
+ return $s;
+<?php
+ break;
+ }
+
+ ?>
+}
+
+<?php
+ print "?>";
+ if (!$download) {
+?>
+</pre>
+</body>
+</html>
+<?php
+ }
+ } // end function generate_config ()
+?>