diff --git a/nlvmi b/nlvmi
index 0d48f5b..1cdf839 100755
--- a/nlvmi
+++ b/nlvmi
@@ -7,10 +7,10 @@ if [ $LOGLEVEL -gt "2" ]; then echo "configuration loaded"; fi
#check if we are root and wrap if we are not
U=`/usr/bin/whoami`
if [ $U != "root" ]; then
- if [ ! -z $1 ]; then A=$1; else A="bla"; fi
- if [ ! -z $2 ]; then B=$2; else B="bla"; fi
- if [ ! -z $3 ]; then C=$3; else C="bla"; fi
- /usr/bin/wrap-nlvmi $A $B $C && exit
+ if [ ! -z $1 ]; then A="$1"; else A="bla"; fi
+ if [ ! -z $2 ]; then B="$2"; else B="bla"; fi
+ if [ ! -z $3 ]; then C="$3"; else C="bla"; fi
+ /usr/bin/wrap-nlvmi \"$A\" \"$B\" \"$C\" && exit
fi
if [ ! -d $RUNDIRECTORY ]; then if [ $LOGLEVEL -gt "1" ]; then echo "creating $RUNDIRECTORY"; fi; mkdir -p $RUNDIRECTORY; chown root:nlvmi -R $RUNDIRECTORY; chmod g+w $RUNDIRECTORY; fi
@@ -172,8 +172,8 @@ function vmstart {
if [ ! -z ${array[30]} ]; then WPORT=$((${array[30]} + 5700)); WEBSOCK=",websocket=$WPORT"; else WEBSOCK=""; fi
if [ ! -z ${array[31]} ]; then VNCPASS=",password"; fi
if [ ! -z ${array[29]} ]; then VNCPORT="-vnc :${array[29]}$WEBSOCK$VNCPASS"; fi
- echo "which ${array[4]} && QEMUCONNAMD=${array[4]} || QEMUCOMMAND=/usr/libexec/qemu-kvm" >>$TMPF
- COMMAND=(su - ${array[2]} -s /bin/bash -c \"\$QEMUCOMMAND -name ${array[1]} -enable-kvm ${array[10]} $CPUTYPE $MEMORY $SMP -device virtio-rng-pci -boot ${array[11]} $USBDEV $KB -daemonize $DRIVE1$FORMAT1 $DRIVE2$FORMAT2 $DRIVE3$FORMAT3 $CDROM $MACADDR1 $TAPDEV1 $MACADDR2 $TAPDEV2 $MACADDR3 $TAPDEV3 $VNCPORT $CUSTOM -pidfile $RUNDIRECTORY/${array[1]}.pid -monitor unix:$RUNDIRECTORY/${array[1]}.mon,server,nowait\")
+# echo "which ${array[4]} && QEMUCOMMAND=/usr/bin/${array[4]} || QEMUCOMMAND=/usr/libexec/qemu-kvm" >>$TMPF
+ COMMAND=(su - ${array[2]} -s /bin/bash -c \"which ${array[4]} \&\& QEMUCOMMAND=/usr/bin/${array[4]} \|\| QEMUCOMMAND=/usr/libexec/qemu-kvm\; \\\$QEMUCOMMAND -name ${array[1]} -enable-kvm ${array[10]} $CPUTYPE $MEMORY $SMP -device virtio-rng-pci -boot ${array[11]} $USBDEV $KB -daemonize $DRIVE1$FORMAT1 $DRIVE2$FORMAT2 $DRIVE3$FORMAT3 $CDROM $MACADDR1 $TAPDEV1 $MACADDR2 $TAPDEV2 $MACADDR3 $TAPDEV3 $VNCPORT $CUSTOM -pidfile $RUNDIRECTORY/${array[1]}.pid -monitor unix:$RUNDIRECTORY/${array[1]}.mon,server,nowait\")
if [ $LOGLEVEL -gt "1" ]; then echo ${COMMAND[@]}; fi
echo "${COMMAND[@]}" >>$TMPF
#Set VNC Password
@@ -283,21 +283,131 @@ function stopall {
done
}
-function listdir {
-#echo $1 $2
- sqlite3 $SQLITEFILE "SELECT $2,connectstring FROM servers WHERE hostname='$1'" | while read line; do
- IFS='|' read -r -a array <<< "$line"
- IFS=';' read -r -a dirs <<< "${array[0]}"
- for di in ${dirs[@]}; do
- if [ -z ${array[1]} ]; then
- ls -lrt -d -1 $di/{*,.*}
- else
- su nlvmi -c "ssh ${array[1]} \"ls -lrt -d -1 $di/{*,.*}\""
- fi
- done
+function listdirs {
+ if [ $2 == "isodirectory" ] || [ $2 == "vmdirectory" ]; then
+ COLNAMES=$2
+ MODE="vm"
+ else
+ COLNAMES="isodirectory,vmdirectory"
+ MODE="img"
+ fi
+ sqlite3 $SQLITEFILE "SELECT $COLNAMES,connectstring FROM servers WHERE hostname='$1'" | while read line; do
+ IFS='|' read -r -a array <<< "$line"
+ if [ $MODE == "vm" ]; then
+ IFS=';' read -r -a dirs <<< "${array[0]}"
+ for di in ${dirs[@]}; do
+ if [ -z ${array[1]} ]; then
+ ls -lrt -d -1 $di/{*,.*}
+ else
+ su nlvmi -c "ssh ${array[1]} \"ls -lrt -d -1 $di/{*,.*}\""
+ fi
+ done
+ elif [ $MODE == "img" ]; then
+ IFS=';' read -r -a dirs <<< "${array[0]};${array[1]}"
+ for di in ${dirs[@]}; do
+ if [ $di == $2 ]; then
+ if [ -z ${array[2]} ]; then
+ ls -lrt -d -1 $di/{*,.*}
+ else
+ su nlvmi -c "ssh ${array[2]} \"ls -lrt -d -1 $di/{*,.*}\""
+ fi
+ fi
+ done
+ fi
done
}
+function delimg {
+ DDIR=`echo $2 | rev | cut -d "/" -f 2- | rev`
+ sqlite3 $SQLITEFILE "SELECT vmdirectory,isodirectory,connectstring FROM servers WHERE hostname='$1'" | while read line; do
+ IFS="|" read -r -a array <<< "$line"
+ IFS=";" read -r -a dirs <<< "${array[0]};${array[1]}"
+ for dir in ${dirs[@]}; do
+ if [ $dir == $DDIR ]; then
+ if [ -z ${array[2]} ]; then
+ if [ -e $2 ]; then rm $2 && echo "delete completed"; fi
+ else
+ su nlvmi -c "ssh ${array[2]} \"if [ -e $2 ]; then rm $2 && echo delete completed; fi\""
+ fi
+ fi
+ done
+ done
+}
+
+function createimg {
+ re='^[0-9]+$'
+ if ! [[ $2 =~ $re ]] ; then
+ echo "size argument is not numeric" >&2; exit 1
+ fi
+ IFS=';' read -r -a T <<< "$1"
+ TDIR=`echo ${T[1]} | rev | cut -d "/" -f 2- | rev`
+ TFOUND="no"
+ declare -a A=`sqlite3 $SQLITEFILE "SELECT vmdirectory,connectstring FROM servers WHERE hostname='${T[0]}'" | while read line; do
+ IFS="|" read -r -a array <<< "$line"
+ IFS=";" read -r -a dirs <<< "${array[0]}"
+ for di in ${dirs[@]}; do
+ if [ $di == $TDIR ]; then
+ TFOUND="yes"
+ TCONN=${array[1]}
+ fi
+ done
+ echo "($TFOUND $TCONN)"
+ done`
+ if [ ${A[0]} == "yes" ]; then
+ if [ -z ${A[1]} ]; then
+ qemu-img create -f qcow2 ${T[1]} ${2}G && echo "creatimg completed"
+ else
+ su nlvmi -c "ssh ${A[1]} \"qemu-img create -f qcow2 ${T[1]} ${2}G\"" && echo "createimg completed"
+ fi
+ fi
+}
+
+function copyimg {
+ IFS=';' read -r -a S <<< "$1"
+ IFS=';' read -r -a T <<< "$2"
+ SDIR=`echo ${S[1]} | rev | cut -d "/" -f 2- | rev`
+ TDIR=`echo ${T[1]} | rev | cut -d "/" -f 2- | rev`
+ SFOUND="no"
+ TFOUND="no"
+ for m in S T; do
+ A="$m"DIR
+ declare -a B=`sqlite3 $SQLITEFILE "SELECT vmdirectory,isodirectory,connectstring FROM servers WHERE hostname='${!m[0]}'" | while read line; do
+ IFS='|' read -r -a array <<< "$line"
+ IFS=';' read -r -a dirs <<< "${array[0]};${array[1]}"
+ for di in ${dirs[@]}; do
+ if [ $di == ${!A} ]; then
+ if [ $m == "S" ]; then
+ if [ -z ${array[2]} ]; then
+ if [ -e ${S[1]} ]; then FOUND="yes"; CONN="empty"; fi
+ else
+ su nlvmi -c "ssh ${array[2]} \"if [ ! -e ${S[1]} ]; then exit 1; fi\"" && FOUND="yes"; CONN=${array[2]}
+ fi
+ elif [ $m == "T" ]; then FOUND="yes"; CONN=${array[2]}; if [ -z $CONN ]; then CONN="empty"; fi; fi
+ fi
+ done
+ echo "($FOUND $CONN)"
+ done`
+ export ${m}FOUND=${B[0]}
+ export ${m}CONN=${B[1]}
+ done
+ if [ $SFOUND == "yes" ] && [ $TFOUND == "yes" ]; then
+ if [ $SCONN == "empty" ] && [ $TCONN == "empty" ]; then
+ if [ -z $FID ]; then
+ FID="nldebugger"
+ fi
+ rsync --progress ${S[1]} ${T[1]} >/tmp/$FID && echo done >/tmp/$FID || echo fail >/tmp/$FID
+ elif [ $SCONN == "empty" ]; then
+ su nlvmi -c "rsync --progress ${S[1]} $TCONN:${T[1]} >/tmp/$FID && echo done >/tmp/$FID || echo fail >/tmp/$FID"
+ elif [ $SCONN == $TCONN ]; then
+ su nlvmi -c "ssh $TCONN \"rsync --progress ${S[1]} ${T[1]}\"" >/tmp/$FID && echo done >/tmp/$FID || echo fail >/tmp/$FID
+ elif [ $TCONN == "empty" ]; then
+ su nlvmi -c "rsync --progress $SCONN:${S[1]} ${T[1]} >/tmp/$FID && echo done >/tmp/$FID || echo fail >/tmp/$FID"
+ else
+ su nlvmi -c "echo "noprogressavailable" >/tmp/$FID && scp -3 $SCONN:${S[1]} $TCONN:${T[1]}" && echo done >/tmp/$FID || echo fail >/tmp/$FID
+ fi
+ fi
+}
+
#mainloop
if [ $# -gt 0 ]; then
if [ $1 == "createdb" ]; then
@@ -343,9 +453,18 @@ if [ $# -gt 0 ]; then
if [[ $VMFOUND == "no" ]]; then echo "no VM with that name found!"; exit 1; fi)
elif [ $1 == "stopall" ]; then
stopall
- elif [ $1 == "listdir" ]; then
- if [ -z $2 ] || [ -z $3 ]; then echo listdir needs two more arguments; exit 1; fi
- listdir $2 $3
+ elif [ $1 == "listdirs" ]; then
+ if [ -z $2 ] || [ -z $3 ]; then echo listdirs needs two arguments; exit 1; fi
+ listdirs $2 $3
+ elif [ $1 == "createimg" ]; then
+ if [ -z $2 ] || [ -z $3 ]; then echo createimg needs two arguments; exit 1; fi
+ createimg $2 $3
+ elif [ $1 == "copyimg" ]; then
+ if [ -z $2 ] || [ -z $3 ]; then echo copyimg needs two arguments; exit 1; fi
+ copyimg $2 $3
+ elif [ $1 == "delimg" ]; then
+ if [ -z $2 ] || [ -z $3 ]; then echo delimg needs two arguments; exit 1; fi
+ delimg $2 $3
elif [ $1 == "remote" ]; then
if [ ! -z $MASTERSERVER ]; then
if `echo $SSH_CLIENT | grep "$MASTERSERVER " &>/dev/null`; then
diff --git a/web/header.php b/web/header.php
index a098b4e..915f6fe 100644
--- a/web/header.php
+++ b/web/header.php
@@ -12,6 +12,23 @@
nlvmi
+
-
-
+
+
diff --git a/web/index.php b/web/index.php
index a1d5224..82f830b 100644
--- a/web/index.php
+++ b/web/index.php
@@ -36,7 +36,7 @@ function serverdepropdown($server, $val, $what){
echo "";
}
+
+function listimg($server,$dir){
+ $shellout=shell_exec("/usr/bin/nlvmi listdirs $server $dir");
+ $files = explode("\n", $shellout);
+ echo "";
+}
+
//read config file
$configfile = new SplFileObject("/etc/nlvmi/nlvmi.conf");
while (!$configfile->eof()) {
@@ -217,9 +235,39 @@ if (isset($_SESSION['username'])){
}
}
}
+ } elseif
+//delete image
+ ((isset($_POST['deleteid']))&&(isset($_POST['deletename']))&&($_POST['delwhat']=="image")){
+ if($_SESSION['isadmin']!=1){
+ echo "you are not allowed to delete images!";
+ } else {
+ $server = clean($_POST['deletename']);
+ $filec = explode(';', clean($_POST['deleteid']));
+
+ $sql="SELECT id FROM servers WHERE hostname='$server' AND (vmdirectory LIKE '%$filec[0]%' OR isodirectory LIKE '%$filec[0]%')";
+ $res = $db_handle->query($sql);
+ while ($row = $res->fetchArray(SQLITE3_ASSOC)){
+ $shellout = shell_exec("/usr/bin/nlvmi delimg $server $filec[0]/$filec[1]");
+ echo $shellout;
+ }
+ }
+ } elseif
+//create new image
+ (isset($_POST['createimg'])){
+ $img = clean($_POST['createimg']);
+ $server = clean($_POST['createimgs']);
+ $dir = clean($_POST['createimgd']);
+ $size = clean($_POST['createimgsize']);
+ $sql="SELECT id FROM servers WHERE hostname='$server' AND (vmdirectory LIKE '%$dir%')";
+ $res = $db_handle->query($sql);
+ while ($row = $res->fetchArray(SQLITE3_ASSOC)){
+ $shellout = shell_exec("/usr/bin/nlvmi createimg \"$server;$dir/$img\" $size");
+ echo $shellout;
+ exit;
+ }
}
//insert new user in db
- if(isset($_POST['newusername'])){
+ elseif(isset($_POST['newusername'])){
if($_SESSION['isadmin']!=1){
echo "you are not allowed to add usernames!";
} else {
@@ -397,8 +445,6 @@ if (isset($_SESSION['username'])){
$vid = clean($_REQUEST['vid']);
$sql="SELECT prio FROM vms WHERE id='$vid'";
$oldprio = $db_handle->query($sql)->fetchArray(SQLITE3_ASSOC)['prio'];
- //print_r($res);
- //echo "buu";
if ($_REQUEST['neworder']=="up"){
$newprio = $oldprio - 1;
$sqlu="SELECT id FROM vms WHERE prio='$newprio'";
@@ -409,7 +455,7 @@ if (isset($_SESSION['username'])){
echo "success";
exit;
}
- }elseif ($_REQUEST['neworder']=="down"){
+ } elseif ($_REQUEST['neworder']=="down"){
$newprio = $oldprio + 1;
$sqlu="SELECT id FROM vms WHERE prio='$newprio'";
$oldid = $db_handle->query($sqlu)->fetchArray(SQLITE3_ASSOC)['id'];
@@ -434,6 +480,113 @@ if (isset($_SESSION['username'])){
exit;
}
+ if (isset($_REQUEST['imagemgmt'])){
+ $server = clean($_REQUEST['imagemgmt']);
+ if ($server == "undefined"){
+ $serverq = "";
+ } else {
+ $serverq = $server;
+ }
+ function imgdropdowns($db_handle, $server, $serverq, $dmode){
+ $sqli="SELECT vmdirectory,isodirectory,hostname FROM servers";
+ $resi = $db_handle->query($sqli);
+ $sdropdown = "";
+ $firstserver = "";
+ while ($rowi = $resi->fetchArray(SQLITE3_ASSOC)){
+ $hostname = $rowi['hostname'];
+ if ($firstserver == ""){
+ $firstserver = $hostname;
+ }
+ $vmdirs = explode(';', $rowi['vmdirectory']);
+ $isodirs = explode(';', $rowi['isodirectory']);
+ $imgdirs[$hostname] = array_merge($vmdirs, $isodirs);
+ $sdropdown .= "$hostname";
+ }
+ if ($serverq == ""){
+ $serverq = $firstserver;
+ }
+ $dropdowns = "";
+ $dropdowns .= "
";
+ foreach(array_keys($imgdirs) as $iserver){
+ $firstdir = $imgdirs[$iserver][0];
+ $hiddend = "d-none";
+ if(($server == "undefined")&&($imgdirs[$firstserver][0] == $firstdir)&&($firstserver == $iserver)){
+ $hiddend = "";
+ }
+ $dropdowns .= "
";
+ $dropdowns .= "
";
+ }
+ $dropdowns .= "
";
+ echo $dropdowns;
+ if ($dmode == "source"){
+ listimg($firstserver, $firstdir);
+ }
+ }
+ imgdropdowns($db_handle, $server, $serverq, 'source');
+ echo "Target";
+ imgdropdowns($db_handle, $server, $serverq, 'target');
+ echo "
";
+ echo "";
+ echo "";
+ exit;
+ }
+
+ if ((isset($_REQUEST['listdir']))&&(isset($_REQUEST['server']))){
+ $listdir = clean($_REQUEST['listdir']);
+ $server = clean($_REQUEST['server']);
+ $sqld="SELECT id FROM servers WHERE hostname = '$server' AND (vmdirectory LIKE '%$listdir%' OR isodirectory LIKE '%$listdir%')";
+ $resd = $db_handle->query($sqld);
+ while ($rowd = $resd->fetchArray(SQLITE3_ASSOC)){
+ listimg($server, $listdir);
+ exit;
+ }
+ }
+
+ if (isset($_REQUEST['copyss'])){
+ $sserver = clean($_REQUEST['copyss']);
+ $sfile = clean($_REQUEST['copysf']);
+ $tserver = clean($_REQUEST['copyts']);
+ $tfile = clean($_REQUEST['copytf']);
+ $shellout = shell_exec("export FID=\$\$; printf \"\$FID\"; /usr/bin/nlvmi copyimg \"$sserver;$sfile\" \"$tserver;$tfile\" 2&>/dev/null &");
+ if (preg_match_all('/completed/', $shellout)){
+ echo "success";
+ } else {
+ echo $shellout;
+ }
+ exit;
+ }
+ if (isset($_REQUEST['progress'])){
+ $txt_file = file_get_contents("/tmp/$_REQUEST[progress]");
+ if (preg_match('/noprogressavailable/', $txt_file)){
+ echo "sorry, no progress available";
+ } elseif(preg_match('/fail/', $txt_file)){
+ echo "fail";
+ } elseif(!preg_match('/^done/', $txt_file)){
+ $row = explode(" ", $txt_file);
+ $c = count($row) - 1;
+ $pfound="no";
+ while ($pfound == "no"){
+ $field = $row[$c];
+ if (preg_match('/%/', $field)){
+ $perc = explode('%', $field);
+ echo $perc[0];
+ $pfound="yes";
+ }
+ $c = $c -1;
+ }
+ } else {
+ echo "done";
+ }
+ exit;
+ }
+
+
+
//ajax queries are all done, time for the header
include('header.php');
@@ -652,8 +805,6 @@ if (isset($_SESSION['username'])){
}
-
-
if(($mode!="newvm")&&($mode!="editvm")&&($mode!='usermgmt')){
if ($_SESSION['isadmin']=="1"){
$sqllimit="";
diff --git a/web/nlvmi.js b/web/nlvmi.js
index 466d48e..88954f9 100644
--- a/web/nlvmi.js
+++ b/web/nlvmi.js
@@ -1,11 +1,9 @@
function makeid() {
- var text = "";
- var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
-
- for (var i = 0; i < 5; i++)
- text += possible.charAt(Math.floor(Math.random() * possible.length));
-
- return text;
+ var text = "";
+ var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
+ for (var i = 0; i < 5; i++)
+ text += possible.charAt(Math.floor(Math.random() * possible.length));
+ return text;
}
function dropdown(i,e) {
@@ -28,34 +26,40 @@ function post(path, params, method) {
var form = document.createElement("form");
form.setAttribute("method", method);
form.setAttribute("action", path);
-
for(var key in params) {
if(params.hasOwnProperty(key)) {
var hiddenField = document.createElement("input");
hiddenField.setAttribute("type", "hidden");
hiddenField.setAttribute("name", key);
hiddenField.setAttribute("value", params[key]);
-
form.appendChild(hiddenField);
}
}
-
document.body.appendChild(form);
form.submit();
}
$('#confirm-delete').on('click', '.btn-ok', function(e) {
- var $modalDiv = $('#confirm-detele'.delegateTarget);
- var dname = $(this).data('deleteName');
- var did = $(this).data('deleteId');
- var delwhat = $(this).data('deleteWhat');
- post('?', {delwhat: delwhat,deleteid: did,deletename: dname});
+ var $modalDiv = $('#confirm-detele'.delegateTarget);
+ var dname = $(this).data('deleteName');
+ var did = $(this).data('deleteId');
+ var delwhat = $(this).data('deleteWhat');
+ post('?', {delwhat: delwhat,deleteid: did,deletename: dname});
});
$('#confirm-delete').on('show.bs.modal', function(e) {
- var data = $(e.relatedTarget).data();
- $('.title', this).text(data.deleteVm);
- document.getElementById('modaltext2').innerHTML = data.deleteText;
+ var data = $(e.relatedTarget).data();
+ $('.title', this).text(data.deleteVm);
+ if (data.deleteWhat == "image"){
+ var server = $('#imageserverbuttonsource').html();
+ var dir = $('#imagedirbutton'+ server +'source').html();
+ var img = $('#ld').find(":selected").text();
+ document.getElementById('modaltext2').innerHTML = data.deleteText + img;
+ $('.btn-ok', this).data({'deleteWhat': data.deleteWhat,'deleteName': server,'deleteId': dir +";"+ img});
+
+ } else {
+ document.getElementById('modaltext2').innerHTML = data.deleteText;
$('.btn-ok', this).data({'deleteWhat': data.deleteWhat,'deleteName': data.deleteName,'deleteId': data.deleteId});
+ }
});
function submitbutton(formid){
@@ -64,7 +68,7 @@ function submitbutton(formid){
type: 'POST',
url: "?rand="+ makeid(),
data: data,
- success: function(response) {
+ success: function(response) {
if (response != "success"){
window.alert('Failure!\n'+ response);
} else {
@@ -89,3 +93,125 @@ function arrow(dir, id){
},
});
}
+
+function imagemgmt(mode, server){
+ if(mode == "show") {
+ $('#imagemgmt').modal('show');
+ $.ajax({
+ type: 'POST',
+ url: "?rand="+ makeid(),
+ data: "&imagemgmt="+ server,
+ success: function(response) {
+ $('#imagemodaltext2').html(response);
+ var server = $('#imageserverbuttonsource').html();
+ imgdropdown('dir', server, $('#imagedirbutton'+ server +'source').html(), 'source')
+ },
+ });
+ }
+}
+
+function imgdropdown(mode,server,dir,dmode){
+ $('#imagedirbutton'+ server +""+ dmode).html(dir);
+ if(mode == "server"){
+ $('#imageserverbutton'+ dmode).html(server);
+ $("[id^=imagedirdropd][id$="+ dmode +"]").addClass('d-none');
+ $('#imagedirdropd'+ server +''+ dmode).removeClass('d-none');
+ }
+ if(dmode == "source"){
+ $.ajax({
+ type: 'POST',
+ url: "?rand="+ makeid(),
+ data: "&listdir="+ dir +"&server="+ server,
+ success: function(response) {
+ $('#listimgd').html(response);
+ },
+ });
+ }
+}
+
+function actioncheck(){
+ $.ajax({
+ type: 'POST',
+ url: "?rand="+ makeid(),
+ data: "&progress="+ jresponse,
+ success: function(response) {
+ if (response == "done") {
+ cdone = "yes";
+ } else {
+ if (response == "sorry, no progress available"){
+ $('#imgprogd').html(response);
+ }
+ if (response == "fail"){
+ cdone = "yes";
+ window.alert("Failed to copy!");
+ } else {
+ $('#imgprogbar').val(response);
+ $('#imgprogd').html(response +"%");
+ }
+ }
+ }
+ });
+ if (cdone == "yes") {
+ $('#imgprog').addClass('d-none');
+ $('#imgprogr').addClass('d-none');
+ $('#imagemodaltext2').removeClass('d-none');
+ $('#imgprogbar').val("0");
+ clearInterval(interval);
+ }
+}
+
+function imgcopy(){
+ if ($('#copybtn').html() == "copy"){
+ $('#copytargetd').removeClass('d-none');
+ $('#copybtn').html("start copy");
+ $('#copybtn').removeClass('btn-primary');
+ $('#copybtn').addClass('btn-warning');
+ $('#newimgdiv').addClass('d-none');
+ $('#delimgbutton').addClass('d-none');
+ } else {
+ var sserver = $('#imageserverbuttonsource').html();
+ var sdir = $('#imagedirbutton'+ sserver +"source").html();
+ var sfile = $('#ld').val();
+ var tserver = $('#imageserverbuttontarget').html();
+ var tdir = $('#imagedirbutton'+ tserver +"target").html();
+ var tfile = $('#targetfilename').val();
+ $.ajax({
+ type: 'POST',
+ url: "?rand="+ makeid(),
+ data: "©ss="+ sserver +"©sf="+ sdir +"/"+ sfile +"©ts="+ tserver +"©tf="+ tdir +"/"+ tfile,
+ success: function(response) {
+ jresponse = response;
+ if (Number.isInteger(+jresponse)){
+ $('#imgprogr').removeClass('d-none');
+ $('#imgprog').removeClass('d-none');
+ $('#imagemodaltext2').addClass('d-none');
+ interval= setInterval(actioncheck,3000);
+ cdone = "no";
+ } else {
+ cdone = "fail";
+ window.alert("FAIL! nana"+ jresponse +"nana");
+ }
+ },
+ });
+ }
+}
+
+function createimg(){
+ var server = $('#imageserverbuttonsource').html();
+ var dir = $('#imagedirbutton'+ server +'source').html();
+ var imgname = $('#newimg').val();
+ var imgsize = $('#newimgsize').val();
+ $.ajax({
+ type: 'POST',
+ url: "?rand="+ makeid(),
+ data: "createimgs="+ server +"&createimgd="+ dir +"&createimg="+ imgname +"&createimgsize="+ imgsize,
+ success: function(response){
+ var imgsuc = new RegExp("createimg completed")
+ if (imgsuc.test(response)){
+ window.location.href = "";
+ } else {
+ window.alert("Failure\r "+ response);
+ }
+ }
+ });
+}