diff options
author | Simon Rettberg | 2019-11-22 17:14:06 +0100 |
---|---|---|
committer | Simon Rettberg | 2019-11-22 17:14:06 +0100 |
commit | 95c8a36dfc7e63f23eae3b411fd1a371da6f774c (patch) | |
tree | 3478a4ae1e21c5e315a38488d1af655f93843420 /modules-available/rebootcontrol/templates | |
parent | [inc/Taskmanagercallback] Remove unused function (diff) | |
download | slx-admin-95c8a36dfc7e63f23eae3b411fd1a371da6f774c.tar.gz slx-admin-95c8a36dfc7e63f23eae3b411fd1a371da6f774c.tar.xz slx-admin-95c8a36dfc7e63f23eae3b411fd1a371da6f774c.zip |
[rebootcontrol] Start adding WOL functionality
Diffstat (limited to 'modules-available/rebootcontrol/templates')
-rw-r--r-- | modules-available/rebootcontrol/templates/_page.html | 184 | ||||
-rw-r--r-- | modules-available/rebootcontrol/templates/header.html | 74 | ||||
-rw-r--r-- | modules-available/rebootcontrol/templates/jumphost-edit.html | 42 | ||||
-rw-r--r-- | modules-available/rebootcontrol/templates/jumphost-list.html | 64 | ||||
-rw-r--r-- | modules-available/rebootcontrol/templates/status-checkconnection.html | 51 | ||||
-rw-r--r-- | modules-available/rebootcontrol/templates/status-reboot.html (renamed from modules-available/rebootcontrol/templates/status.html) | 14 | ||||
-rw-r--r-- | modules-available/rebootcontrol/templates/task-list.html | 2 |
7 files changed, 195 insertions, 236 deletions
diff --git a/modules-available/rebootcontrol/templates/_page.html b/modules-available/rebootcontrol/templates/_page.html deleted file mode 100644 index a124e165..00000000 --- a/modules-available/rebootcontrol/templates/_page.html +++ /dev/null @@ -1,184 +0,0 @@ -<h3>{{location}}</h3> - -<form method="post" action="?do=rebootcontrol" class="form-inline"> - <input type="hidden" name="token" value="{{token}}"> - <div class="row"> - <div class="col-md-12"> - <table class="table table-condensed table-hover stupidtable" id="dataTable"> - <thead> - <tr> - <th data-sort="string">{{lang_client}}</th> - <th data-sort="ipv4">{{lang_ip}}</th> - <th data-sort="string">{{lang_status}}</th> - <th data-sort="string">{{lang_session}}</th> - <th data-sort="string">{{lang_user}}</th> - <th data-sort="int" data-sort-default="desc">{{lang_selected}}</th> - </tr> - </thead> - - <tbody> - {{#data}} - <tr> - <td> - {{hostname}} - {{^hostname}}{{clientip}}{{/hostname}} - </td> - <td>{{clientip}}</td> - <td class="statusColumn"> - {{#status}} - <span class="text-success">{{lang_on}}</span> - {{/status}} - {{^status}} - <span class="text-danger">{{lang_off}}</span> - {{/status}} - </td> - <td>{{#status}}{{currentsession}}{{/status}}</td> - <td>{{#status}}{{currentuser}}{{/status}}</td> - <td data-sort-value="0" class="checkboxColumn slx-smallcol"> - <div class="checkbox"> - <input id="m-{{machineuuid}}" type="checkbox" name="clients[]" value='{{machineuuid}}'> - <label for="m-{{machineuuid}}"></label> - </div> - </td> - </tr> - {{/data}} - </tbody> - </table> - </div> - </div> - - <!-- Modals --> - <div class ="modal fade" id="rebootModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> - <div class="modal-dialog" role="document"> - <div class="modal-content"> - <div class="modal-header"> - <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> - <h4 class="modal-title" id="myModalLabel">{{lang_rebootButton}}</h4> - </div> - <div class="modal-body"> - <div>{{lang_rebootCheck}}</div> - <div>{{lang_rebootIn}} <input name="r-minutes" title="{{lang_shutdownIn}}" type="number" value="0" min="0" pattern="\d+"> {{lang_minutes}}</div> - <div> - <div class="checkbox checkbox-inline"> - <input name="quick" type="checkbox" value="on" id="rb-quick"> - <label for="rb-quick">{{lang_kexecRebootCheck}}</label> - </div> - </div> - </div> - <div class="modal-footer"> - <button type="button" class="btn btn-default" data-dismiss="modal">{{lang_cancel}}</button> - <button type="submit" {{perms.action.reboot.disabled}} name="action" value="reboot" class="btn btn-warning"> - <span class="glyphicon glyphicon-repeat"></span> - {{lang_reboot}} - </button> - </div> - </div> - </div> - </div> - - <div class ="modal fade" id="shutdownModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel2"> - <div class="modal-dialog" role="document"> - <div class="modal-content"> - <div class="modal-header"> - <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> - <h4 class="modal-title" id="myModalLabel2">{{lang_shutdownButton}}</h4> - </div> - <div class="modal-body"> - <div>{{lang_shutdownCheck}}</div> - {{lang_shutdownIn}} <input name="s-minutes" title="{{lang_shutdownIn}}" type="number" value="0" min="0" pattern="\d+"> {{lang_minutes}} - </div> - <div class="modal-footer"> - <button type="button" class="btn btn-default" data-dismiss="modal">{{lang_cancel}}</button> - <button type="submit" {{perms.action.shutdown.disabled}} name="action" value="shutdown" class="btn btn-danger"> - <span class="glyphicon glyphicon-off"></span> - {{lang_shutdownButton}} - </button> - </div> - </div> - </div> - </div> -</form> - - -<script type="application/javascript"> - var $dataTable; - - document.addEventListener("DOMContentLoaded", function() { - - $dataTable = $("#dataTable"); - markCheckedRows(); - // Handle change of checkboxes in table - $('input:checkbox').change(function() { - var $this = $(this); - //give each checkbox the function to mark the row (in green) - if ($this.is(':checked')) { - markRows($this.closest("tr"), true); - $this.closest("td").data("sort-value", 1); - } else { - markRows($this.closest("tr"), false); - $this.closest("td").data("sort-value", 0); - } - - //if all are checked, change the selectAll-Button to unselectAll. if one is not checked, change unselectAll to selectAll - var unchecked = $dataTable.find("input:checkbox:not(:checked)").length; - var checked = $dataTable.find("input:checkbox:checked").length; - if (unchecked === 0) { - $('#selectAllButton').hide(); - $('#unselectAllButton').show(); - } else if (checked === 0) { - $('#selectAllButton').show(); - $('#unselectAllButton').hide(); - } - - //if no client is selected, disable the shutdown/reboot button, and enable them if a client is selected - $('#rebootButton').prop('disabled', checked === 0 || '{{perms.action.reboot.disabled}}' === 'disabled'); - $('#shutdownButton').prop('disabled', checked === 0 || '{{perms.action.shutdown.disabled}}' === 'disabled'); - }); - // Propagate click on column with checkbox to checkbox - $('.checkboxColumn').click(function(e) { - if (e.target === this) { - $(this).find('input:checkbox').click(); - } - }); - // Arm the (de)select all buttons - $('#selectAllButton').click(function() { selectAllRows(true); }); - $('#unselectAllButton').click(function() { selectAllRows(false); }); - }); - - // Check all checkboxes, change selectAll button, make shutdown/reboot button enabled as clients will certainly be selected - function selectAllRows(selected) { - var $box = $dataTable.find('input:checkbox'); - if ($box.length === 0) return; - if (selected) { - $box = $box.filter(':not(:checked)'); - } else { - $box = $box.filter(':checked'); - } - if ($box.length === 0) return; - $box.prop('checked', !!selected).trigger('change'); - } - - // mark all previous checked rows (used when loading site), enable (de)select all if list is not empty - function markCheckedRows() { - var $checked = $dataTable.find("input:checkbox:checked"); - markRows($checked.closest("tr"), true); - var $unchecked = $dataTable.find("input:checkbox:not(:checked)"); - markRows($unchecked.closest("tr"), false); - if($unchecked.length === 0) { - $('#selectAllButton').hide(); - $('#unselectAllButton').show(); - } - if ($unchecked.length > 0 || $checked.length > 0) { - $('.select-button').prop('disabled', false); - } - } - - function markRows($rows, marked) { - if (marked) { - $rows.addClass('active'); - } else { - $rows.removeClass('active'); - } - } - -</script>
\ No newline at end of file diff --git a/modules-available/rebootcontrol/templates/header.html b/modules-available/rebootcontrol/templates/header.html index e171ccd6..4f240b81 100644 --- a/modules-available/rebootcontrol/templates/header.html +++ b/modules-available/rebootcontrol/templates/header.html @@ -1,34 +1,9 @@ <div class="page-header"> - <button type="button" id="settingsButton" class="btn btn-default pull-right" data-toggle="modal" data-target="#settingsModal"><span class="glyphicon glyphicon-cog"></span> {{lang_settings}}</button> - <h1>{{lang_rebootControl}}</h1> -</div> - -<div> - <label>{{lang_location}}: - <select id="locationDropdown" class="form-control" onchange="selectLocation()"> - {{#locations}} - <option value="{{locationid}}" {{disabled}} {{#selected}}selected{{/selected}}>{{locationpad}} {{locationname}}</option> - {{/locations}} - </select> - </label> - <div class="pull-right"> - <button type="button" id="shutdownButton" class="btn btn-danger action-button" data-toggle="modal" data-target="#shutdownModal" disabled> - <span class="glyphicon glyphicon-off"></span> - {{lang_shutdownButton}} - </button> - <button type="button" id="rebootButton" class="btn btn-warning action-button" data-toggle="modal" data-target="#rebootModal" disabled> - <span class="glyphicon glyphicon-repeat"></span> - {{lang_rebootButton}} - </button> - <button type="button" id="selectAllButton" class="btn btn-primary select-button" disabled> - <span class="glyphicon glyphicon-check"></span> - {{lang_selectall}} - </button> - <button type="button" id="unselectAllButton" class="btn btn-default select-button collapse" disabled> - <span class="glyphicon glyphicon-unchecked"></span> - {{lang_unselectall}} - </button> - </div> + <button type="button" id="settingsButton" class="btn btn-default pull-right" data-toggle="modal" data-target="#settingsModal"> + <span class="glyphicon glyphicon-cog"></span> + {{lang_settings}} + </button> + <h1>{{lang_moduleHeading}}</h1> </div> <div id="settingsModal" class="modal fade" role="dialog"> @@ -41,11 +16,16 @@ </div> <div class="modal-body"> <p>{{lang_pubKey}}</p> - <pre id="pubkey">{{pubKey}}</pre> + <pre id="pubkey">{{pubkey}}</pre> <p>{{lang_newKeypairExplanation}}</p> + <div class="checkbox"> + <input {{perms.newkeypair.disabled}} type="checkbox" id="keypair-confirm"> + <label for="keypair-confirm">{{lang_keypairConfirmCheck}}</label> + </div> </div> <div class="modal-footer"> - <button {{perms.newkeypair.disabled}} class="btn btn-danger pull-right" onclick="generateNewKeypair()" type="button"> + <button {{perms.newkeypair.disabled}} class="btn btn-danger pull-right" id="keypair-button" + onclick="generateNewKeypair()" type="button"> <span class="glyphicon glyphicon-refresh"></span> {{lang_genNew}} </button> @@ -55,25 +35,33 @@ </div> <script type="application/javascript"> - - // Change Location when selected in Dropdown Menu - function selectLocation() { - var dropdown = $("#locationDropdown"); - var location = dropdown.val(); - window.location.replace("?do=rebootcontrol&location="+location); - } - - function generateNewKeypair() { - if (!confirm('{{lang_confirmNewKeypair}}')) +document.addEventListener('DOMContentLoaded', function() { + var $btn = $('#keypair-button'); + var $chk = $('#keypair-confirm'); + $chk.prop('checked', false); // Firefox helpfully keeping state on F5 + $btn.click(function() { + if (!$chk.is(':checked')) { + var $p = $chk.parent(); + $p.fadeOut(100, function () { + $p.fadeIn(75); + }); return; + } + $btn.prop('disabled', true); $.ajax({ url: '?do=rebootcontrol', type: 'POST', data: { action: "generateNewKeypair", token: TOKEN }, success: function(value) { $('#pubkey').text(value); + }, + fail: function() { + $('#pubkey').text('Error'); + $btn.prop('disabled', false); } }); - } + }); +}); + </script>
\ No newline at end of file diff --git a/modules-available/rebootcontrol/templates/jumphost-edit.html b/modules-available/rebootcontrol/templates/jumphost-edit.html new file mode 100644 index 00000000..82629d2e --- /dev/null +++ b/modules-available/rebootcontrol/templates/jumphost-edit.html @@ -0,0 +1,42 @@ +<h2>{{lang_editJumpHost}}</h2> + +<form method="post" action="?do=rebootcontrol"> + <input type="hidden" name="token" value="{{token}}"> + <input type="hidden" name="action" value="savejumphost"> + <input type="hidden" name="hostid" value="{{hostid}}"> + <div class="list-group"> + <div class="list-group-item"> + <div class="row"> + <div class="col-md-9 col-sm-7"> + <label for="host">{{lang_host}}</label> + <input required id="host" class="form-control" type="text" name="host" value="{{host}}"> + </div> + <div class="col-md-3 col-sm-5"> + <label for="port">{{lang_port}}</label> + <input required id="port" class="form-control" type="number" name="port" value="{{port}}" min="1" max="65535"> + </div> + </div> + </div> + <div class="list-group-item"> + <label for="username">{{lang_username}}</label> + <input required id="username" class="form-control" type="text" name="username" value="{{username}}"> + </div> + <div class="list-group-item"> + <label for="sshkey">{{lang_privkey}}</label> + <textarea required id="sshkey" class="form-control" name="sshkey" rows="8">{{sshkey}}</textarea> + </div> + <div class="list-group-item"> + <label for="script">{{lang_wakeupScript}}</label> + <textarea required id="script" class="form-control" name="script" rows="8">{{script}}</textarea> + <div class="slx-smallspace"></div> + <p>{{lang_wakeScriptHelp}}</p> + </div> + </div> + <div class="buttonbar text-right"> + <button type="reset" class="btn btn-default">{{lang_reset}}</button> + <button type="submit" class="btn btn-primary"> + <span class="glyphicon glyphicon-floppy-disk"></span> + {{lang_save}} + </button> + </div> +</form>
\ No newline at end of file diff --git a/modules-available/rebootcontrol/templates/jumphost-list.html b/modules-available/rebootcontrol/templates/jumphost-list.html new file mode 100644 index 00000000..3fbe4c21 --- /dev/null +++ b/modules-available/rebootcontrol/templates/jumphost-list.html @@ -0,0 +1,64 @@ +<h2>{{lang_settings}}</h2> + +<h3>{{lang_wolReachability}}</h3> + +<h4>{{lang_jumpHosts}}</h4> + +<form method="post" action="?do=rebootcontrol"> + <input type="hidden" name="token" value="{{token}}"> + <input type="hidden" name="action" value="jumphost"> + <table class="table"> + <thead> + <tr> + <th>{{lang_host}}</th> + <th class="slx-smallcol">{{lang_assignedSubnets}}</th> + <th class="slx-smallcol">{{lang_reachable}}</th> + <th class="slx-smallcol"></th> + </tr> + </thead> + <tbody> + {{#jumpHosts}} + <tr> + <td>{{host}}:{{port}}</td> + <td class="text-nowrap text-right"> + {{subnetCount}} + <a class="btn btn-xs btn-default {{perms.jumphost.assign-subnet.disabled}}" + href="?do=rebootcontrol&show=jumphost-assign&id={{hostid}}"> + <span class="glyphicon glyphicon-edit"></span> + </a> + </td> + <td class="text-nowrap text-center"> + {{#reachable}} + <span class="glyphicon glyphicon-ok text-success"></span> + {{/reachable}} + {{^reachable}} + <span class="glyphicon glyphicon-remove text-danger"></span> + {{/reachable}} + <button class="btn btn-xs btn-default btn-check-jumphost" type="submit" name="checkid" value="{{hostid}}" + {{perms.jumphost.edit.disabled}}> + {{lang_check}} + </button> + </td> + <td class="text-nowrap text-center"> + <a class="btn btn-xs btn-default {{perms.jumphost.edit.disabled}}" + href="?do=rebootcontrol&show=jumphost&id={{hostid}}"> + <span class="glyphicon glyphicon-edit"></span> + </a> + <button type="submit" name="deleteid" value="{{hostid}}" class="btn btn-xs btn-danger" + data-confirm="#confirm-delete-host" data-title="{{host}}" {{perms.jumphost.edit.disabled}}> + <span class="glyphicon glyphicon-trash"></span> + </button> + </td> + </tr> + {{/jumpHosts}} + </tbody> + </table> +</form> +<div class="buttonbar text-right"> + <a class="btn btn-success" href="?do=rebootcontrol&show=jumphost&id=new"> + <span class="glyphicon glyphicon-plus"></span> + {{lang_new}} + </a> +</div> + +<div class="hidden" id="confirm-delete-host">{{lang_hostDeleteConfirm}}</div>
\ No newline at end of file diff --git a/modules-available/rebootcontrol/templates/status-checkconnection.html b/modules-available/rebootcontrol/templates/status-checkconnection.html new file mode 100644 index 00000000..c30b42d9 --- /dev/null +++ b/modules-available/rebootcontrol/templates/status-checkconnection.html @@ -0,0 +1,51 @@ +<h3>{{lang_checkingJumpHost}}: {{host}}</h3> + +<a href="?do=rebootcontrol" class="btn btn-primary pull-right"> + <span class="glyphicon glyphicon-arrow-left"></span> + {{lang_back}} +</a> +<div class="clearfix"></div> +<div class="collapse alert alert-success" id="result-ok"> + <span class="glyphicon glyphicon-check"></span> + {{lang_hostReachable}} +</div> +<div class="collapse alert alert-warning" id="result-error"> + <span class="glyphicon glyphicon-remove"></span> + {{lang_hostNonZeroExit}} +</div> +<div class="collapse alert alert-danger" id="result-unreach"> + <span class="glyphicon glyphicon-remove"></span> + {{lang_hostNotReachable}} +</div> + +<div class="collapse" id="log-wrapper"> + <label for="log-output">{{lang_checkOutputLabel}}</label> + <pre id="log-output"></pre> +</div> + +<div data-tm-id="{{taskId}}" data-tm-log="error" data-tm-callback="updateStatus">{{lang_checkingJumpHost}}</div> +<script type="application/javascript"> + function updateStatus(task) { + if (!task || !task.data || !task.data.result || !task.data.result['{{host}}']) + return; + var status = task.data.result['{{host}}']; + var log = ''; + if (status.stderr) log += status.stderr + "\n"; + if (status.stdout) log += status.stdout + "\n"; + showErrorLog(log); + if (task.statusCode === 'TASK_FINISHED' || task.statusCode === 'TASK_ERROR') { + if (status.exitCode === 0) { + $('#result-ok').show(); + } else if (status.exitCode > 0) { + $('#result-error').show(); + } else { + $('#result-unreach').show(); + } + } + } + function showErrorLog(log) { + if (!log) return; + $('#log-output').text(log); + $('#log-wrapper').show(); + } +</script> diff --git a/modules-available/rebootcontrol/templates/status.html b/modules-available/rebootcontrol/templates/status-reboot.html index c05b2fad..594faa4c 100644 --- a/modules-available/rebootcontrol/templates/status.html +++ b/modules-available/rebootcontrol/templates/status-reboot.html @@ -1,11 +1,9 @@ -<div> - <form class="form-inline"> - <b>{{lang_location}}: {{locationName}}</b> - <input type="hidden" name="do" value="rebootcontrol"> - <input type="hidden" name="location" value="{{locationId}}"> - <button type="submit" class="btn btn-primary pull-right"><span class="glyphicon glyphicon-arrow-left"></span> {{lang_back}}</button> - </form> -</div> +<h3>{{lang_location}}: {{locationName}}</h3> + +<a href="?do=rebootcontrol" class="btn btn-primary pull-right"> + <span class="glyphicon glyphicon-arrow-left"></span> + {{lang_back}} +</a> <div> <table class="table table-hover stupidtable" id="dataTable"> diff --git a/modules-available/rebootcontrol/templates/task-list.html b/modules-available/rebootcontrol/templates/task-list.html index 063ba949..87515085 100644 --- a/modules-available/rebootcontrol/templates/task-list.html +++ b/modules-available/rebootcontrol/templates/task-list.html @@ -13,7 +13,7 @@ {{#list}} <tr> <td> - <a href="?do=rebootcontrol&taskid={{taskId}}">{{mode}}</a> + <a href="?do=rebootcontrol&show=task&taskid={{taskId}}">{{mode}}</a> </td> <td> {{locationName}} |