From d57893514d73e846e6df8b2b21be6f4ca2abee2f Mon Sep 17 00:00:00 2001 From: nativemad Date: Sat, 1 Dec 2018 17:52:19 +0100 Subject: [PATCH] introduce image management --- nlvmi | 161 ++++++++++++++++++++++++++++++++++++++++------- web/header.php | 25 ++++++-- web/index.php | 165 ++++++++++++++++++++++++++++++++++++++++++++++--- web/nlvmi.js | 164 ++++++++++++++++++++++++++++++++++++++++++------ 4 files changed, 464 insertions(+), 51 deletions(-) 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 + - - + +
- usermanagement
servers
";} ?> - logout
+ images servers usermanagement ";} ?> + logout
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 "
$what
"; } + +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 = "
"; + 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 .= "

"; + 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); + } + } + }); +}