summaryrefslogtreecommitdiffstats
path: root/modules-available/js_ip
diff options
context:
space:
mode:
authorSimon Rettberg2019-11-27 11:22:11 +0100
committerSimon Rettberg2019-11-27 11:22:11 +0100
commit63c02d5082528d9d0c69520e0034cbb52522208d (patch)
tree0db60510494949f368b47d5e8da3986a20eb971a /modules-available/js_ip
parent[rebootcontrol] Start adding WOL functionality (diff)
downloadslx-admin-63c02d5082528d9d0c69520e0034cbb52522208d.tar.gz
slx-admin-63c02d5082528d9d0c69520e0034cbb52522208d.tar.xz
slx-admin-63c02d5082528d9d0c69520e0034cbb52522208d.zip
[js_ip/locations] Mode cidr/ip handling to own module
Diffstat (limited to 'modules-available/js_ip')
-rw-r--r--modules-available/js_ip/clientscript.js67
-rw-r--r--modules-available/js_ip/config.json7
2 files changed, 74 insertions, 0 deletions
diff --git a/modules-available/js_ip/clientscript.js b/modules-available/js_ip/clientscript.js
new file mode 100644
index 00000000..930292b1
--- /dev/null
+++ b/modules-available/js_ip/clientscript.js
@@ -0,0 +1,67 @@
+'use strict';
+
+function ip2long(IP) {
+ var i = 0;
+ IP = IP.match(/^([1-9]\d*|0[0-7]*|0x[\da-f]+)(?:\.([1-9]\d*|0[0-7]*|0x[\da-f]+))?(?:\.([1-9]\d*|0[0-7]*|0x[\da-f]+))?(?:\.([1-9]\d*|0[0-7]*|0x[\da-f]+))?$/i);
+ if (!IP) {
+ return false;
+ }
+ IP.push(0, 0, 0, 0);
+ for (i = 1; i < 5; i += 1) {
+ IP[i] = parseInt(IP[i]) || 0;
+ if (IP[i] < 0 || IP[i] > 255)
+ return false;
+ }
+ return IP[1] * 16777216 + IP[2] * 65536 + IP[3] * 256 + IP[4] * 1;
+}
+
+function long2ip(a) {
+ return [
+ a >>> 24,
+ 255 & a >>> 16,
+ 255 & a >>> 8,
+ 255 & a
+ ].join('.');
+}
+
+function cidrToRange(cidr) {
+ var range = [];
+ cidr = cidr.split('/');
+ if (cidr.length !== 2)
+ return false;
+ var cidr_1 = parseInt(cidr[1]);
+ if (cidr_1 <= 0 || cidr_1 > 32)
+ return false;
+ var param = ip2long(cidr[0]);
+ if (param === false)
+ return false;
+ range[0] = long2ip((param) & ((-1 << (32 - cidr_1))));
+ var start = ip2long(range[0]);
+ range[1] = long2ip(start + Math.pow(2, (32 - cidr_1)) - 1);
+ return range;
+}
+
+/**
+ * Add listener to start IP input; when it loses focus, see if we have a
+ * CIDR notation and fill out start+end field.
+ */
+function slxAttachCidr() {
+ $('.cidrmagic').each(function () {
+ var t = $(this);
+ var s = t.find('input.cidrstart');
+ var e = t.find('input.cidrend');
+ if (!s || !e)
+ return;
+ t.removeClass('cidrmagic');
+ s.focusout(function () {
+ var res = cidrToRange(s.val());
+ if (res === false)
+ return;
+ s.val(res[0]);
+ e.val(res[1]);
+ });
+ });
+}
+
+// Attach
+slxAttachCidr(); \ No newline at end of file
diff --git a/modules-available/js_ip/config.json b/modules-available/js_ip/config.json
new file mode 100644
index 00000000..96c02bce
--- /dev/null
+++ b/modules-available/js_ip/config.json
@@ -0,0 +1,7 @@
+{
+ "dependencies": [],
+ "scripts": [
+ "clientscript.js"
+ ],
+ "client-plugin": true
+} \ No newline at end of file