From cc64f6afae242049b81954c2408ee67508ad5e84 Mon Sep 17 00:00:00 2001 From: Udo Walter Date: Thu, 11 Apr 2019 17:26:16 +0000 Subject: [groups] add button to wake clients via --- server/api/wakerequests.js | 17 +++++++++++++++ server/package-lock.json | 5 +++++ server/package.json | 1 + webapp/src/components/ConfiguratorModule.vue | 1 + webapp/src/components/GroupModuleClientList.vue | 24 ++++++++++++++------- webapp/src/components/GroupModuleDialog.vue | 28 ++++++++++++++++++++----- 6 files changed, 64 insertions(+), 12 deletions(-) create mode 100644 server/api/wakerequests.js diff --git a/server/api/wakerequests.js b/server/api/wakerequests.js new file mode 100644 index 0000000..51e49d8 --- /dev/null +++ b/server/api/wakerequests.js @@ -0,0 +1,17 @@ +/* global __appdir */ +var path = require('path') +var db = require(path.join(__appdir, 'lib', 'sequelize')) +var wol = require('node-wol') +var express = require('express') +const { decorateApp } = require('@awaitjs/express') +var router = decorateApp(express.Router()) + +router.postAsync('', async (req, res) => { + const clients = await db.client.findAll({ where: { id: req.body.clients } }) + clients.forEach(client => { + wol.wake(client.mac, { address: client.ip.slice(0, client.ip.lastIndexOf('.') + 1) + '255' }, err => {}) + }) + res.status(200).end() +}) + +module.exports.router = router diff --git a/server/package-lock.json b/server/package-lock.json index ac6d4bb..204a361 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -2715,6 +2715,11 @@ "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-3.4.0.tgz", "integrity": "sha512-YoviGBJYGrPdLOKDIQB0sKxuKy/EEsxzooNkOZak4vSTKT/qH0Pa6dj3t1MJjEQGsefih61IyHDmO1WW7xOFfw==" }, + "node-wol": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/node-wol/-/node-wol-0.1.1.tgz", + "integrity": "sha1-m+F/6LeZxeAKaq1ciTb0NoTl6D0=" + }, "nodemailer": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-4.7.0.tgz", diff --git a/server/package.json b/server/package.json index f74c083..9684ea1 100644 --- a/server/package.json +++ b/server/package.json @@ -20,6 +20,7 @@ "morgan": "^1.9.1", "mysql": "^2.16.0", "mysql2": "^1.6.5", + "node-wol": "^0.1.1", "nodemailer": "^4.7.0", "secure-password": "^3.1.0", "sequelize": "^4.43.0", diff --git a/webapp/src/components/ConfiguratorModule.vue b/webapp/src/components/ConfiguratorModule.vue index 7562021..b336943 100644 --- a/webapp/src/components/ConfiguratorModule.vue +++ b/webapp/src/components/ConfiguratorModule.vue @@ -173,6 +173,7 @@ export default { created () { this.$store.dispatch('configurator/loadData') this.$store.dispatch('groups/loadGroupList') + this.$store.dispatch('groups/loadClientList') } } diff --git a/webapp/src/components/GroupModuleClientList.vue b/webapp/src/components/GroupModuleClientList.vue index 557d664..630c968 100644 --- a/webapp/src/components/GroupModuleClientList.vue +++ b/webapp/src/components/GroupModuleClientList.vue @@ -6,6 +6,7 @@ "ip": "IP Address", "mac": "MAC Address", "uuid": "UUID", + "wakeClients": "Wake one client up | Wake {0} clients up", "removeClients": "Remove one client | Remove {0} clients", "addClients": "Add clients", "deleteClients": "Delete one client | Delete {0} clients", @@ -17,6 +18,7 @@ "ip": "IP Adresse", "mac": "MAC Adresse", "uuid": "UUID", + "wakeClients": "Wecke einen Client auf | Wecke {0} Clients auf", "removeClients": "Entferne einen Client | Entferne {0} Clients", "addClients": "Füge Clients hinzu", "deleteClients": "Lösche einen Clients | Lösche {0} Clients", @@ -34,18 +36,23 @@ -
- - delete{{ $tc('deleteClients', selected.length, [selected.length]) }} +
+ + notifications_active{{ $tc('wakeClients', selected.length, [selected.length]) }} - create{{ $t('createClient') }} -
-
+ + +
@@ -96,6 +103,9 @@ export default { }, addExisting () { this.setDialog({ show: true, info: { action: 'add', type: 'client', selected: this.selected, tabIndex: this.tabIndex } }) + }, + wake () { + this.setDialog({ show: true, info: { action: 'wake', type: 'client', selected: this.selected, tabIndex: this.tabIndex } }) } } } diff --git a/webapp/src/components/GroupModuleDialog.vue b/webapp/src/components/GroupModuleDialog.vue index 4e38c0b..e9bb65d 100644 --- a/webapp/src/components/GroupModuleDialog.vue +++ b/webapp/src/components/GroupModuleDialog.vue @@ -17,6 +17,9 @@ "select": { "group": "Select groups", "client": "Select clients" + }, + "wake": { + "client": "Wake this client up? | Wake these {0} clients up?" } }, "success": { @@ -41,7 +44,8 @@ "id": "ID", "name": "Name", "description": "Description", - "ip": "IP Address" + "ip": "IP Address", + "wake": "Wake up" }, "de": { "title": { @@ -60,6 +64,9 @@ "select": { "group": "Gruppen auswählen", "client": "Clients auswählen" + }, + "wake": { + "client": "Diesen Client aufwecken? | Diese {0} Clients aufwecken?" } }, "success": { @@ -84,7 +91,8 @@ "id": "ID", "name": "Name", "description": "Beschreibung", - "ip": "IP Adresse" + "ip": "IP Adresse", + "wake": "Aufwecken" } } @@ -114,7 +122,7 @@ :items="items" :row-count="$vuetify.breakpoint.smAndDown ? -1 : undefined" > -
+
x.id) + }) + this.setDialog({ show: false }) + return + } + const actionMap = { 'delete': { 'group': 'deleteGroups', 'client': 'deleteClients' }, 'remove': { 'group': 'removeSubroups', 'client': 'removeClients' }, -- cgit v1.2.3-55-g7522