diff options
Diffstat (limited to 'srcs/phpmyadmin/examples')
| -rw-r--r-- | srcs/phpmyadmin/examples/config.manyhosts.inc.php | 53 | ||||
| -rw-r--r-- | srcs/phpmyadmin/examples/openid.php | 177 | ||||
| -rw-r--r-- | srcs/phpmyadmin/examples/signon-script.php | 39 | ||||
| -rw-r--r-- | srcs/phpmyadmin/examples/signon.php | 76 |
4 files changed, 345 insertions, 0 deletions
diff --git a/srcs/phpmyadmin/examples/config.manyhosts.inc.php b/srcs/phpmyadmin/examples/config.manyhosts.inc.php new file mode 100644 index 0000000..b9ea893 --- /dev/null +++ b/srcs/phpmyadmin/examples/config.manyhosts.inc.php @@ -0,0 +1,53 @@ +<?php +/** + * This example configuration shows how to configure phpMyAdmin for + * many hosts that all have identical configuration otherwise. To add + * a new host, just drop it into $hosts below. Contributed by + * Matthew Hawkins. + * + * @package PhpMyAdmin + * @subpackage Example + */ +declare(strict_types=1); + +$i = 0; +$hosts = [ + "foo.example.com", + "bar.example.com", + "baz.example.com", + "quux.example.com", +]; + +foreach ($hosts as $host) { + $i++; + $cfg['Servers'][$i]['host'] = $host; + $cfg['Servers'][$i]['port'] = ''; + $cfg['Servers'][$i]['socket'] = ''; + $cfg['Servers'][$i]['compress'] = false; + $cfg['Servers'][$i]['controluser'] = 'pma'; + $cfg['Servers'][$i]['controlpass'] = 'pmapass'; + $cfg['Servers'][$i]['auth_type'] = 'cookie'; + $cfg['Servers'][$i]['user'] = ''; + $cfg['Servers'][$i]['password'] = ''; + $cfg['Servers'][$i]['only_db'] = ''; + $cfg['Servers'][$i]['verbose'] = ''; + $cfg['Servers'][$i]['pmadb'] = 'phpmyadmin'; + $cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark'; + $cfg['Servers'][$i]['relation'] = 'pma__relation'; + $cfg['Servers'][$i]['table_info'] = 'pma__table_info'; + $cfg['Servers'][$i]['table_coords'] = 'pma__table_coords'; + $cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages'; + $cfg['Servers'][$i]['column_info'] = 'pma__column_info'; + $cfg['Servers'][$i]['history'] = 'pma__history'; + $cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs'; + $cfg['Servers'][$i]['tracking'] = 'pma__tracking'; + $cfg['Servers'][$i]['userconfig'] = 'pma__userconfig'; + $cfg['Servers'][$i]['recent'] = 'pma__recent'; + $cfg['Servers'][$i]['users'] = 'pma__users'; + $cfg['Servers'][$i]['usergroups'] = 'pma__usergroups'; + $cfg['Servers'][$i]['navigationhiding'] = 'pma__navigationhiding'; + $cfg['Servers'][$i]['savedsearches'] = 'pma__savedsearches'; + $cfg['Servers'][$i]['central_columns'] = 'pma__central_columns'; + $cfg['Servers'][$i]['designer_settings'] = 'pma__designer_settings'; + $cfg['Servers'][$i]['export_templates'] = 'pma__export_templates'; +} diff --git a/srcs/phpmyadmin/examples/openid.php b/srcs/phpmyadmin/examples/openid.php new file mode 100644 index 0000000..e186d78 --- /dev/null +++ b/srcs/phpmyadmin/examples/openid.php @@ -0,0 +1,177 @@ +<?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 + */ +declare(strict_types=1); + +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 = [ + 'https://launchpad.net/~username' => [ + '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; + } +} diff --git a/srcs/phpmyadmin/examples/signon-script.php b/srcs/phpmyadmin/examples/signon-script.php new file mode 100644 index 0000000..175c7f7 --- /dev/null +++ b/srcs/phpmyadmin/examples/signon-script.php @@ -0,0 +1,39 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Single signon for phpMyAdmin + * + * This is just example how to use script based 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. + * + * @package PhpMyAdmin + * @subpackage Example + */ +declare(strict_types=1); + +/** + * This function returns username and password. + * + * It can optionally use configured username as parameter. + * + * @param string $user User name + * + * @return array + */ +function get_login_credentials($user) +{ + /* Optionally we can use passed username */ + if (! empty($user)) { + return [ + $user, + 'password', + ]; + } + + /* Here we would retrieve the credentials */ + return [ + 'root', + '', + ]; +} diff --git a/srcs/phpmyadmin/examples/signon.php b/srcs/phpmyadmin/examples/signon.php new file mode 100644 index 0000000..73f26fe --- /dev/null +++ b/srcs/phpmyadmin/examples/signon.php @@ -0,0 +1,76 @@ +<?php +/* vim: set expandtab sw=4 ts=4 sts=4: */ +/** + * Single signon for phpMyAdmin + * + * This is just example how to use session based 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. + * + * @package PhpMyAdmin + * @subpackage Example + */ +declare(strict_types=1); + +/* Use cookies for session */ +ini_set('session.use_cookies', 'true'); +/* Change this to true if using phpMyAdmin over https */ +$secure_cookie = false; +/* 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); +// Uncomment and change the following line to match your $cfg['SessionSavePath'] +//session_save_path('/foobar'); +@session_start(); + +/* Was data posted? */ +if (isset($_POST['user'])) { + /* Store there credentials */ + $_SESSION['PMA_single_signon_user'] = $_POST['user']; + $_SESSION['PMA_single_signon_password'] = $_POST['password']; + $_SESSION['PMA_single_signon_host'] = $_POST['host']; + $_SESSION['PMA_single_signon_port'] = $_POST['port']; + /* Update another field of server configuration */ + $_SESSION['PMA_single_signon_cfgupdate'] = ['verbose' => 'Signon test']; + $id = session_id(); + /* Close that session */ + @session_write_close(); + /* Redirect to phpMyAdmin (should use absolute URL here!) */ + header('Location: ../index.php'); +} else { + /* Show simple form */ + 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 single signon example</title> + </head> + <body> + <?php + if (isset($_SESSION['PMA_single_signon_error_message'])) { + echo '<p class="error">'; + echo $_SESSION['PMA_single_signon_error_message']; + echo '</p>'; + } + ?> + <form action="signon.php" method="post"> + Username: <input type="text" name="user"><br> + Password: <input type="password" name="password"><br> + Host: (will use the one from config.inc.php by default) + <input type="text" name="host"><br> + Port: (will use the one from config.inc.php by default) + <input type="text" name="port"><br> + <input type="submit"> + </form> + </body> + </html> + <?php +} +?> |
