| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 | 
							- <?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 https://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;
 
- }
 
- /* Change this to true if using phpMyAdmin over https */
 
- $secure_cookie = false;
 
- /**
 
-  * Map of authenticated users to MySQL user/password pairs.
 
-  */
 
- $AUTH_MAP = array(
 
-     'https://launchpad.net/~username' => array(
 
-         'user' => 'root',
 
-         'password' => '',
 
-         ),
 
-     );
 
- /**
 
-  * Simple function to show HTML page with given content.
 
-  *
 
-  * @param string $contents Content to include in page
 
-  *
 
-  * @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
 
- }
 
- /**
 
-  * Display error and exit
 
-  *
 
-  * @param Exception $e Exception object
 
-  *
 
-  * @return void
 
-  */
 
- function Die_error($e)
 
- {
 
-     $contents = "<div class='relyingparty_results'>\n";
 
-     $contents .= "<pre>" . htmlspecialchars($e->getMessage()) . "</pre>\n";
 
-     $contents .= "</div class='relyingparty_results'>";
 
-     Show_page($contents);
 
-     exit;
 
- }
 
- /* Need to have cookie visible from parent directory */
 
- session_set_cookie_params(0, '/', '', $secure_cookie, true);
 
- /* 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']) && is_string($_POST['identifier'])) {
 
-     $identifier = $_POST['identifier'];
 
- } elseif (isset($_SESSION['identifier']) && is_string($_SESSION['identifier'])) {
 
-     $identifier = $_SESSION['identifier'];
 
- } else {
 
-     $identifier = null;
 
- }
 
- /* Create OpenID object */
 
- try {
 
-     $o = new OpenID_RelyingParty($returnTo, $realm, $identifier);
 
- } catch (Exception $e) {
 
-     Die_error($e);
 
- }
 
- /* Redirect to OpenID provider */
 
- if (isset($_POST['start'])) {
 
-     try {
 
-         $authRequest = $o->prepare();
 
-     } catch (Exception $e) {
 
-         Die_error($e);
 
-     }
 
-     $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 */
 
-     try {
 
-         $message = new OpenID_Message($queryString, OpenID_Message::FORMAT_HTTP);
 
-     } catch (Exception $e) {
 
-         Die_error($e);
 
-     }
 
-     $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;
 
-     }
 
- }
 
 
  |