summaryrefslogtreecommitdiff
path: root/hugo/examples/openid.php
diff options
context:
space:
mode:
Diffstat (limited to 'hugo/examples/openid.php')
-rw-r--r--hugo/examples/openid.php158
1 files changed, 158 insertions, 0 deletions
diff --git a/hugo/examples/openid.php b/hugo/examples/openid.php
new file mode 100644
index 0000000..563b230
--- /dev/null
+++ b/hugo/examples/openid.php
@@ -0,0 +1,158 @@
+<?php
+/* vim: set expandtab sw=4 ts=4 sts=4: */
+/**
+ * Single signon for phpMyAdmin using OpenID
+ *
+ * This is just example how to use single signon with phpMyAdmin, it is
+ * not intended to be perfect code and look, only shows how you can
+ * integrate this functionality in your application.
+ *
+ * It uses OpenID pear package, see http://pear.php.net/package/OpenID
+ *
+ * User first authenticates using OpenID and based on content of $AUTH_MAP
+ * the login information is passed to phpMyAdmin in session data.
+ *
+ * @package PhpMyAdmin
+ * @subpackage Example
+ */
+
+if (false === @include_once 'OpenID/RelyingParty.php') {
+ exit;
+}
+
+/**
+ * Map of authenticated users to MySQL user/password pairs.
+ */
+$AUTH_MAP = array(
+ 'http://launchpad.net/~username' => array(
+ 'user' => 'root',
+ 'password' => '',
+ ),
+ );
+
+/**
+ * Simple function to show HTML page with given content.
+ *
+ * @return void
+ */
+function show_page($contents)
+{
+ header('Content-Type: text/html; charset=utf-8');
+ echo '<?xml version="1.0" encoding="utf-8"?>' . "\n";
+ ?>
+<!DOCTYPE HTML>
+<html lang="en" dir="ltr">
+<head>
+ <link rel="icon" href="../favicon.ico" type="image/x-icon" />
+ <link rel="shortcut icon" href="../favicon.ico" type="image/x-icon" />
+ <meta charset="utf-8" />
+ <title>phpMyAdmin OpenID signon example</title>
+</head>
+<body>
+<?php
+if (isset($_SESSION) && isset($_SESSION['PMA_single_signon_error_message'])) {
+ echo '<p class="error">' . $_SESSION['PMA_single_signon_message'] . '</p>';
+ unset($_SESSION['PMA_single_signon_message']);
+}
+echo $contents;
+?>
+</body>
+</html>
+<?php
+}
+
+/* Need to have cookie visible from parent directory */
+session_set_cookie_params(0, '/', '', 0);
+/* Create signon session */
+$session_name = 'SignonSession';
+session_name($session_name);
+session_start();
+
+// Determine realm and return_to
+$base = 'http';
+if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') {
+ $base .= 's';
+}
+$base .= '://' . $_SERVER['SERVER_NAME'] . ':' . $_SERVER['SERVER_PORT'];
+
+$realm = $base . '/';
+$returnTo = $base . dirname($_SERVER['PHP_SELF']);
+if ($returnTo[strlen($returnTo) - 1] != '/') {
+ $returnTo .= '/';
+}
+$returnTo .= 'openid.php';
+
+/* Display form */
+if (!count($_GET) && !count($_POST) || isset($_GET['phpMyAdmin'])) {
+ /* Show simple form */
+ $content = '<form action="openid.php" method="post">
+OpenID: <input type="text" name="identifier" /><br />
+<input type="submit" name="start" />
+</form>
+</body>
+</html>';
+ show_page($content);
+ exit;
+}
+
+/* Grab identifier */
+if (isset($_POST['identifier'])) {
+ $identifier = $_POST['identifier'];
+} else if (isset($_SESSION['identifier'])) {
+ $identifier = $_SESSION['identifier'];
+} else {
+ $identifier = null;
+}
+
+/* Create OpenID object */
+try {
+ $o = new OpenID_RelyingParty($returnTo, $realm, $identifier);
+} catch (OpenID_Exception $e) {
+ $contents = "<div class='relyingparty_results'>\n";
+ $contents .= "<pre>" . $e->getMessage() . "</pre>\n";
+ $contents .= "</div class='relyingparty_results'>";
+ show_page($contents);
+ exit;
+}
+
+/* Redirect to OpenID provider */
+if (isset($_POST['start'])) {
+ try {
+ $authRequest = $o->prepare();
+ } catch (OpenID_Exception $e) {
+ $contents = "<div class='relyingparty_results'>\n";
+ $contents .= "<pre>" . $e->getMessage() . "</pre>\n";
+ $contents .= "</div class='relyingparty_results'>";
+ show_page($contents);
+ exit;
+ }
+
+ $url = $authRequest->getAuthorizeURL();
+
+ header("Location: $url");
+ exit;
+} else {
+ /* Grab query string */
+ if (!count($_POST)) {
+ list(, $queryString) = explode('?', $_SERVER['REQUEST_URI']);
+ } else {
+ // I hate php sometimes
+ $queryString = file_get_contents('php://input');
+ }
+
+ /* Check reply */
+ $message = new OpenID_Message($queryString, OpenID_Message::FORMAT_HTTP);
+
+ $id = $message->get('openid.claimed_id');
+
+ if (!empty($id) && isset($AUTH_MAP[$id])) {
+ $_SESSION['PMA_single_signon_user'] = $AUTH_MAP[$id]['user'];
+ $_SESSION['PMA_single_signon_password'] = $AUTH_MAP[$id]['password'];
+ session_write_close();
+ /* Redirect to phpMyAdmin (should use absolute URL here!) */
+ header('Location: ../index.php');
+ } else {
+ show_page('<p>User not allowed!</p>');
+ exit;
+ }
+}