<!-- NOTICE! this file depend on Elettra authentication system, in other institutes please skip call to function check_admin_access() or replace it --> <!doctype html> <html lang="en"> <head> <title>PAnTHer admin</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="../lib/bootstrap/bootstrap.min.css"> <script src="../lib/bootstrap/jquery.js"></script> <script src="../lib/bootstrap/bootstrap.min.js"></script> </head> <body> <?php define('ELETTRA_LDAP_SERVER', 'ldap.elettra.eu'); define('ELETTRA_LDAP_DN', 'ou=People,dc=elettra,dc=eu'); require_once("../conf.php"); $timediff = $dbtype == "pg"? "EXTRACT(EPOCH FROM NOW()-date)": "TIMESTAMPDIFF(SECOND,date,NOW())"; $old_error_reporting = error_reporting(E_ALL); require_once("../lib/sql_interface.php"); error_reporting($old_error_reporting); // ---------------------------------------------------------------- // open_db if (!function_exists('open_db')) { function open_db() { global $dbtype; // instance SQL interface class $sql = new SqlInterface($dbtype); // connect to database $db = $sql->sql_connect(HOST, USERNAME, PASSWORD, DB); // if connection has failed emit a warnig and auto-retry if ($db === FALSE) { echo "<html>\n <head>"; echo " <meta http-equiv='refresh' content='5;url=#'>\n"; echo " </head>\n <body>\n <H1>Please wait</H1>Waiting for database connection<br />\n"; exit(); } // select db if ($dbtype!="pg") {$sql->sql_select_db(DB, $db);} return $sql; } } $sql = open_db(); $username = ''; //----------------------------------------------------------------------------- function elettra_ldap_auth($_username, $_password) { $elettra_ldap_error = false; $ldap_url = 'ldaps://'.ELETTRA_LDAP_SERVER.':636/'; if (!function_exists('ldap_connect')) { $elettra_ldap_error = "LDAP module not installed in PHP"; return $elettra_ldap_error; } $ldap = ldap_connect($ldap_url); $elettra_ldap_error = "$ldap_url\n"; if (!$ldap) { $elettra_ldap_error = "Could not connect to $ldap_url"; return $elettra_ldap_error; } ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3); $password = trim(stripslashes($_password)); $username = trim(stripslashes($_username)); if (empty($password)) { @ldap_close($ldap); $elettra_ldap_error = "empty password"; return $elettra_ldap_error; } if ($ldap) { $user_search = ldap_search($ldap, ELETTRA_LDAP_DN, "(uid=$username)"); if (!$user_search) { $elettra_ldap_error ="Error in search query ($ldap_url): ".ldap_error($ldap); return $elettra_ldap_error; } $user_get = ldap_get_entries($ldap, $user_search); if (!$user_get) { $elettra_ldap_error = 'user not found'; @ldap_close($ldap); return $elettra_ldap_error; } $user_entry = ldap_first_entry($ldap, $user_search); if (!$user_entry) { $elettra_ldap_error = 'user not found'; @ldap_close($ldap); return $elettra_ldap_error; } $user_dn = ldap_get_dn($ldap, $user_entry); if (!$user_dn) { $elettra_ldap_error = 'user not found'; @ldap_close($ldap); return $elettra_ldap_error; } if (@ldap_bind($ldap, $user_dn, $password)) { $elettra_ldap_error = 'alias'; if ($user_get && $user_get['count']) { // $login = array('realname' => $user_get[0]['cn'][0]); $elettra_ldap_error = 'Login OK'; } @ldap_close($ldap); } else { $elettra_ldap_error = 'Attention! Wrong password, please try again'; @ldap_close($ldap); return $elettra_ldap_error; } } else { $elettra_ldap_error = 'ldap connection'; } return $elettra_ldap_error; } $comp = "available components <table style='width: 360px;'> <tr><td style='width: 120px;'>elettra</td><td style='width: 120px;'><a href='./magnet.php?machine=elettra'>3D</a></td><td style='width: 120px;'><a href='./magnet.php?svg&machine=elettra'>2D</a></td></tr> <tr><td>fermi</td><td><a href='./magnet.php?machine=fermi'>3D</a></td><td><a href='./magnet.php?svg&machine=fermi'>2D</a></td></tr> <tr><td>all</td><td><a href='./magnet.php'>3D</a></td><td><a href='./magnet.php?svg'>2D</a></td></tr> </table><br><br>Go to <a href='../starter.php'>starter</a><br><br> <a href='https://puma-01.elettra.eu/stat.php?json=diff'>monitor data connection status</a><br><br> "; // ---------------------------------------------------------------- // check access as administrator function check_admin_access() { global $debug, $sql, $username, $comp; $remote = $_SERVER['REMOTE_ADDR']; $forwarded = isset($_SERVER['HTTP_X_FORWARDED_FOR'])? $_SERVER['HTTP_X_FORWARDED_FOR']: 0; session_start(); $yy = date('Y'); if (isset($_REQUEST['logout'])) { $_SESSION['token'] = ''; die("<script>document.location='./panther.php';</script>"); } else if (empty($_REQUEST['elettra_ldap_email']) && isset($_SESSION['token'])) { $webtokenExpirationSeconds = 36000; // 10 hh $data = $sql->sql_secure("SELECT * FROM userlog_$yy WHERE webtoken=$1 AND EXTRACT(EPOCH FROM NOW()-date)<$webtokenExpirationSeconds ORDER BY date DESC LIMIT 1", array($_SESSION['token'])); if (empty($data)) {sleep(2); if (isset($_REQUEST['debug'])) echo "IP: $remote<br>"; emit_nav(''); die("<form method='post' action='?'>username <input type='text' name='elettra_ldap_email'><br><br>password <input type='password' name='elettra_ldap_password'> <input type='submit'></form></div></body></html>\n");} $username = $data[0]['username']; return; } if (isset($_REQUEST['elettra_ldap_email']) and isset($_REQUEST['elettra_ldap_password'])) { $email = $_REQUEST['elettra_ldap_email']; $password = $_REQUEST['elettra_ldap_password']; $r = elettra_ldap_auth($email, $password); if ($r != "Login OK") {emit_nav(''); die("login failed<br>$r<br>");} for ($i=0,$token=""; $i<5; $i++) { $token .= sprintf("%02x", rand(0, 256)); } $_SESSION['token'] = $token; $data = $sql->sql_secure("INSERT INTO userlog_$yy (date,webtoken,username,ip) VALUES (NOW(),$1,$2,$3)", array($token, $email, $_SERVER['REMOTE_ADDR'])); $username = $email; } else { emit_nav(''); die("$comp<br><br><br>Please enter Elettra credentials<br><br><form method='post' action='?'>username <input type='text' name='elettra_ldap_email'><br><br>password <input type='password' name='elettra_ldap_password'><br><br><input type='submit' value='submit'></form><br /></div></body></html>\n"); } } function emit_nav($username) { // <span style='color: black; margin-right: 1em;'>welcome lucio.zambon</span><a class='btn btn-primary' href='?logout'>logout</a> $u = empty($username)? '': "<span style='color: black; margin-right: 6em;right: 1em; top: 1em; position: fixed;'>welcome $username</span><a class='btn btn-primary' href='?logout' style='right: 1em; top: 0.5em; position: fixed;'>logout</a>"; echo " <nav class='navbar navbar-expand-sm bg-dark navbar-dark justify-content-end' style='background-color: #d9edf7 !important;'> <ul class='navbar-nav ms-auto' id='text'><table><tr> <td><a href='./panther.php' border='0'><img src='../img/logo.png' class='media-object' style='width:40px;height:40px; margin-left: -12px;'></a> <td><a href='./admin.php'><h2 style='color: black;'>PAnTHer Admin</a></td> </tr></table></ul> $u </nav> <div style='margin: 10px;'>\n"; } check_admin_access(); emit_nav($username); echo "$comp <a href='./elettra_lattice.php?json=diff'>elettra lattice diff</a><br> <a href='./elettra_lattice.php?json'>elettra lattice</a><br> <a href='./elettra_lattice.php?src'>elettra lattice sources</a><br> <a href='./component.php'>elettra components bundle (preview)</a><br> <a href='./component.php?save'>elettra components bundle (save)</a><br> <a href='./panther.php?envelope=debug'>elettra envelope (generate pulse at configurable index 'envelopeDebug')</a>"; ?>