mirror of
https://github.com/YunoHost/yunohost-admin.git
synced 2024-09-03 20:06:15 +02:00
172 lines
No EOL
5.2 KiB
JavaScript
172 lines
No EOL
5.2 KiB
JavaScript
(function() {
|
||
// Get application context
|
||
var app = Sammy.apps['#main'];
|
||
var store = app.store;
|
||
|
||
/**
|
||
* Firewall
|
||
*
|
||
*/
|
||
|
||
// Firewall status
|
||
app.get('#/tools/firewall', function (c) {
|
||
c.api('/firewall?raw', function(data) {
|
||
var firewall = {
|
||
ports: {},
|
||
upnp: false
|
||
};
|
||
|
||
// Reorganize ports
|
||
$.each(['ipv4', 'ipv6', 'uPnP'], function(i, protocol) {
|
||
$.each(['TCP', 'UDP'], function(j, connection) {
|
||
firewall.ports[connection] = firewall.ports[connection] || {};
|
||
$.each(data[protocol][connection], function(k, port) {
|
||
firewall.ports[connection][port] = firewall.ports[connection][port] || {};
|
||
firewall.ports[connection][port][protocol] = true;
|
||
});
|
||
});
|
||
});
|
||
|
||
// Get UPnP status
|
||
firewall.upnp = data.uPnP.enabled;
|
||
|
||
c.view('tools/tools_firewall', firewall);
|
||
});
|
||
});
|
||
|
||
// Enable/Disable UPnP
|
||
app.get('#/tools/firewall/upnp/:action', function (c) {
|
||
c.confirm(
|
||
y18n.t('firewall'),
|
||
// confirm_upnp_enable and confirm_upnp_disable
|
||
y18n.t('confirm_upnp_' + c.params['action'].toLowerCase()),
|
||
function(){
|
||
var params = {
|
||
action : c.params['action']
|
||
};
|
||
c.api('/firewall/upnp', function(data) {
|
||
store.clear('slide');
|
||
c.redirect('#/tools/firewall');
|
||
}, 'GET', params);
|
||
},
|
||
function(){
|
||
store.clear('slide');
|
||
c.redirect('#/tools/firewall');
|
||
}
|
||
);
|
||
});
|
||
|
||
// Toggle port status helper (available in every controller)
|
||
app.helper('togglePort', function(port, protocol, connection, action) {
|
||
var method = null,
|
||
endurl = [],
|
||
c = this
|
||
;
|
||
|
||
if (port != parseInt(port) || port < 0 || port > 65535) {
|
||
c.flash('fail', y18n.t('unknown_argument', [port]));
|
||
store.clear('slide');
|
||
c.redirect('#/tools/firewall');
|
||
}
|
||
|
||
switch (connection) {
|
||
case 'ipv4':
|
||
endurl = 'ipv4_only';
|
||
break;
|
||
case 'ipv6':
|
||
endurl = 'ipv6_only';
|
||
break;
|
||
}
|
||
|
||
switch (protocol) {
|
||
case 'udp':
|
||
protocol = 'UDP';
|
||
break;
|
||
case 'both':
|
||
protocol = 'Both';
|
||
break;
|
||
default:
|
||
protocol = 'TCP';
|
||
}
|
||
|
||
switch (action) {
|
||
case "open":
|
||
method = 'POST';
|
||
break;
|
||
case "close":
|
||
method = 'DELETE';
|
||
break;
|
||
default:
|
||
c.flash('fail', y18n.t('unknown_action', [action]));
|
||
store.clear('slide');
|
||
c.redirect('#/tools/firewall');
|
||
}
|
||
|
||
if (method !== null && protocol !== null && port !== null) {
|
||
// port:
|
||
// protocol:
|
||
// - UDP
|
||
// - TCP
|
||
// - Both
|
||
// --ipv4-only:
|
||
// --ipv6-only:
|
||
// --no-upnp:
|
||
var params = {
|
||
port : port,
|
||
protocol : protocol
|
||
};
|
||
c.api('/firewall/port?'+endurl, function(data) {
|
||
store.clear('slide');
|
||
c.redirect('#/tools/firewall');
|
||
}, method, params);
|
||
}
|
||
else {
|
||
store.clear('slide');
|
||
c.redirect('#/tools/firewall');
|
||
}
|
||
return;
|
||
});
|
||
|
||
// Update port status from direct link
|
||
// #/firewall/port/{{@key}}/tcp/ipv4/close
|
||
app.get('#/tools/firewall/port/:port/:protocol/:connection/:action', function (c) {
|
||
c.confirm(
|
||
y18n.t('firewall'),
|
||
// confirm_firewall_open and confirm_firewall_close
|
||
y18n.t( 'confirm_firewall_' + c.params['action'].toLowerCase(), [ c.params['port'], y18n.t(c.params['protocol']), y18n.t(c.params['connection'])]),
|
||
function(){
|
||
c.togglePort(
|
||
c.params['port'],
|
||
c.params['protocol'],
|
||
c.params['connection'],
|
||
c.params['action']
|
||
);
|
||
},
|
||
function(){
|
||
store.clear('slide');
|
||
c.redirect('#/tools/firewall');
|
||
}
|
||
);
|
||
});
|
||
|
||
// Update port status from form
|
||
app.post('#/tools/firewall/port', function (c) {
|
||
c.confirm(
|
||
y18n.t('firewall'),
|
||
y18n.t('confirm_firewall_' + c.params['action'].toLowerCase(), [ c.params['port'], y18n.t(c.params['protocol']), y18n.t(c.params['connection']) ]),
|
||
function(){
|
||
c.togglePort(
|
||
c.params['port'],
|
||
c.params['protocol'],
|
||
c.params['connection'],
|
||
c.params['action']
|
||
);
|
||
},
|
||
function(){
|
||
store.clear('slide');
|
||
c.redirect('#/tools/firewall');
|
||
}
|
||
);
|
||
});
|
||
|
||
})(); |