593 lines
31 KiB
PHP
593 lines
31 KiB
PHP
<?php
|
|
function clean($str) {
|
|
$search = array('&' , '"' , "'" , '<' , '>' );
|
|
$replace = array('&', '"', ''', '<', '>' );
|
|
|
|
$str = str_replace($search, $replace, $str);
|
|
return $str;
|
|
}
|
|
if(isset($_REQUEST['logout'])){
|
|
session_start();
|
|
session_unset();
|
|
session_destroy();
|
|
} else {
|
|
session_start();
|
|
}
|
|
$mode="";
|
|
|
|
function checkvm($vmname) {
|
|
$shellout = shell_exec("/usr/bin/nlvmi checkvm $vmname bla");//){
|
|
if (preg_match_all('/not running/', $shellout)){
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
function serverdepropdown($server, $val, $what){
|
|
if ($what == "cdrom"){
|
|
$dir = "isodirectory";
|
|
$enddiv = "</div>";
|
|
} elseif (preg_match('/drive/', $what)) {
|
|
$dir = "vmdirectory";
|
|
$enddiv="";
|
|
}
|
|
echo "<div class=row><div class=col-md-1 style=text-align:right>$what</div><div class=col-md-2><div class=dropdown><button class=\"btn btn-secondary dropdown-toggle\" type=button id=".$what."button data-toggle=dropdown aria-haspopup=true aria-expanded=false>$val</button>";
|
|
echo "<div class=dropdown-menu aria-labelledby=".$what."button>";
|
|
echo "<a class=dropdown-item href=\"javascript:dropdown('".$what."button','')\">no $what</a><div class=dropdown-divider></div>";
|
|
$shellout=shell_exec("/usr/bin/nlvmi listdir $server $dir");
|
|
$files = explode("\n", $shellout);
|
|
for ($f=0; $f<count($files); $f++){
|
|
$file = explode(" ", $files[$f]);
|
|
$lastpart = count($file) -1;
|
|
if((preg_match('/\//', $file[$lastpart]))&&(!preg_match('/^d/', $file[0]))){
|
|
echo "<a class=dropdown-item href=\"javascript:dropdown('".$what."button','$file[$lastpart]')\">$file[$lastpart]</a>";
|
|
}
|
|
}
|
|
echo "$enddiv</div></div></div><input type=hidden id=".$what."buttonh name=$what value=$val>";
|
|
}
|
|
|
|
//read config file
|
|
$configfile = new SplFileObject("/etc/nlvmi/nlvmi.conf");
|
|
while (!$configfile->eof()) {
|
|
$line = $configfile->fgets();
|
|
if (!preg_match('/^#/', $line)){
|
|
if (!preg_match('/^$/', $line)){
|
|
if (preg_match('/=/', $line)){
|
|
$configparam = explode('=', $line);
|
|
$p = rtrim($configparam[1]);
|
|
//echo "B$p";
|
|
$config[$configparam[0]]=str_replace('"', '', $p);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
$file = null;
|
|
|
|
//check db connection
|
|
if ($config['DATABASETYPE']=="sqlite"){
|
|
$db_handle = new SQLite3($config['SQLITEFILE']);
|
|
$query = "SELECT name FROM sqlite_master WHERE type='table' AND name='vms';";
|
|
$db_handle->exec($query);
|
|
$result = $db_handle->query($query);
|
|
$row = $result->fetchArray();
|
|
if (!$row['name']=="vms"){
|
|
echo "DB connection failed!";
|
|
exit;
|
|
}
|
|
}
|
|
|
|
//check login
|
|
$usersfound = "no";
|
|
$sql="SELECT * FROM users LIMIT 1";
|
|
$res = $db_handle->query($sql);
|
|
while ($row = $res->fetchArray(SQLITE3_ASSOC)){
|
|
$usersfound="yes";
|
|
if ($_SESSION['username']=="inituser"){
|
|
session_unset();
|
|
session_destroy();
|
|
session_start();
|
|
echo "killed inituser!";
|
|
}
|
|
}
|
|
|
|
if ($usersfound=="no"){
|
|
$_SESSION['username']="inituser";
|
|
$_SESSION['isadmin']="1";
|
|
if (!isset($_POST['newusername'])){
|
|
echo "<h1>You have no users in the datbase!</h1></br>";
|
|
$mode="usermgmt";
|
|
}
|
|
} elseif ((isset($_POST['login']))&&(isset($_POST['username']))&&(isset($_POST['password']))){
|
|
$user = clean($_POST['username']);
|
|
$pass = clean($_POST['password']);
|
|
$sql="SELECT password,admin FROM users WHERE username='$user'";
|
|
$res = $db_handle->query($sql);
|
|
while ($row = $res->fetchArray(SQLITE3_ASSOC)){
|
|
if (password_verify($pass, $row['password'])){
|
|
$_SESSION['username']=$user;
|
|
$_SESSION['isadmin']=$row['admin'];
|
|
} else {
|
|
echo "Password not correct!";
|
|
}
|
|
}
|
|
}
|
|
|
|
function checkmacfree($vmname,$mac,$db_handle){
|
|
$sql="SELECT vmname FROM vms WHERE (macaddr1='$mac' OR macaddr2='$mac' OR macaddr3='$mac') AND NOT vmname='$vmname'";
|
|
//echo "na";
|
|
$res = $db_handle->query($sql);
|
|
while ($row = $res->fetchArray(SQLITE3_ASSOC)){
|
|
return "$row[vmname] uses the mac $mac already!";
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
//delete vms
|
|
if (isset($_SESSION['username'])){
|
|
if ((isset($_POST['deletevm']))&&(isset($_POST['deletename']))){
|
|
if($_SESSION['isadmin']!=1){
|
|
echo "you are not allowed to delete vms!";
|
|
} else {
|
|
$vmname = clean($_POST['deletename']);
|
|
$vmid = clean($_POST['deletevm']);
|
|
$sql="SELECT id FROM vms WHERE vmname='$vmname' AND id='$vmid'";
|
|
$res = $db_handle->query($sql);
|
|
while ($row = $res->fetchArray(SQLITE3_ASSOC)){
|
|
$sqld="DELETE FROM vms WHERE id='$vmid'";
|
|
if ($db_handle->query($sqld)){
|
|
echo "VM $vmname deleted!";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
//insert new user in db
|
|
if(isset($_POST['newusername'])){
|
|
if($_SESSION['isadmin']!=1){
|
|
echo "you are not allowed to add usernames!";
|
|
} else {
|
|
$newusername = clean($_POST['newusername']);
|
|
$newpassword = password_hash(clean($_POST['newpassword']), PASSWORD_DEFAULT);
|
|
if ($_POST['isadmin']=="on"){
|
|
$isadmin = "1";
|
|
} else {
|
|
$isadmin = "0";
|
|
}
|
|
$sqlu="SELECT id FROM users WHERE username='$newusername'";
|
|
$res = $db_handle->query($sqlu);
|
|
while ($row = $res->fetchArray(SQLITE3_ASSOC)){
|
|
echo "username already exist!";
|
|
exit;
|
|
}
|
|
$sql="INSERT INTO users (username,password,admin) VALUES('$newusername', '$newpassword', '$isadmin')";
|
|
$res=$db_handle->query($sql);
|
|
$res=$db_handle->query($sqlu);
|
|
while ($row = $res->fetchArray(SQLITE3_ASSOC)){
|
|
echo "success";
|
|
exit;
|
|
}
|
|
echo "Failed to insert into DB!";
|
|
exit;
|
|
}
|
|
}
|
|
//update user in db
|
|
if(isset($_POST['changeusername'])){
|
|
if($_SESSION['isadmin']!=1){
|
|
echo "you are not allowed to change usernames!";
|
|
} else {
|
|
$userchange=clean($_POST['userchange']);
|
|
$username=clean($_POST['changeusername']);
|
|
if($_POST['passwordchange']==""){
|
|
$passwd ="";
|
|
} else {
|
|
$pass=password_hash(clean($_POST['passwordchange']), PASSWORD_DEFAULT);
|
|
$passwd="password='$pass',";
|
|
}
|
|
if ($_POST['isadmin']=="on"){
|
|
$isadmin = "1";
|
|
} else {
|
|
$isadmin = "0";
|
|
}
|
|
$sql="UPDATE users SET username='$username', $passwd admin='$isadmin' where id='$userchange'";
|
|
if($db_handle->query($sql)){
|
|
echo "success";
|
|
exit;
|
|
}
|
|
}
|
|
}
|
|
//insert new server in db
|
|
if(isset($_POST['newservername'])){
|
|
if($_SESSION['isadmin']!=1){
|
|
echo "you are not allowed to add servers!";
|
|
} else {
|
|
$newservername = clean($_POST['newhostname']);
|
|
$connectstring = clean($_POST['connectstring']);
|
|
$vmdirectory = clean($_POST['vmdirectory']);
|
|
$isodirectory = clean($_POST['isodirectory']);
|
|
$sqlu="INSERT INTO servers ('hostname','connectstring','vmdirectory','isodirectory') VALUES('$newservername',$connectstring','$vmdirectory','$isodirectory')";
|
|
$res = $db_handle->query($sqlu);
|
|
echo "success";
|
|
exit;
|
|
}
|
|
}
|
|
//update server in db
|
|
if(isset($_POST['changehostname'])){
|
|
if($_SESSION['isadmin']!=1){
|
|
echo "you are not allowed to change servers!";
|
|
} else {
|
|
$newservername = clean($_POST['changehostname']);
|
|
$connectstring = clean($_POST['connectstring']);
|
|
$vmdirectory = clean($_POST['vmdirectory']);
|
|
$isodirectory = clean($_POST['isodirectory']);
|
|
$changeid = clean($_POST['changeid']);
|
|
$sql="UPDATE servers SET hostname='$newservername', connectstring='$connectstring', vmdirectory='$vmdirectory', isodirectory='$isodirectory' where id='$changeid'";
|
|
if($db_handle->query($sql)){
|
|
echo "success";
|
|
exit;
|
|
} else {
|
|
echo "$sql";
|
|
exit;
|
|
}
|
|
}
|
|
}
|
|
//insert or update vm in db
|
|
if(isset($_REQUEST['mode'])){
|
|
if($_REQUEST['mode']=="newvm"){
|
|
$mode="newvm";
|
|
$sqls="INSERT INTO vms ";
|
|
$sqlc="(";
|
|
$sqlv=" VALUES (";
|
|
foreach(array_keys($_REQUEST) as $rkey){
|
|
if (($rkey!="mode")||($rkey!="rand")){
|
|
if ((preg_match('/macaddr/', $rkey))&&($rvalue!="")){
|
|
$cm = checkmacfree(clean($_REQUEST['vmname']), $rvalue, $db_handle);
|
|
if ($cm != "0") {
|
|
echo $cm;
|
|
exit;
|
|
}
|
|
}
|
|
$rvalue = clean($_REQUEST[$rkey]);
|
|
if ($rvalue == "x86_64"){
|
|
$rvalue = "qemu-system-x86_64";
|
|
}
|
|
$sqlc .= "$rkey,";
|
|
$sqlv .= "'$rvalue',";
|
|
}
|
|
}
|
|
$sqlc = rtrim($sqlc, ',');
|
|
$sqlc.=")";
|
|
$sqlv = rtrim($sqlv, ',');
|
|
$sqlv.=")";
|
|
$sql = "$sqls$sqlc$sqlv";
|
|
//echo $sql;
|
|
$res = $db_handle->exec($sql);
|
|
echo "success";
|
|
exit;
|
|
} elseif ($_REQUEST['mode']=="editvm"){
|
|
$sql="UPDATE vms SET ";
|
|
foreach(array_keys($_REQUEST) as $rkey){
|
|
if (($rkey!="mode")&&($rkey!="editid")&&($rkey!="rand")){
|
|
$rvalue = clean($_REQUEST[$rkey]);
|
|
if ((preg_match('/macaddr/', $rkey))&&($rvalue!="")){
|
|
$cm = checkmacfree(clean($_REQUEST['vmname']), $rvalue, $db_handle);
|
|
if ($cm != "0") {
|
|
echo $cm;
|
|
exit;
|
|
}
|
|
}
|
|
if ($rvalue == "x86_64"){
|
|
$rvalue = "qemu-system-x86_64";
|
|
}
|
|
$sql .= " $rkey='$rvalue',";
|
|
}
|
|
}
|
|
$sql = rtrim($sql, ',');
|
|
$eid=clean($_REQUEST['editid']);
|
|
$sql .= " WHERE id='$eid'";
|
|
$res = $db_handle->exec($sql);
|
|
echo "success";
|
|
exit;
|
|
}
|
|
}
|
|
if (isset($_POST['serverbuttoni'])){
|
|
serverdepropdown($_POST['serverbuttoni'], "no cdrom", 'cdrom');
|
|
exit;
|
|
//not nice, i know... Will do a function later...
|
|
} elseif (isset($_POST['serverbuttona'])){
|
|
serverdepropdown($_POST['serverbuttona'], "no drive1", 'drive1');
|
|
echo "<div class=row><div class=col>format1</div><div class=col><div class=dropdown><button class=\"btn btn-secondary dropdown-toggle\" type=button id=format1buttonformat1 data-toggle=dropdown aria-haspopup=true aria-expanded=false></button>";
|
|
echo "<div class=dropdown-menu aria-labelledby=formatbuttonformat1>";
|
|
echo "<a class=dropdown-item href=\"javascript:dropdown('format1buttonformat1','')\"> </a>";
|
|
echo "<div class=dropdown-divider></div>";
|
|
echo "<a class=dropdown-item href=\"javascript:dropdown('format1buttonformat1','raw')\">raw</a>";
|
|
echo "<a class=dropdown-item href=\"javascript:dropdown('format1buttonformat1','qcow2')\">qcow2</a>";
|
|
echo "</div></div></div></div></div></div></div><input type=hidden id=format1buttonformat1h name=format1 value=\"no drive1\">";
|
|
exit;
|
|
} elseif (isset($_POST['serverbuttonb'])){
|
|
serverdepropdown($_POST['serverbuttonb'], "no drive2", 'drive2');
|
|
echo "<div class=row><div class=col>format2</div><div class=col><div class=dropdown><button class=\"btn btn-secondary dropdown-toggle\" type=button id=format2buttonformat2 data-toggle=dropdown aria-haspopup=true aria-expanded=false></button>";
|
|
echo "<div class=dropdown-menu aria-labelledby=formatbuttonformat2>";
|
|
echo "<a class=dropdown-item href=\"javascript:dropdown('format2buttonformat2','')\"> </a>";
|
|
echo "<div class=dropdown-divider></div>";
|
|
echo "<a class=dropdown-item href=\"javascript:dropdown('format2buttonformat2','raw')\">raw</a>";
|
|
echo "<a class=dropdown-item href=\"javascript:dropdown('format2buttonformat2','qcow2')\">qcow2</a>";
|
|
echo "</div></div></div></div></div><input type=hidden id=format2buttonformat2h name=format2 value=\"no drive1\">";
|
|
exit;
|
|
} elseif (isset($_POST['serverbuttonc'])){
|
|
serverdepropdown($_POST['serverbuttonc'], "no drive3", 'drive3');
|
|
echo "<div class=row><div class=col>format3</div><div class=col><div class=dropdown><button class=\"btn btn-secondary dropdown-toggle\" type=button id=format3buttonformat3 data-toggle=dropdown aria-haspopup=true aria-expanded=false></button>";
|
|
echo "<div class=dropdown-menu aria-labelledby=formatbuttonformat3>";
|
|
echo "<a class=dropdown-item href=\"javascript:dropdown('format3buttonformat3','')\"> </a>";
|
|
echo "<div class=dropdown-divider></div>";
|
|
echo "<a class=dropdown-item href=\"javascript:dropdown('format3buttonformat3','raw')\">raw</a>";
|
|
echo "<a class=dropdown-item href=\"javascript:dropdown('format3buttonformat3','qcow2')\">qcow2</a>";
|
|
echo "</div></div></div></div></div><input type=hidden id=format3buttonformat3h name=format3 value=\"no drive1\">";
|
|
exit;
|
|
}
|
|
|
|
//ajax queries are all done, time for the header
|
|
include('header.php');
|
|
|
|
|
|
|
|
//usermanagement
|
|
if ((isset($_POST['usermgmt']))||($mode=="usermgmt")){
|
|
$mode="usermgmt";
|
|
if (($_SESSION['username']=="inituser")||($_SESSION['isadmin']=="1")){
|
|
$sql="SELECT * FROM users";
|
|
$res = $db_handle->query($sql);
|
|
echo "</br>";
|
|
//echo "<div class=row><div class=col>Username</div><div class=col>Is Admin</div><div class=col>New Password</div></div>";
|
|
if ($_SESSION['username']!="inituser"){
|
|
echo "<h2>Existing users</h2>";
|
|
}
|
|
while ($row = $res->fetchArray(SQLITE3_ASSOC)){
|
|
echo "<form id=uform$row[id] action=? method=post><div class=row><div class=col style=text-align:right><input class=form-control name=changeusername value=$row[username]></div>";
|
|
if ($row['admin']=="1"){
|
|
$checked="checked";
|
|
} else {
|
|
$checked="";
|
|
}
|
|
echo "<div class=col-ms><input data-onstyle=\"danger\" data-offstyle=success name=isadmin id=\"isadmin$row[id]\" type=\"checkbox\" data-toggle=\"toggle\" data-on=\"user is Admin\" data-off=\"user is no Admin\" $checked></div>";
|
|
echo "<input type=hidden name=userchange value=$row[id]>";
|
|
echo "<div class=col><input class=form-control type=password name=passwordchange placeholder=newpassword></div><div class=col><a href=# class=\"btn btn-success\" onclick=\"javascript:submitbutton('uform$row[id]');\">save user</a></div></div></form>";
|
|
}
|
|
//newuserform
|
|
echo "<h2>Create a new user</h2><form id=newuserform action=? method=post><div class=row><div class=col><input type=text class=form-control name=newusername placeholder=Username></div>";
|
|
if ($_SESSION['username']!="inituser"){
|
|
echo "<div class=col-ms><input data-onstyle=\"danger\" data-offstyle=success name=isadmin id=\"isadmin\" type=\"checkbox\" data-toggle=\"toggle\" data-on=\"user is Admin\" data-off=\"user is no Admin\" checked></div>";
|
|
} else {
|
|
echo "<input type=hidden name=isadmin value=on>";
|
|
}
|
|
echo "<div class=col><input class=form-control type=password name=newpassword placeholder=newpassword></div><div class=col><a href=# class=\"btn btn-success\" onclick=\"javascript:submitbutton('newuserform');\">Create user</a></div></div></form>";
|
|
}
|
|
}
|
|
|
|
|
|
//servermanagement
|
|
if (isset($_POST['servermgmt'])){
|
|
$mode="servermgmt";
|
|
if ($_SESSION['isadmin']=="1"){
|
|
$sql="SELECT * FROM servers";
|
|
$res = $db_handle->query($sql);
|
|
echo "</br>";
|
|
//echo "<div class=row><div class=col>Username</div><div class=col>Is Admin</div><div class=col>New Password</div></div>";
|
|
echo "<h2>Existing servers</h2>";
|
|
echo "<div class=row><div class=col>hostname</div><div class=col>connectstring</div><div class=col>VM directory</div><div class=col>ISO directory</div><div class=col></div></div>";
|
|
while ($row = $res->fetchArray(SQLITE3_ASSOC)){
|
|
echo "<form id=sform$row[id] action=? method=post><div class=row><div class=col style=text-align:right><input class=form-control name=changehostname value=$row[hostname]></div>";
|
|
echo "<div class=col><input name=connectstring id=\"connectstring\" type=\"text\" value=$row[connectstring]></div>";
|
|
echo "<div class=col><input name=vmdirectory id=\"connectstring\" type=\"text\" value=$row[vmdirectory]></div>";
|
|
echo "<div class=col><input name=isodirectory id=\"connectstring\" type=\"text\" value=$row[isodirectory]></div>";
|
|
echo "<div class=col><input type=hidden name=changeid value=$row[id]><a href=# class=\"btn btn-success\" onclick=\"javascript:submitbutton('sform$row[id]');\">save server</a></div></div></form>";
|
|
}
|
|
//newserverform
|
|
echo "<h2>Create a new server</h2><form id=newserverform action=? method=post><div class=row><div class=col><input type=text class=form-control name=newhostname placeholder=hostname></div>";
|
|
echo "<div class=col><input class=form-control name=connectstring type=\"text\" placeholder=\"nlvmi@192.168.0.X\"></div>";
|
|
echo "<div class=col><input class=form-control type=test name=vmdirectory placeholder=\"multiple directories like /directorya;/directoryb\"></div>";
|
|
echo "<div class=col><input class=form-control type=test name=isoirectory placeholder=\"multiple directories like /directorya;/directoryb\"></div>";
|
|
echo "<div class=col><a href=# class=\"btn btn-success\" onclick=\"javascript:submitbutton('newserverform');\">Create server</a></div></div></form>";
|
|
}
|
|
}
|
|
|
|
|
|
//start vm
|
|
if (isset($_REQUEST['start'])){
|
|
$vmname = clean($_REQUEST['start']);
|
|
$sqllimit="";
|
|
if($_SESSION['isadmin']!="1"){
|
|
$sqllimit="WHERE username='$_SESSION[username]'";
|
|
}
|
|
$sql="SELECT * FROM vms WHERE vmname='$vmname' $sqllimit";
|
|
$res = $db_handle->query($sql);
|
|
while ($row = $res->fetchArray(SQLITE3_ASSOC)){
|
|
$shellout = shell_exec("/usr/bin/nlvmi start $vmname bla");
|
|
echo $shellout;
|
|
}
|
|
}
|
|
//stop vm
|
|
if (isset($_REQUEST['stop'])){
|
|
$vmname = clean($_REQUEST['stop']);
|
|
if($_SESSION['isadmin']!="1"){
|
|
$sqllimit="WHERE username='$_SESSION[username]'";
|
|
}
|
|
$sql="SELECT * FROM vms WHERE vmname='$vmname' $sqllimit";
|
|
$res = $db_handle->query($sql);
|
|
while ($row = $res->fetchArray(SQLITE3_ASSOC)){
|
|
if(!checkvm($vmname)){
|
|
$shellout = shell_exec("/usr/bin/nlvmi stop $vmname bla");
|
|
echo $shellout;
|
|
}
|
|
}
|
|
}
|
|
|
|
//form for edit and new vms
|
|
if (isset($_REQUEST['edit'])){
|
|
$mode="editvm";
|
|
$formname="editvm";
|
|
$eid=clean($_REQUEST['edit']);
|
|
$sql="SELECT * FROM vms WHERE id='$eid'";
|
|
$res = $db_handle->query($sql);
|
|
$editid = "<input type=hidden name=editid value=$eid>";
|
|
while ($row = $res->fetchArray(SQLITE3_ASSOC)){
|
|
$e = $row;
|
|
}
|
|
} elseif(isset($_REQUEST['newvm'])) {
|
|
$formname="newvm";
|
|
$editid="";
|
|
$mode="newvm";
|
|
}
|
|
|
|
if (isset($formname)){
|
|
$placehold['vmname']="Name of the VM";
|
|
$placehold['server']="ip or name of host server";
|
|
$placehold['cputype']="normally just 'host'";
|
|
$placehold['cpus']="Number of core for the VM";
|
|
$placehold['memory']="Amount of RAM for the VM im Mb";
|
|
$placehold['usbdev']="Normally just 'tablet' to get a mouse";
|
|
$placehold['kblang']="Qemu keyboard layout. Like 'de-ch'";
|
|
$placehold['custom']="Customstring to add to the qemu command";
|
|
$placehold['tapdev1']="tapname of first netinterface";
|
|
$placehold['tapdev2']="tapname of second netinterface";
|
|
$placehold['tapdev3']="tapname of third netinterface";
|
|
$placehold['macaddr1']="macaddress of first netinterface";
|
|
$placehold['macaddr2']="macaddress of second netinterface";
|
|
$placehold['macaddr3']="macaddress of third netinterface";
|
|
$placehold['brdev1']="bridge on host to add first netinterface";
|
|
$placehold['brdev2']="bridge on host to add second netinterface";
|
|
$placehold['brdev3']="bridge on host to add third netinterface";
|
|
$placehold['vncport']="VNC displaynumber like '1'";
|
|
$placehold['websocket']="port to bind the VNC websocket";
|
|
$placehold['vncpasswort']="the password for VNC";
|
|
|
|
echo "<h2>$formname</h2></br>";
|
|
echo "<form id=$formname name=$formname action=? method=post>";
|
|
$res = $db_handle->query('PRAGMA table_info(vms)');
|
|
while ($col = $res->fetchArray(SQLITE3_ASSOC)) {
|
|
$arrColnames[]=$col['name'];
|
|
}
|
|
$server = $e['server'];
|
|
for ($col=0; $col <count($arrColnames); $col++){
|
|
if ($arrColnames[$col]!="id"){
|
|
if (isset($e[$arrColnames[$col]])){
|
|
$val = $e[$arrColnames[$col]];
|
|
} else {
|
|
$val = "";
|
|
}
|
|
$colname=$arrColnames[$col];
|
|
if ($arrColnames[$col] == "bootoption"){
|
|
if($val=="") {
|
|
$val="c";
|
|
}
|
|
echo "<div class=row><div class=col-md-1 style=text-align:right>bootoption</div><div class=col-md-2><div class=dropdown><button class=\"btn btn-secondary dropdown-toggle\" type=button id=bootoptionbutton data-toggle=dropdown aria-haspopup=true aria-expanded=false>$val</button>";
|
|
echo "<div class=dropdown-menu aria-labelledby=bootoptionbutton>";
|
|
echo "<a class=dropdown-item href=\"javascript:dropdown('bootoptionbutton','c')\">c</a>";
|
|
echo "<a class=dropdown-item href=\"javascript:dropdown('bootoptionbutton','d')\">d</a>";
|
|
echo "</div></div></div></div><input type=hidden id=bootoptionbuttonh name=bootoption value=$val>";
|
|
} elseif ($arrColnames[$col] == "user"){
|
|
if ($val=="") {
|
|
$val=$_SESSION['username'];
|
|
}
|
|
echo "<div class=row><div class=col-md-1 style=text-align:right>user</div><div class=col-md-2><div class=dropdown><button class=\"btn btn-secondary dropdown-toggle\" type=button id=userbutton data-toggle=dropdown aria-haspopup=true aria-expanded=false>$val</button>";
|
|
echo "<div class=dropdown-menu aria-labelledby=userbutton>";
|
|
$sqlusers="SELECT username FROM users";
|
|
$resusers=$db_handle->query($sqlusers);
|
|
while ($rowusers = $resusers->fetchArray(SQLITE3_ASSOC)){
|
|
echo "<a class=dropdown-item href=\"javascript:dropdown('userbutton','$rowusers[username]')\">$rowusers[username]</a>";
|
|
}
|
|
echo "</div></div></div><input type=hidden id=userbuttonh name=user value=$val></div>";
|
|
} elseif ($arrColnames[$col] == "arch"){
|
|
echo "<div class=row><div class=col-md-1 style=text-align:right>arch</div><div class=col-md-2><div class=dropdown><button class=\"btn btn-secondary dropdown-toggle\" type=button id=archbutton data-toggle=dropdown aria-haspopup=true aria-expanded=false>x86_64</button>";
|
|
echo "<div class=dropdown-menu aria-labelledby=archbutton>";
|
|
echo "<a class=dropdown-item href=\"javascript:dropdown('archbutton','x86_64')\">x86_64</a>";
|
|
echo "</div></div></div></div><input type=hidden id=archbuttonh name=arch value=x86_64>";
|
|
// echo "$arrColnames[$col] <select name=arch><option value=qemu-system-x86_64>x86_64</option></select></br>";
|
|
} elseif (preg_match('/format/', $arrColnames[$col])){
|
|
echo "<div class=row><div class=col>$arrColnames[$col]</div><div class=col><div class=dropdown><button class=\"btn btn-secondary dropdown-toggle\" type=button id=$arrColnames[$col]button$arrColnames[$col] data-toggle=dropdown aria-haspopup=true aria-expanded=false>$val</button>";
|
|
echo "<div class=dropdown-menu aria-labelledby=formatbutton$arrColnames[$col]>";
|
|
echo "<a class=dropdown-item href=\"javascript:dropdown('$arrColnames[$col]button$arrColnames[$col]','')\"> </a>";
|
|
echo "<div class=dropdown-divider></div>";
|
|
echo "<a class=dropdown-item href=\"javascript:dropdown('$arrColnames[$col]button$arrColnames[$col]','raw')\">raw</a>";
|
|
echo "<a class=dropdown-item href=\"javascript:dropdown('$arrColnames[$col]button$arrColnames[$col]','qcow2')\">qcow2</a>";
|
|
echo "</div></div></div></div></div></div><input type=hidden id=$arrColnames[$col]button$arrColnames[$col]h name=$arrColnames[$col] value=\"$val\">";
|
|
} elseif ($arrColnames[$col] == "autostart"){
|
|
$checked="";
|
|
if ($val=="1"){
|
|
$checked="checked";
|
|
}
|
|
echo "<div class=row><div class=col-md-1 style=text-align:right>autostart</div><div class=col-md-2><input data-onstyle=\"success\" data-offstyle=danger name=autostart id=\"autostart\" type=\"checkbox\" data-toggle=\"toggle\" data-on=\"boot with host\" data-off=\"no autostart\" $checked></div></div>";
|
|
} elseif ($arrColnames[$col] == "cdrom"){
|
|
echo "<div id=cdromdiv>";
|
|
serverdepropdown($server, $val, "cdrom");
|
|
echo "</div>";
|
|
} elseif (preg_match('/tapdev/', $arrColnames[$col])) {
|
|
echo "<div class=row><div class=col-md-1 style=text-align:right>$arrColnames[$col]</div><div class=col-md-2><input class=form-control type=text name=$arrColnames[$col] value=\"$val\" placeholder=\"$placehold[$colname]\"></div>";
|
|
} elseif (preg_match('/macaddr/', $arrColnames[$col])) {
|
|
echo "<div class=col-md-1 style=text-align:right>$arrColnames[$col]</div><div class=col-md-2><input class=form-control type=text name=$arrColnames[$col] value=\"$val\" placeholder=\"$placehold[$colname]\"></div>";
|
|
} elseif (preg_match('/brdev/', $arrColnames[$col])) {
|
|
echo "<div class=col-md-1 style=text-align:right>$arrColnames[$col]</div><div class=col-md-2><input class=form-control type=text name=$arrColnames[$col] value=\"$val\" placeholder=\"$placehold[$colname]\"></div></div>";
|
|
} elseif (preg_match('/drive/', $arrColnames[$col])){
|
|
echo "<div id=$arrColnames[$col]div>";
|
|
serverdepropdown($server, $val, $arrColnames[$col]);
|
|
|
|
} elseif ($arrColnames[$col] == "server"){
|
|
echo "<div class=row><div class=col-md-1 style=text-align:right>$arrColnames[$col]</div><div class=col-md-2><div class=dropdown><button class=\"btn btn-secondary dropdown-toggle\" type=button id=$arrColnames[$col]button data-toggle=dropdown aria-haspopup=true aria-expanded=false>$val</button>";
|
|
echo "<div class=dropdown-menu aria-labelledby=$arrColnames[$col]button>";
|
|
$sqls="SELECT hostname FROM servers";
|
|
$ress = $db_handle->query($sqls);
|
|
while ($rows = $ress->fetchArray(SQLITE3_ASSOC)){
|
|
|
|
echo "<a class=dropdown-item href=\"javascript:dropdown('$arrColnames[$col]button','$rows[hostname]')\">$rows[hostname]</a>";
|
|
}
|
|
echo "</div></div></div></div><input type=hidden id=$arrColnames[$col]buttonh name=$arrColnames[$col] value=$val>";
|
|
} else {
|
|
|
|
echo "<div class=row><div class=col-md-1 style=text-align:right>$arrColnames[$col]</div><div class=col-md-2><input class=form-control type=text name=$arrColnames[$col] value=\"$val\" placeholder=\"$placehold[$colname]\"></div></div>";
|
|
}
|
|
}
|
|
}
|
|
echo "$editid<input type=hidden name=mode value=$formname><a href=# onclick=\"submitbutton('$formname')\" class=\"btn btn-primary\">save vm</a></form>";
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(($mode!="newvm")&&($mode!="editvm")&&($mode!='usermgmt')){
|
|
if ($_SESSION['isadmin']=="1"){
|
|
$sqllimit="";
|
|
echo "</br><a class=\"btn btn-primary\" href=# onclick=\"post('?', {newvm: 'newvm'});\">Create a new VM</a></br></br>";
|
|
} else {
|
|
$sqllimit="WHERE user='$_SESSION[username]'";
|
|
}
|
|
|
|
//getting vms from DB
|
|
$sql="SELECT * FROM vms $sqllimit";
|
|
$res = $db_handle->query($sql);
|
|
echo "<div class=row>";
|
|
while ($row = $res->fetchArray(SQLITE3_ASSOC)){
|
|
if (checkvm($row['vmname'])){
|
|
$button = "start";
|
|
$buttonc = "btn-success";
|
|
} else {
|
|
$button = "stop";
|
|
$buttonc = "btn-warning";
|
|
}
|
|
echo "<div class=col style=\"margin:10px;border:solid 1px;max-width:320px;\">$row[vmname]</br><a class=\"btn btn-primary\" href=# onclick=\"post('?', {edit: '$row[id]'});\">edit</a> ";
|
|
echo "<a href=# onclick=\"post('?', {'$button': '$row[vmname]'});\"class=\"btn $buttonc\">$button</a> ";
|
|
echo "<button class=\"btn btn-danger\" data-delete-text=\"Delete VM $row[vmname]!\" data-delete-vm=\"$row[id]\" data-delete-name=\"$row[vmname]\" data-toggle=\"modal\" data-target=\"#confirm-delete\">Delete VM</button> ";
|
|
$server = gethostname();
|
|
if (preg_match('/stop/', $button)) {
|
|
echo "<a target=_blank href=novnc/vnc.html?path=pussyvm&host=$server class=\"btn btn-success\">VNC</a>";
|
|
}
|
|
echo "</div>";
|
|
}
|
|
}
|
|
echo "</div></div></body></html>";
|
|
} elseif (!isset($_SESSION['username'])){
|
|
echo "<h1>Welcome to nlvmi!</h1><h2>You need to log in</h2></br>";
|
|
echo "<form action=? method=post>Username: <input type=text name=username> Password: <input type=password name=password> <input name=login type=submit></form>";
|
|
exit;
|
|
}
|
|
?>
|