Serghey Rodin 13 лет назад
Родитель
Сommit
c05fb35800

+ 1 - 1
bin/v_add_sys_ip

@@ -19,7 +19,7 @@ ip=$1
 mask=$2
 interface="${3-eth0}"
 user="${4-admin}"
-ip_status="${5-shared}"
+ip_status="${5-shared}"     # can be dedicated as well   
 ip_name=$6
 
 # Includes

+ 4 - 4
bin/v_list_sys_interfaces

@@ -17,11 +17,11 @@ source $VESTA/func/main.sh
 
 # Json function
 json_list_iface() {
-    interfaces=$(cat /proc/net/dev | grep : | cut -f 1 -d : | tr -d ' ')
+    dev=$(cat /proc/net/dev |grep : |cut -f 1 -d : |tr -d ' ' |grep -v lo)
     int_counter=$(echo "$interfaces" | wc -l)
     i=1
     echo '['
-    for interface in $interfaces; do
+    for interface in $dev; do
         if [ "$i" -lt "$int_counter" ]; then
             echo -e  "\t\"$interface\","
         else
@@ -34,12 +34,12 @@ json_list_iface() {
 
 # Shell function
 shell_list_iface() {
-    interfaces=$(cat /proc/net/dev | grep : | cut -f 1 -d : | tr -d ' ')
+    dev=$(cat /proc/net/dev |grep : |cut -f 1 -d : |tr -d ' ' |grep -v lo)
     if [ -z "$nohead" ]; then
         echo "INTERFACES"
         echo "----------"
     fi
-    for interface in $interfaces; do
+    for interface in $dev; do
         echo "$interface"
     done
 }

+ 1 - 1
bin/v_list_sys_ip

@@ -74,7 +74,7 @@ conf=$VESTA/data/ips/$IP
 
 # Defining fileds to select
 fields='$IP $OWNER $STATUS $NAME $U_SYS_USERS $U_WEB_DOMAINS $INTERFACE
-    $NETMASK $DATE'
+    $NETMASK $TIME $DATE'
 
 # Listing ip
 case $format in 

+ 64 - 0
bin/v_list_sys_users

@@ -0,0 +1,64 @@
+#!/bin/bash
+# info: list system users
+# options: [format]
+#
+# The function for obtaining the list of system users.
+
+
+#----------------------------------------------------------#
+#                    Variable&Function                     #
+#----------------------------------------------------------#
+
+# Argument defenition
+format=${1-shell}
+
+# Includes
+source $VESTA/func/main.sh
+
+# Json function
+json_list_users() {
+    users=$(grep @ /etc/passwd|cut -f 1 -d :)
+    int_counter=$(echo "$users" | wc -l)
+    i=1
+    echo '['
+    for user in $users; do
+        if [ "$i" -lt "$int_counter" ]; then
+            echo -e  "\t\"$user\","
+        else
+            echo -e  "\t\"$user\""
+        fi
+        (( ++i))
+    done
+    echo "]"
+}
+
+# Shell function
+shell_list_users() {
+    if [ -z "$nohead" ]; then
+        echo "USERS"
+        echo "----------"
+    fi
+    for user in $(grep @ /etc/passwd|cut -f 1 -d :); do
+        echo "$user"
+    done
+}
+
+
+#----------------------------------------------------------#
+#                       Action                             #
+#----------------------------------------------------------#
+
+# Listing domains
+case $format in 
+    json)   json_list_users ;;
+    plain)  nohead=1; shell_list_users ;;
+    shell)  shell_list_users ;;
+    *)      check_args '1' '0' '[format]' ;;
+esac
+
+
+#----------------------------------------------------------#
+#                       Vesta                              #
+#----------------------------------------------------------#
+
+exit

+ 3 - 2
func/ip.sh

@@ -1,7 +1,8 @@
 # Validationg ip address
 is_ip_valid() {
-    check_ifc=$(/sbin/ifconfig |grep "inet addr:$ip")
-    if [ ! -e "$VESTA/data/ips/$ip" ] || [ -z "$check_ifc" ]; then
+    #check_ifc=$(/sbin/ifconfig |grep "inet addr:$ip")
+    #if [ ! -e "$VESTA/data/ips/$ip" ] || [ -z "$check_ifc" ]; then
+    if [ ! -e "$VESTA/data/ips/$ip" ] ; then
         echo "Error: IP $ip not exist"
         log_event "$E_NOTEXIST" "$EVENT"
         exit $E_NOTEXIST

+ 88 - 0
web/add/ip/index.php

@@ -0,0 +1,88 @@
+<?php
+// Init
+error_reporting(NULL);
+ob_start();
+session_start();
+$TAB = 'IP';
+include($_SERVER['DOCUMENT_ROOT']."/inc/main.php");
+
+// Header
+include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html');
+
+// Panel
+top_panel($user,$TAB);
+
+// Are you admin?
+if ($_SESSION['user'] == 'admin') {
+    if (!empty($_POST['ok'])) {
+        // Check input
+        if (empty($_POST['v_ip'])) $errors[] = 'ip address';
+        if (empty($_POST['v_netmask'])) $errors[] = 'netmask';
+        if (empty($_POST['v_interface'])) $errors[] = 'interface';
+        if (empty($_POST['v_owner'])) $errors[] = 'assigned used';
+        if (empty($_POST['v_interface'])) $errors[] = 'interface';
+
+        // Protect input
+        $v_ip = escapeshellarg($_POST['v_ip']);
+        $v_netmask = escapeshellarg($_POST['v_netmask']);
+        $v_name = escapeshellarg($_POST['v_name']);
+
+        $v_interface = $_POST['v_interface'];
+        $v_shared = $_POST['v_shared'];
+        if ($v_shared == 'on') {
+            $ip_status = 'shared';
+        } else {
+            $ip_status = 'dedicated';
+            $v_dedicated = 'yes';
+        }
+
+        $v_owner = $_POST['v_owner'];
+
+        // Check for errors
+        if (!empty($errors[0])) {
+            foreach ($errors as $i => $error) {
+                if ( $i == 0 ) {
+                    $error_msg = $error;
+                } else {
+                    $error_msg = $error_msg.", ".$error;
+                }
+            }
+            $_SESSION['error_msg'] = "Error: field ".$error_msg." can not be blank.";
+        } else {
+            // Add IP
+            $v_interface = escapeshellarg($_POST['v_interface']);
+            $v_owner = $_POST['v_owner'];
+            exec (VESTA_CMD."v_add_sys_ip ".$v_ip." ".$v_netmask." ".$v_interface."  ".$v_owner." '".$ip_status."' ".$v_name, $output, $return_var);
+            $v_owner = $_POST['v_owner'];
+            $v_interface = $_POST['v_interface'];
+            if ($return_var != 0) {
+                $error = implode('<br>', $output);
+                if (empty($error)) $error = 'Error: vesta did not return any output.';
+                $_SESSION['error_msg'] = $error;
+                unset($v_password);
+                unset($output);
+            } else {
+                $_SESSION['ok_msg'] = "OK: ip <b>".$_POST['v_ip']."</b> has been created successfully.";
+                unset($v_ip);
+                unset($v_netmask);
+                unset($v_name);
+                unset($output);
+            }
+        }
+    }
+    exec (VESTA_CMD."v_list_sys_interfaces 'json'", $output, $return_var);
+    $interfaces = json_decode(implode('', $output), true);
+    unset($output);
+
+    exec (VESTA_CMD."v_list_sys_users 'json'", $output, $return_var);
+    $users = json_decode(implode('', $output), true);
+    unset($output);
+
+    include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/menu_add_ip.html');
+    include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/add_ip.html');
+    unset($_SESSION['error_msg']);
+    unset($_SESSION['ok_msg']);
+}
+
+// Footer
+include($_SERVER['DOCUMENT_ROOT'].'/templates/footer.html');

+ 16 - 0
web/delete/ip/index.php

@@ -0,0 +1,16 @@
+<?php
+// Init
+error_reporting(NULL);
+ob_start();
+session_start();
+include($_SERVER['DOCUMENT_ROOT']."/inc/main.php");
+
+if ($_SESSION['user'] == 'admin') {
+    if (!empty($_GET['ip'])) {
+        $v_ip = escapeshellarg($_GET['ip']);
+        exec (VESTA_CMD."v_delete_sys_ip ".$v_ip, $output, $return_var);
+        unset($output);
+    }
+}
+
+header("Location: /list/ip/");

+ 120 - 0
web/edit/ip/index.php

@@ -0,0 +1,120 @@
+<?php
+// Init
+error_reporting(NULL);
+ob_start();
+session_start();
+
+$TAB = 'IP';
+include($_SERVER['DOCUMENT_ROOT']."/inc/main.php");
+
+// Header
+include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html');
+
+// Panel
+top_panel($user,$TAB);
+
+// Are you admin?
+if ($_SESSION['user'] == 'admin') {
+
+    // Check user argument?
+    if (empty($_GET['ip'])) {
+        header("Location: /list/ip/");
+        exit;
+    }
+
+    $v_ip = escapeshellarg($_GET['ip']);
+    exec (VESTA_CMD."v_list_sys_ip ".$v_ip." 'json'", $output, $return_var);
+    if ($return_var != 0) {
+        $error = implode('<br>', $output);
+        if (empty($error)) $error = 'Error: vesta did not return any output.';
+        $_SESSION['error_msg'] = $error;
+    } else {
+        $data = json_decode(implode('', $output), true);
+        unset($output);
+        $v_username = $user;
+        $v_ip = $_GET['ip'];
+        $v_netmask = $data[$v_ip]['NETMASK'];
+        $v_interace = $data[$v_ip]['INTERFACE'];
+        $v_name = $data[$v_ip]['NAME'];
+        $v_ipstatus = $data[$v_ip]['STATUS'];
+        if ($v_ipstatus == 'dedicated') $v_dedicated = 'yes';
+        $v_owner = $data[$v_ip]['OWNER'];
+        $v_date = $data[$v_ip]['DATE'];
+        $v_time = $data[$v_ip]['TIME'];
+        $v_suspended = $data[$v_ip]['SUSPENDED'];
+        if ( $v_suspended == 'yes' ) {
+            $v_status =  'suspended';
+        } else {
+            $v_status =  'active';
+        }
+
+        exec (VESTA_CMD."v_list_sys_users 'json'", $output, $return_var);
+        $users = json_decode(implode('', $output), true);
+        unset($output);
+
+        // Action
+        if (!empty($_POST['save'])) {
+            $v_username = $user;
+            $v_ip = escapeshellarg($_POST['v_ip']);
+
+            // Change Status
+            if (($v_ipstatus == 'shared') && (empty($_POST['v_shared'])) && (empty($_SESSION['error_msg']))) {
+                exec (VESTA_CMD."v_change_sys_ip_status ".$v_ip." 'dedicated'", $output, $return_var);
+                if ($return_var != 0) {
+                    $error = implode('<br>', $output);
+                    if (empty($error)) $error = 'Error: vesta did not return any output.';
+                    $_SESSION['error_msg'] = $error;
+                }
+                unset($output);
+                $v_dedicated = 'yes'; 
+            }
+            if (($v_ipstatus == 'dedicated') && (!empty($_POST['v_shared'])) && (empty($_SESSION['error_msg']))) {
+                exec (VESTA_CMD."v_change_sys_ip_status ".$v_ip." 'shared'", $output, $return_var);
+                if ($return_var != 0) {
+                    $error = implode('<br>', $output);
+                    if (empty($error)) $error = 'Error: vesta did not return any output.';
+                    $_SESSION['error_msg'] = $error;
+                }
+                unset($output);
+                unset($v_dedicated);
+            }
+
+            // Change owner
+            if (($v_owner != $_POST['v_owner']) && (empty($_SESSION['error_msg']))) {
+                $v_owner = escapeshellarg($_POST['v_owner']);
+                exec (VESTA_CMD."v_change_sys_ip_owner ".$v_ip." ".$v_owner, $output, $return_var);
+                if ($return_var != 0) {
+                    $error = implode('<br>', $output);
+                    if (empty($error)) $error = 'Error: vesta did not return any output.';
+                    $_SESSION['error_msg'] = $error;
+                }
+                $v_owner = $_POST['v_owner'];
+                unset($output);
+            }
+
+            // Change Name
+            if (($v_name != $_POST['v_name']) && (empty($_SESSION['error_msg']))) {
+                $v_name = escapeshellarg($_POST['v_name']);
+                exec (VESTA_CMD."v_change_sys_ip_name ".$v_ip." ".$v_name, $output, $return_var);
+                if ($return_var != 0) {
+                    $error = implode('<br>', $output);
+                    if (empty($error)) $error = 'Error: vesta did not return any output.';
+                    $_SESSION['error_msg'] = $error;
+                }
+                unset($output);
+            }
+
+            if (empty($_SESSION['error_msg'])) {
+                $_SESSION['ok_msg'] = "OK: changes has been saved.";
+            }
+        }
+    }
+
+    include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/menu_edit_ip.html');
+    include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/edit_ip.html');
+    unset($_SESSION['error_msg']);
+    unset($_SESSION['ok_msg']);
+}
+
+// Footer
+include($_SERVER['DOCUMENT_ROOT'].'/templates/footer.html');

+ 74 - 0
web/templates/admin/add_ip.html

@@ -0,0 +1,74 @@
+<script type="text/javascript">
+  function elementHideShow(elementToHideOrShow)
+    {
+      var el = document.getElementById(elementToHideOrShow);
+      if (el.style.display == "block") {
+        el.style.display = "none";
+      } else {
+        el.style.display = "block";
+      }
+    }
+    function randomString() {
+        var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
+        var string_length = 10;
+        var randomstring = '';
+        for (var i=0; i<string_length; i++) {
+          var rnum = Math.floor(Math.random() * chars.length);
+          randomstring += chars.substring(rnum,rnum+1);
+        }
+        document.getElementById('v_password').value = randomstring;
+    }
+</script>
+
+<table class='data'>
+<tr class="data-add">
+    <td class="data-dotted" style="padding: 0px 10px 0px 0px" width="150">
+        <table class="data-col1">
+            <tr><td style="padding: 18 0 4 18;"></td></tr>
+        </table>
+    </td>
+    <td class="data-dotted" width="830px" style="vertical-align:top;">
+        <table width="830px"><tr>
+            <td></td>
+        </tr></table>
+        <table class="data-col2" width="600px">
+            <form method="post" name="v_add_user">
+            <tr><td class="add-text" style="padding: 10 0 0 2px;">IP</td></tr>
+            <tr><td><input type="text" size="20" class="add-input" name="v_ip" <?php if (!empty($v_ip)) echo "value=".$v_ip; ?>></td></tr>
+            <tr><td class="add-text" style="padding: 10px 0 0 2px;">Netmask</td></tr>
+            <tr><td></span><input type="text" size="20" class="add-input" name="v_netmask" <?php if (!empty($v_netmask)) echo "value=".$v_netmask; ?>></tr>
+            <tr><td class="add-text" style="padding: 10 0 0 2px;">Interface</td></tr>
+            <tr><td><select class="add-list" name="v_interface">
+            <?php
+                foreach ($interfaces as $key => $value) {
+                    echo "\t\t\t\t<option value=\"".$value."\"";
+                    if ((!empty($v_interface)) && ( $value == $v_interface )) echo ' selected';
+                    echo ">".$value."</option>\n";
+                }
+            ?>
+            </select></td></tr>
+            <tr><td class="add-text" style="padding: 10px 0 0 2px;">Shared</td></tr>
+            <tr><td><input type="checkbox" size="20" class="add-checkbox" name="v_shared" <?php if (empty($v_dedicated)) echo "checked=yes" ?> onclick="javascript:elementHideShow('usrtable');"></tr>
+            <tr><td><table style="display:<?php if (empty($v_dedicated)) { echo 'none';} else {echo 'block';}?> ;" id="usrtable"><tr>
+                <tr><td class="add-text" style="padding: 0 0 0 2px;">Assigned User</td></tr>
+                <tr><td><select class="add-list" name="v_owner">
+                <?php
+                    foreach ($users as $key => $value) {
+                        echo "\t\t\t\t<option value=\"".$value."\"";
+                        if ((!empty($v_owner)) && ( $value == $v_owner )) echo ' selected';
+                        echo ">".$value."</option>\n";
+                    }
+                ?>
+                </select></td></tr>
+            </table></td></tr>
+            <tr><td class="add-text" style="padding: 10 0 0 2px;">Associated Domain <span style="padding:0 0 0 6px; font-size: 10pt; color:#555;">(optional)</span></td></tr>
+            <tr><td><input type="text" size="20" class="add-input" name="v_name" <?php if (!empty($v_name)) echo "value=".$v_name; ?>></td></tr>
+
+            <tr><td style="padding: 24px 0 0 0;">
+                <input type="submit" name="ok" value="OK" class="add-button"></form>
+                <input type="button" class="add-button" value="Cancel" onClick="location.href='/list/ip/'">
+            </td></tr>
+        </table>
+    </td>
+</tr>
+</table>

+ 66 - 0
web/templates/admin/edit_ip.html

@@ -0,0 +1,66 @@
+<script type="text/javascript">
+  function elementHideShow(elementToHideOrShow)
+    {
+      var el = document.getElementById(elementToHideOrShow);
+      if (el.style.display == "block") {
+        el.style.display = "none";
+      } else {
+        el.style.display = "block";
+      }
+    }
+    function randomString() {
+        var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
+        var string_length = 10;
+        var randomstring = '';
+        for (var i=0; i<string_length; i++) {
+          var rnum = Math.floor(Math.random() * chars.length);
+          randomstring += chars.substring(rnum,rnum+1);
+        }
+        document.getElementById('v_password').value = randomstring;
+    }
+</script>
+
+<table class='data'>
+<tr class="data-add">
+    <td class="data-dotted" style="padding: 0px 10px 0px 0px" width="150">
+        <table class="data-col1">
+            <tr><td style="padding: 24px 0 2px 4px;"><a class="data-date" ?><?php echo date("d M Y", strtotime($v_date))?></a></td></tr>
+            <tr><td style="padding: 0 0 6px 4px;"><a class="data-date" ?><?php echo $v_time?></a></td></tr>
+            <tr><td style="padding: 0 0 0 21px;" class="data-<?php echo $v_status ?>"><b><?php echo $v_status ?></b></td></tr>
+        </table>
+    </td>
+    <td class="data-dotted" width="830px" style="vertical-align:top;">
+        <table width="830px"><tr>
+            <td></td>
+        </tr></table>
+        <table class="data-col2" width="600px">
+            <form method="post" name="v_add_user">
+            <tr><td class="add-text" style="padding: 10 0 0 2px;">IP</td></tr>
+            <tr><td><input type="text" size="20" class="add-input" name="v_ip" <?php if (!empty($v_ip)) echo "value=".$v_ip; ?> disabled> <input type="hidden" name="v_ip" <?php if (!empty($v_ip)) echo "value=".$v_ip; ?>></td></tr>
+            <tr><td class="add-text" style="padding: 10px 0 0 2px;">Netmask</td></tr>
+            <tr><td></span><input type="text" size="20" class="add-input" name="v_netmask" <?php if (!empty($v_netmask)) echo "value=".$v_netmask; ?> disabled></tr>
+            <tr><td class="add-text" style="padding: 10 0 0 2px;">Interface</td></tr>
+            <tr><td></span><input type="text" size="20" class="add-input" name="v_netmask" <?php if (!empty($v_interace)) echo "value=".$v_interace; ?> disabled></tr>
+            <tr><td class="add-text" style="padding: 10px 0 0 2px;">Shared</td></tr>
+            <tr><td><input type="checkbox" size="20" class="add-checkbox" name="v_shared" <?php if (empty($v_dedicated)) echo "checked=yes" ?></tr>
+            <tr><td class="add-text" style="padding: 10px 0 0 2px;">Assigned User</td></tr>
+            <tr><td><select class="add-list" name="v_owner">
+                <?php
+                    foreach ($users as $key => $value) {
+                        echo "\t\t\t\t<option value=\"".$value."\"";
+                        if ((!empty($v_owner)) && ( $value == $v_owner )) echo ' selected';
+                        echo ">".$value."</option>\n";
+                    }
+                ?>
+                </select></td></tr>
+            <tr><td class="add-text" style="padding: 10 0 0 2px;">Associated Domain <span style="padding:0 0 0 6px; font-size: 10pt; color:#555;">(optional)</span></td></tr>
+            <tr><td><input type="text" size="20" class="add-input" name="v_name" <?php if (!empty($v_name)) echo "value=".$v_name; ?>></td></tr>
+
+            <tr><td style="padding: 24px 0 0 0;">
+                <input type="submit" name="save" value="Save" class="add-button"></form>
+                <input type="button" class="add-button" value="Cancel" onClick="location.href='/list/ip/'">
+            </td></tr>
+        </table>
+    </td>
+</tr>
+</table>

+ 30 - 1
web/templates/admin/list_ip.html

@@ -4,6 +4,28 @@
 foreach ($data as $key => $value) {
     ++$i;
 ?>
+<script type="text/javascript">
+    $(function(){
+        $('#delete_dialog_<?php echo "$i" ?>').dialog({
+            modal: true,
+            autoOpen: false,
+            width: 360,
+            buttons: {
+                "Ok": function(event, ui) {
+                     location.href = '/delete/ip/?ip=<?php echo "$key" ?>';
+                },
+                "Cancel": function() {
+                    $(this).dialog("close");
+                }
+            }
+        });
+        $('#delete_link_<?php echo "$i" ?>').click(function(){
+            $('#delete_dialog_<?php echo "$i" ?>').dialog('open');
+            return false;
+        });
+
+    });
+</script>
 
 <tr class="data-row">
     <td class="data-dotted" style="padding: 0px 10px 0px 0px" width="150">
@@ -16,7 +38,14 @@ foreach ($data as $key => $value) {
     <td class="data-dotted" width="830px" style="vertical-align:top;">
         <table width="830px"><tr>
             <td></td>
-            <td class="data-controls" width="70px"><img src="/images/delete.png" width="7px" height="7px"><a href="#"> delete</a></td>
+            <td class="data-controls" width="50px"><img src="/images/edit.png" width="8px" height="8px"><a href="/edit/ip/?ip=<?php echo "$key" ?>"> edit</a></td>
+            <td class="data-controls" width="70px">
+                <img src="/images/delete.png" width="7px" height="7px">
+                <a href="#" id="delete_link_<?php echo $i ?>"> delete</a>
+                <div id="delete_dialog_<?php echo $i ?>" title="Confirmation">
+                    <p class="counter-value">Are you sure you want to delete <b><?php echo "$key" ?></b> ip?</p>
+                </div>
+            </td>
         </tr></table>
 
         <table class="data-col2" width="830px">

+ 15 - 0
web/templates/admin/menu_add_ip.html

@@ -0,0 +1,15 @@
+<table class="sub-menu">
+<tr>
+    <td style="padding: 14px 0 24px 0;" ><a class="add-name"><b>Adding IP Address</b></a>
+    <?php 
+        if (!empty($_SESSION['error_msg'])) {
+            echo "<a class=\"add-error\"> → ".$_SESSION['error_msg']."</a>";
+        } else {
+            if (!empty($_SESSION['ok_msg'])) {
+                echo "<a class=\"add-ok\"> → ".$_SESSION['ok_msg']."</a>";
+            }
+        }
+    ?>
+    </td>
+</tr>
+</table>

+ 15 - 0
web/templates/admin/menu_edit_ip.html

@@ -0,0 +1,15 @@
+<table class="sub-menu">
+<tr>
+    <td style="padding: 14px 0 24px 0;" ><a class="add-name"><b>Editing IP Address</b></a>
+    <?php 
+        if (!empty($_SESSION['error_msg'])) {
+            echo "<a class=\"add-error\"> → ".$_SESSION['error_msg']."</a>";
+        } else {
+            if (!empty($_SESSION['ok_msg'])) {
+                echo "<a class=\"add-ok\"> → ".$_SESSION['ok_msg']."</a>";
+            }
+        }
+    ?>
+    </td>
+</tr>
+</table>