summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--applications/luci-app-natmap/Makefile13
-rw-r--r--applications/luci-app-natmap/htdocs/luci-static/resources/view/natmap.js132
-rw-r--r--applications/luci-app-natmap/po/templates/natmap.pot83
-rw-r--r--applications/luci-app-natmap/root/usr/share/luci/menu.d/luci-app-natmap.json12
-rw-r--r--applications/luci-app-natmap/root/usr/share/rpcd/acl.d/luci-app-natmap.json17
5 files changed, 257 insertions, 0 deletions
diff --git a/applications/luci-app-natmap/Makefile b/applications/luci-app-natmap/Makefile
new file mode 100644
index 0000000000..0d02dcac51
--- /dev/null
+++ b/applications/luci-app-natmap/Makefile
@@ -0,0 +1,13 @@
+# This is free software, licensed under the Apache License, Version 2.0
+
+include $(TOPDIR)/rules.mk
+
+LUCI_TITLE:=LuCI Support for natmap
+LUCI_DEPENDS:=+natmap
+
+PKG_LICENSE:=Apache-2.0
+PKG_MAINTAINER:=Richard Yu <yurichard3839@gmail.com>
+
+include ../../luci.mk
+
+# call BuildPackage - OpenWrt buildroot signature
diff --git a/applications/luci-app-natmap/htdocs/luci-static/resources/view/natmap.js b/applications/luci-app-natmap/htdocs/luci-static/resources/view/natmap.js
new file mode 100644
index 0000000000..2f66627864
--- /dev/null
+++ b/applications/luci-app-natmap/htdocs/luci-static/resources/view/natmap.js
@@ -0,0 +1,132 @@
+'use strict';
+'require form';
+'require fs';
+'require rpc';
+'require view';
+'require tools.widgets as widgets';
+
+var callServiceList = rpc.declare({
+ object: 'service',
+ method: 'list',
+ params: ['name'],
+ expect: { '': {} }
+});
+
+function getInstances() {
+ return L.resolveDefault(callServiceList('natmap'), {}).then(function(res) {
+ try {
+ return res.natmap.instances || {};
+ } catch (e) {}
+ return {};
+ });
+}
+
+function getStatus() {
+ return getInstances().then(function(instances) {
+ var promises = [];
+ var status = {};
+ for (var key in instances) {
+ var i = instances[key];
+ if (i.running && i.pid) {
+ var f = '/var/run/natmap/' + i.pid + '.json';
+ (function(k) {
+ promises.push(fs.read(f).then(function(res) {
+ status[k] = JSON.parse(res);
+ }).catch(function(e){}));
+ })(key);
+ }
+ }
+ return Promise.all(promises).then(function() { return status; });
+ });
+}
+
+return view.extend({
+ load: function() {
+ return getStatus();
+ },
+ render: function(status) {
+ var m, s, o;
+
+ m = new form.Map('natmap', _('NATMap'));
+ s = m.section(form.GridSection, 'natmap');
+ s.addremove = true;
+ s.anonymous = true;
+
+ o = s.option(form.Flag, 'enable', _('Enable'));
+ o.editable = true;
+ o.modalonly = false;
+
+ o = s.option(form.ListValue, 'udp_mode', _('Protocol'));
+ o.default = '1';
+ o.value('0', 'TCP');
+ o.value('1', 'UDP');
+ o.textvalue = function(section_id) {
+ var cval = this.cfgvalue(section_id);
+ var i = this.keylist.indexOf(cval);
+ return this.vallist[i];
+ };
+
+ o = s.option(form.ListValue, 'family', _('Restrict to address family'));
+ o.modalonly = true;
+ o.value('', _('IPv4 and IPv6'));
+ o.value('ipv4', _('IPv4 only'));
+ o.value('ipv6', _('IPv6 only'));
+
+ o = s.option(widgets.NetworkSelect, 'interface', _('Interface'));
+ o.modalonly = true;
+
+ o = s.option(form.Value, 'interval', _('Keep-alive interval'));
+ o.datatype = 'uinteger';
+ o.modalonly = true;
+
+ o = s.option(form.Value, 'stun_server', _('STUN server'), _('For UDP mode'));
+ o.datatype = 'host';
+ o.modalonly = true;
+ o.optional = false;
+ o.rmempty = false;
+
+ o = s.option(form.Value, 'http_server', _('HTTP server'), _('For TCP mode'));
+ o.datatype = 'host';
+ o.modalonly = true;
+ o.optional = false;
+ o.rmempty = false;
+
+ o = s.option(form.Value, 'port', _('Port'));
+ o.datatype = 'port';
+ o.optional = false;
+ o.rmempty = false;
+
+ o = s.option(form.Flag, '_forward_mode', _('Forward mode'));
+ o.modalonly = true;
+ o.ucioption = 'forward_target';
+ o.load = function(section_id) {
+ return this.super('load', section_id) ? '1' : '0';
+ };
+ o.write = function(section_id, formvalue) {};
+
+ o = s.option(form.Value, 'forward_target', _('Forward target'));
+ o.datatype = 'host';
+ o.modalonly = true;
+ o.depends('_forward_mode', '1');
+
+ o = s.option(form.Value, 'notify_script', _('Notify script'));
+ o.datatype = 'file';
+ o.modalonly = true;
+
+ o = s.option(form.DummyValue, '_external_ip', _('External IP'));
+ o.modalonly = false;
+ o.textvalue = function(section_id) {
+ var s = status[section_id];
+ if (s) return s.ip;
+ };
+
+ o = s.option(form.DummyValue, '_external_port', _('External Port'));
+ o.modalonly = false;
+ o.textvalue = function(section_id) {
+ var s = status[section_id];
+ if (s) return s.port;
+ };
+
+ return m.render();
+ }
+});
diff --git a/applications/luci-app-natmap/po/templates/natmap.pot b/applications/luci-app-natmap/po/templates/natmap.pot
new file mode 100644
index 0000000000..5c221e0eb8
--- /dev/null
+++ b/applications/luci-app-natmap/po/templates/natmap.pot
@@ -0,0 +1,83 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8"
+
+#: applications/luci-app-natmap/htdocs/luci-static/resources/view/natmap.js:56
+msgid "Enable"
+msgstr ""
+
+#: applications/luci-app-natmap/htdocs/luci-static/resources/view/natmap.js:117
+msgid "External IP"
+msgstr ""
+
+#: applications/luci-app-natmap/htdocs/luci-static/resources/view/natmap.js:124
+msgid "External Port"
+msgstr ""
+
+#: applications/luci-app-natmap/htdocs/luci-static/resources/view/natmap.js:89
+msgid "For TCP mode"
+msgstr ""
+
+#: applications/luci-app-natmap/htdocs/luci-static/resources/view/natmap.js:83
+msgid "For UDP mode"
+msgstr ""
+
+#: applications/luci-app-natmap/htdocs/luci-static/resources/view/natmap.js:100
+msgid "Forward mode"
+msgstr ""
+
+#: applications/luci-app-natmap/htdocs/luci-static/resources/view/natmap.js:108
+msgid "Forward target"
+msgstr ""
+
+#: applications/luci-app-natmap/root/usr/share/rpcd/acl.d/luci-app-natmap.json:3
+msgid "Grant access to LuCI app natmap"
+msgstr ""
+
+#: applications/luci-app-natmap/htdocs/luci-static/resources/view/natmap.js:89
+msgid "HTTP server"
+msgstr ""
+
+#: applications/luci-app-natmap/htdocs/luci-static/resources/view/natmap.js:72
+msgid "IPv4 and IPv6"
+msgstr ""
+
+#: applications/luci-app-natmap/htdocs/luci-static/resources/view/natmap.js:73
+msgid "IPv4 only"
+msgstr ""
+
+#: applications/luci-app-natmap/htdocs/luci-static/resources/view/natmap.js:74
+msgid "IPv6 only"
+msgstr ""
+
+#: applications/luci-app-natmap/htdocs/luci-static/resources/view/natmap.js:76
+msgid "Interface"
+msgstr ""
+
+#: applications/luci-app-natmap/htdocs/luci-static/resources/view/natmap.js:79
+msgid "Keep-alive interval"
+msgstr ""
+
+#: applications/luci-app-natmap/htdocs/luci-static/resources/view/natmap.js:51
+#: applications/luci-app-natmap/root/usr/share/luci/menu.d/luci-app-natmap.json:3
+msgid "NATMap"
+msgstr ""
+
+#: applications/luci-app-natmap/htdocs/luci-static/resources/view/natmap.js:113
+msgid "Notify script"
+msgstr ""
+
+#: applications/luci-app-natmap/htdocs/luci-static/resources/view/natmap.js:95
+msgid "Port"
+msgstr ""
+
+#: applications/luci-app-natmap/htdocs/luci-static/resources/view/natmap.js:60
+msgid "Protocol"
+msgstr ""
+
+#: applications/luci-app-natmap/htdocs/luci-static/resources/view/natmap.js:70
+msgid "Restrict to address family"
+msgstr ""
+
+#: applications/luci-app-natmap/htdocs/luci-static/resources/view/natmap.js:83
+msgid "STUN server"
+msgstr ""
diff --git a/applications/luci-app-natmap/root/usr/share/luci/menu.d/luci-app-natmap.json b/applications/luci-app-natmap/root/usr/share/luci/menu.d/luci-app-natmap.json
new file mode 100644
index 0000000000..4513a11160
--- /dev/null
+++ b/applications/luci-app-natmap/root/usr/share/luci/menu.d/luci-app-natmap.json
@@ -0,0 +1,12 @@
+{
+ "admin/services/natmap": {
+ "title": "NATMap",
+ "action": {
+ "type": "view",
+ "path": "natmap"
+ },
+ "depends": {
+ "acl": [ "luci-app-natmap" ]
+ }
+ }
+}
diff --git a/applications/luci-app-natmap/root/usr/share/rpcd/acl.d/luci-app-natmap.json b/applications/luci-app-natmap/root/usr/share/rpcd/acl.d/luci-app-natmap.json
new file mode 100644
index 0000000000..ccaee88795
--- /dev/null
+++ b/applications/luci-app-natmap/root/usr/share/rpcd/acl.d/luci-app-natmap.json
@@ -0,0 +1,17 @@
+{
+ "luci-app-natmap": {
+ "description": "Grant access to LuCI app natmap",
+ "read": {
+ "file": {
+ "/var/run/natmap/*": [ "read" ]
+ },
+ "ubus": {
+ "service": [ "list" ]
+ },
+ "uci": ["natmap"]
+ },
+ "write": {
+ "uci": ["natmap"]
+ }
+ }
+}