'use strict';
'require form';
'require fs';
'require uci';
'require ui';
'require view';
return view.extend({
load: function () {
return Promise.all([
uci.load('sshtunnel'),
]);
},
render: function (data) {
var m, s, o;
m = new form.Map('sshtunnel', _('SSH Tunnels'),
_('This configures SSH Tunnels.')
.format('href="https://openwrt.org/docs/guide-user/services/ssh/sshtunnel"')
);
s = m.section(form.GridSection, 'tunnelR', _('Remote Tunnels'),
_('Forward a port on the remote host to a service on the local host.')
);
s.anonymous = true;
s.addremove = true;
s.nodescriptions = true;
o = s.option(form.Flag, 'enabled', _('Enabled'));
o.default = '1';
o = _addServerOption(s);
o = s.option(form.Value, 'remoteaddress', _('Remote address'),
_('Bind IP address e.g. 192.168.1.1
or hostname e.g. localhost
.') + '
' +
_('*
means to listen all interfaces including public.')
);
o.datatype = 'or(host, "*")';
o.default = '*';
o.rmempty = false;
o = s.option(form.Value, 'remoteport', _('Remote port'));
o.placeholder = '80';
o.datatype = 'port';
o.rmempty = false;
o = s.option(form.Value, 'localaddress', _('Local address'),
_('Bind IP address e.g. 192.168.1.1
or hostname e.g. localhost
.')
);
o.datatype = 'host';
o.default = 'localhost';
o.rmempty = false;
o = s.option(form.Value, 'localport', _('Local port'));
o.datatype = 'port';
o.placeholder = '80';
o.rmempty = false;
s = m.section(form.GridSection, 'tunnelL', _('Local Tunnels'),
_('Forward a port on the local host to a service on the remote host.')
);
s.anonymous = true;
s.addremove = true;
s.nodescriptions = true;
o = s.option(form.Flag, 'enabled', _('Enabled'));
o.default = '1';
o = _addServerOption(s);
o = s.option(form.Value, 'localaddress', _('Local address'),
_('Bind IP address e.g. 192.168.1.1
or hostname e.g. localhost
.') + '
' +
_('*
means to listen all interfaces including public.')
);
o.datatype = 'or(host, "*")';
o.placeholder = '192.168.1.1'; // not the default * public iface because a user must explicitly configure it
o.rmempty = false;
o = s.option(form.Value, 'localport', _('Local port'));
o.datatype = 'port';
o.placeholder = '80';
o.rmempty = false;
o = s.option(form.Value, 'remoteaddress', _('Remote address'),
_('Bind IP address e.g. 192.168.1.1
or hostname e.g. localhost
.')
);
o.datatype = 'host';
o.default = 'localhost';
o.rmempty = false;
o = s.option(form.Value, 'remoteport', _('Remote port'));
o.datatype = 'port';
o.default = '80';
o.rmempty = false;
s = m.section(form.GridSection, 'tunnelD', _('Dynamic Tunnels'),
_('SOCKS proxy via remote host.')
);
s.anonymous = true;
s.addremove = true;
s.nodescriptions = true;
o = s.option(form.Flag, 'enabled', _('Enabled'));
o.default = '1';
o = _addServerOption(s);
o = s.option(form.Value, 'localaddress', _('Local address'),
_('Bind IP address e.g. 192.168.1.1
or hostname e.g. localhost
.') + '
' +
_('*
means to listen all interfaces including public.')
);
o.datatype = 'or(host, "*")';
o.placeholder = '192.168.1.1'; // not the default * public iface because a user must explicitly configure it
o.rmempty = false;
o = s.option(form.Value, 'localport', _('Local port'));
o.datatype = 'port';
o.default = '1080';
o.rmempty = false;
s = m.section(form.GridSection, 'tunnelW', _('VPN Tunnels'),
_('Configure TUN/TAP devices for VPN tunnels.')
);
s.anonymous = true;
s.addremove = true;
s.nodescriptions = true;
o = s.option(form.Flag, 'enabled', _('Enabled'));
o.default = '1';
o = _addServerOption(s);
o = s.option(form.ListValue, 'vpntype', _('VPN type'));
o.value('point-to-point', 'TUN (point-to-point)');
o.value('ethernet', 'TAP (ethernet)');
o.default = 'point-to-point';
o = s.option(form.Value, 'localdev', _('Local dev'));
o.default = 'any';
o.datatype = 'or("any", min(0))';
o.rmempty = false;
o = s.option(form.Value, 'remotedev', _('Remote dev'));
o.default = 'any';
o.datatype = 'or("any", min(0))';
o.rmempty = false;
return m.render();
},
});
function _addServerOption(s) {
var o = s.option(form.ListValue, 'server', _('Server'));
o.datatype = 'uciname';
o.rmempty = false;
uci.sections('sshtunnel', 'server', function (s, sectionName) {
o.value(sectionName, s.hostname ? '%s (%s)'.format(sectionName, s.hostname) : sectionName);
});
return o;
}