From: <abe...@us...> - 2012-05-07 00:46:08
|
Revision: 5536 http://astlinux.svn.sourceforge.net/astlinux/?rev=5536&view=rev Author: abelbeck Date: 2012-05-07 00:46:01 +0000 (Mon, 07 May 2012) Log Message: ----------- web interface, add openvpn user/pass auth option Modified Paths: -------------- branches/1.0/package/webinterface/altweb/admin/openvpn.php branches/1.0/package/webinterface/altweb/admin/system.php branches/1.0/package/webinterface/altweb/common/version.php Added Paths: ----------- branches/1.0/package/webinterface/altweb/admin/openvpnuserpass.php Modified: branches/1.0/package/webinterface/altweb/admin/openvpn.php =================================================================== --- branches/1.0/package/webinterface/altweb/admin/openvpn.php 2012-05-06 21:47:45 UTC (rev 5535) +++ branches/1.0/package/webinterface/altweb/admin/openvpn.php 2012-05-07 00:46:01 UTC (rev 5536) @@ -82,6 +82,11 @@ '0' => 'None' ); +$auth_method_menu = array ( + 'no' => 'Certificate', + 'yes' => 'Cert. + User/Pass' +); + // Function: saveOVPNsettings // function saveOVPNsettings($conf_dir, $conf_file, $disabled = NULL) { @@ -97,6 +102,9 @@ } fwrite($fp, "### gui.openvpn.conf - start ###\n###\n"); + $value = 'OVPN_USER_PASS_VERIFY="'.$_POST['auth_method'].'"'; + fwrite($fp, "### Auth Method\n".$value."\n"); + $value = 'OVPN_DEV="'.$_POST['device'].'"'; fwrite($fp, "### Device\n".$value."\n"); @@ -222,6 +230,11 @@ } else { $result = 2; } + } elseif (isset($_POST['submit_user_pass'])) { + $disabled = isset($_POST['disabled']) ? $_POST['disabled'] : NULL; + $result = saveOVPNsettings($OVPNCONFDIR, $OVPNCONFFILE, $disabled); + header('Location: /admin/openvpnuserpass.php'); + exit; } elseif (isset($_POST['submit_new_server'])) { $result = 99; if (isset($_POST['confirm_new_server'])) { @@ -361,9 +374,24 @@ } putHtml("</center>"); ?> + <script language="JavaScript" type="text/javascript"> + //<![CDATA[ + function auth_method_change() { + var form = document.getElementById("iform"); + switch (form.auth_method.selectedIndex) { + case 0: // Certificate + form.submit_user_pass.style.visibility = "hidden"; + break; + case 1: // Cert. + User/Pass + form.submit_user_pass.style.visibility = "visible"; + break; + } + } + //]]> + </script> <center> <table class="layout"><tr><td><center> - <form method="post" action="<?php echo $myself;?>"> + <form id="iform" method="post" action="<?php echo $myself;?>"> <table width="100%" class="stdtable"> <tr><td style="text-align: center;" colspan="2"> <h2>OpenVPN Server Configuration:</h2> @@ -380,7 +408,24 @@ putHtml('<tr class="dtrow0"><td class="dialogText" style="text-align: left;" colspan="6">'); putHtml('<strong>Tunnel Options:</strong>'); putHtml('</td></tr>'); + putHtml('<tr class="dtrow1"><td style="text-align: right;" colspan="2">'); + putHtml('Auth Method:'); + putHtml('</td><td style="text-align: left;" colspan="2">'); + if (($auth_method = getVARdef($db, 'OVPN_USER_PASS_VERIFY')) === '') { + $auth_method = 'no'; + } + putHtml('<select name="auth_method" onchange="auth_method_change()">'); + foreach ($auth_method_menu as $key => $value) { + $sel = ($auth_method === $key) ? ' selected="selected"' : ''; + putHtml('<option value="'.$key.'"'.$sel.'>'.$value.'</option>'); + } + putHtml('</select>'); + putHtml('</td><td style="text-align: left;" colspan="2">'); + putHtml('<input type="submit" value="User/Pass" name="submit_user_pass" class="button" />'); + putHtml('</td></tr>'); + + putHtml('<tr class="dtrow1"><td style="text-align: right;" colspan="2">'); putHtml('Protocol:'); putHtml('</td><td style="text-align: left;" colspan="1">'); putHtml('<select name="protocol">'); @@ -602,6 +647,11 @@ putHtml('</form>'); putHtml('</center></td></tr></table>'); putHtml('</center>'); + putHtml('<script language="JavaScript" type="text/javascript">'); + putHtml('//<![CDATA['); + putHtml('auth_method_change();'); + putHtml('//]]>'); + putHtml('</script>'); } // End of HTTP GET require_once '../common/footer.php'; Added: branches/1.0/package/webinterface/altweb/admin/openvpnuserpass.php =================================================================== --- branches/1.0/package/webinterface/altweb/admin/openvpnuserpass.php (rev 0) +++ branches/1.0/package/webinterface/altweb/admin/openvpnuserpass.php 2012-05-07 00:46:01 UTC (rev 5536) @@ -0,0 +1,245 @@ +<?php + +// Copyright (C) 2012 Lonnie Abelbeck +// This is free software, licensed under the GNU General Public License +// version 3 as published by the Free Software Foundation; you can +// redistribute it and/or modify it under the terms of the GNU +// General Public License; and comes with ABSOLUTELY NO WARRANTY. + +// openvpnuserpass.php for AstLinux +// 06-05-2012 +// +// System location of /mnt/kd/rc.conf.d directory +$OPENVPNUSERPASSCONFDIR = '/mnt/kd/rc.conf.d'; +// System location of gui.openvpnuserpass.conf file +$OPENVPNUSERPASSCONFFILE = '/mnt/kd/rc.conf.d/gui.openvpnuserpass.conf'; + +$myself = $_SERVER['PHP_SELF']; + +require_once '../common/functions.php'; + +// Function: openvpnGETclients +// +function openvpnGETclients($vars) { + $id = 0; + + if (($line = getVARdef($vars, 'OVPN_USER_PASS')) !== '') { + $linetokens = explode("\n", $line); + foreach ($linetokens as $data) { + if ($data !== '') { + $datatokens = explode(' ', $data); + $db['data'][$id]['user'] = $datatokens[0]; + $db['data'][$id]['pass'] = $datatokens[1]; + $id++; + } + } + } + // Sort by Username + if ($id > 1) { + foreach ($db['data'] as $key => $row) { + $user[$key] = $row['user']; + } + array_multisort($user, SORT_ASC, SORT_STRING, $db['data']); + } + return($db); +} + +// Function: saveOPENVPNsettings +// +function saveOPENVPNsettings($conf_dir, $conf_file, $db, $delete = NULL) { + $result = 11; + + if (! is_dir($conf_dir)) { + return(3); + } + if (($fp = @fopen($conf_file,"wb")) === FALSE) { + return(3); + } + fwrite($fp, "### gui.openvpnuserpass.conf - start ###\n###\n"); + + $value = 'OVPN_USER_PASS="'; + fwrite($fp, "### Authentication\n".$value."\n"); + if (count($db['data']) > 0) { + foreach ($db['data'] as $data) { + if ($data['user'] !== '' && $data['pass'] !== '') { + $skip = FALSE; + if (! is_null($delete)) { + foreach ($delete as $deluser) { + if ($deluser === $data['user']) { + $skip = TRUE; + break; + } + } + } + if (! $skip) { + fwrite($fp, $data['user'].' '.$data['pass']."\n"); + } + } + } + } + fwrite($fp, '"'."\n"); + + fwrite($fp, "### gui.openvpnuserpass.conf - end ###\n"); + fclose($fp); + + return($result); +} + +// Function: addUserPass +// +function addUserPass(&$db, $id) { + + $user = str_replace(' ', '', $_POST['user']); + $pass = str_replace(' ', '', stripslashes($_POST['pass'])); + + if ($user === '') { + return(FALSE); + } + if ($pass === '') { + return(1); + } + + $db['data'][$id]['user'] = $user; + $db['data'][$id]['pass'] = $pass; + + return(TRUE); +} + +if (is_file($OPENVPNUSERPASSCONFFILE)) { + $vars = parseRCconf($OPENVPNUSERPASSCONFFILE); +} else { + $vars = NULL; +} +$db = openvpnGETclients($vars); + +if ($_SERVER['REQUEST_METHOD'] === 'POST') { + $result = 1; + if (! $global_admin) { + $result = 999; + } elseif (isset($_POST['submit_save']) || isset($_POST['submit_openvpn_config'])) { + $n = count($db['data']); + $id = $n; + for ($i = 0; $i < $n; $i++) { + if ($db['data'][$i]['user'] === str_replace(' ', '', $_POST['user'])) { + $id = $i; + break; + } + } + $ok = addUserPass($db, $id); + $result = saveOPENVPNsettings($OPENVPNUSERPASSCONFDIR, $OPENVPNUSERPASSCONFFILE, $db); + if ($result == 11 && $ok === 1) { + $result = 12; + } + if (isset($_POST['submit_openvpn_config'])) { + header('Location: /admin/openvpn.php'); + exit; + } + } elseif (isset($_POST['submit_delete'])) { + $delete = $_POST['delete']; + if (count($delete) > 0) { + $result = saveOPENVPNsettings($OPENVPNUSERPASSCONFDIR, $OPENVPNUSERPASSCONFFILE, $db, $delete); + } + } + header('Location: '.$myself.'?result='.$result); + exit; +} else { // Start of HTTP GET +$ACCESS_RIGHTS = 'admin'; +require_once '../common/header.php'; + + putHtml('<center>'); + if (isset($_GET['result'])) { + $result = $_GET['result']; + if ($result == 2) { + putHtml('<p style="color: red;">No Action, check "Confirm" for this action.</p>'); + } elseif ($result == 3) { + putHtml('<p style="color: red;">Error creating file.</p>'); + } elseif ($result == 11) { + putHtml('<p style="color: green;">Settings saved, click "OpenVPN Configuration" to return to previous screen.</p>'); + } elseif ($result == 12) { + putHtml('<p style="color: red;">Missing Password, User not added.</p>'); + } elseif ($result == 99) { + putHtml('<p style="color: red;">Action Failed.</p>'); + } elseif ($result == 999) { + putHtml('<p style="color: red;">Permission denied for user "'.$global_user.'".</p>'); + } else { + putHtml('<p style="color: orange;">No Action.</p>'); + } + } else { + putHtml('<p> </p>'); + } + putHtml('</center>'); +?> + <center> + <table class="layout"><tr><td><center> + <form method="post" action="<?php echo $myself;?>"> + <table width="100%" class="stdtable"> + <tr><td style="text-align: center;" colspan="5"> + <h2>OpenVPN Server User/Pass:</h2> + </td></tr><tr><td style="text-align: center;"> + <input type="submit" class="formbtn" value="Save Settings" name="submit_save" /> + </td><td width="30"> + </td><td style="text-align: center;"> + <input type="submit" value="OpenVPN Configuration" name="submit_openvpn_config" class="button" /> + </td><td width="30"> + </td><td style="text-align: center;"> + <input type="submit" class="formbtn" value="Delete Checked" name="submit_delete" /> + </td></tr></table> +<?php + + if (isset($_GET['id'])) { + $id = $_GET['id']; + $n = count($db['data']); + for ($i = 0; $i < $n; $i++) { + if ($id === $db['data'][$i]['user']) { + $ldb = $db['data'][$i]; + break; + } + } + } + if (is_null($ldb)) { + $ldb['user'] = ''; + $ldb['pass'] = ''; + } + + putHtml('<table width="100%" class="stdtable">'); + putHtml('<tr class="dtrow0"><td width="160"> </td><td> </td></tr>'); + + putHtml('<tr class="dtrow0"><td class="dialogText" style="text-align: left;" colspan="2">'); + putHtml('<strong>Client Credentials:</strong>'); + putHtml('</td></tr>'); + putHtml('<tr><td style="text-align: right;">'); + putHtml('Username:'); + putHtml('</td><td style="text-align: left;">'); + putHtml('<input type="text" size="36" maxlength="64" name="user" value="'.$ldb['user'].'" />'); + putHtml('</td></tr>'); + putHtml('<tr><td style="text-align: right;">'); + putHtml('Password:'); + putHtml('</td><td style="text-align: left;">'); + putHtml('<input type="password" size="36" maxlength="128" name="pass" value="'.$ldb['pass'].'" />'); + putHtml('</td></tr>'); + putHtml('</table>'); + + putHtml('<table width="66%" class="datatable">'); + putHtml("<tr>"); + + if (($n = count($db['data'])) > 0) { + echo '<td class="dialogText" style="text-align: left; font-weight: bold;">', "Users", "</td>"; + echo '<td class="dialogText" style="text-align: center; font-weight: bold;">', "Delete", "</td>"; + for ($i = 0; $i < $n; $i++) { + putHtml("</tr>"); + echo '<tr ', ($i % 2 == 0) ? 'class="dtrow0"' : 'class="dtrow1"', '>'; + echo '<td><a href="'.$myself.'?id='.$db['data'][$i]['user'].'" class="actionText">'.$db['data'][$i]['user'].'</a>', '</td>'; + echo '<td style="text-align: center;">', '<input type="checkbox" name="delete[]" value="', $db['data'][$i]['user'], '" />', '</td>'; + } + } else { + echo '<td style="color: orange; text-align: center;">No Client Credentials.', '</td>'; + } + putHtml("</tr>"); + putHtml("</table>"); + putHtml("</form>"); + putHtml("</center></td></tr></table>"); + putHtml("</center>"); +} // End of HTTP GET +require_once '../common/footer.php'; + +?> Property changes on: branches/1.0/package/webinterface/altweb/admin/openvpnuserpass.php ___________________________________________________________________ Added: svn:executable + * Modified: branches/1.0/package/webinterface/altweb/admin/system.php =================================================================== --- branches/1.0/package/webinterface/altweb/admin/system.php 2012-05-06 21:47:45 UTC (rev 5535) +++ branches/1.0/package/webinterface/altweb/admin/system.php 2012-05-07 00:46:01 UTC (rev 5536) @@ -767,6 +767,7 @@ $var === 'GUI_FIREWALL_RULES' || $var === 'STATICHOSTS' || $var === 'PPTP_USER_PASS' || + $var === 'OVPN_USER_PASS' || $var === 'IPSECM_XAUTH_USER_PASS' || $var === 'IPSEC_PSK_ASSOCIATIONS') { $value = '********'; Modified: branches/1.0/package/webinterface/altweb/common/version.php =================================================================== --- branches/1.0/package/webinterface/altweb/common/version.php 2012-05-06 21:47:45 UTC (rev 5535) +++ branches/1.0/package/webinterface/altweb/common/version.php 2012-05-07 00:46:01 UTC (rev 5536) @@ -1,6 +1,6 @@ <?php // version.php for AstLinux Alternate Web Interface -$GUI_VERSION = '1.8.10'; +$GUI_VERSION = '1.8.11'; ?> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |