secubox-openwrt/package/secubox/luci-app-mitmproxy/htdocs/luci-static/resources/mitmproxy/api.js
CyberMind-FR 329d5febb9 fix(mitmproxy,tor-shield): Add transparent mode firewall support
- Add RPCD methods to mitmproxy: settings, save_settings, set_mode,
  setup_firewall, clear_firewall
- Add apply_now parameter to tor-shield save_settings to restart
  service and apply iptables rules immediately
- Update ACL files with new permissions
- Add Save & Apply button to tor-shield settings page
- Update api.js files to use correct RPCD method signatures

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 19:46:26 +01:00

194 lines
3.9 KiB
JavaScript

'use strict';
'require baseclass';
'require rpc';
// Status and settings
var callStatus = rpc.declare({
object: 'luci.mitmproxy',
method: 'status',
expect: {}
});
var callSettings = rpc.declare({
object: 'luci.mitmproxy',
method: 'settings',
expect: {}
});
var callSaveSettings = rpc.declare({
object: 'luci.mitmproxy',
method: 'save_settings',
params: ['mode', 'enabled', 'proxy_port', 'web_port', 'web_host', 'data_path',
'memory_limit', 'upstream_proxy', 'reverse_target', 'ssl_insecure',
'anticache', 'anticomp', 'transparent_enabled', 'transparent_interface',
'redirect_http', 'redirect_https', 'filtering_enabled', 'log_requests',
'filter_cdn', 'filter_media', 'block_ads', 'apply_now'],
expect: {}
});
var callSetMode = rpc.declare({
object: 'luci.mitmproxy',
method: 'set_mode',
params: ['mode', 'apply_now'],
expect: {}
});
// Service control
var callInstall = rpc.declare({
object: 'luci.mitmproxy',
method: 'install',
expect: {}
});
var callStart = rpc.declare({
object: 'luci.mitmproxy',
method: 'start',
expect: {}
});
var callStop = rpc.declare({
object: 'luci.mitmproxy',
method: 'stop',
expect: {}
});
var callRestart = rpc.declare({
object: 'luci.mitmproxy',
method: 'restart',
expect: {}
});
// Firewall control
var callSetupFirewall = rpc.declare({
object: 'luci.mitmproxy',
method: 'setup_firewall',
expect: {}
});
var callClearFirewall = rpc.declare({
object: 'luci.mitmproxy',
method: 'clear_firewall',
expect: {}
});
return baseclass.extend({
getStatus: function() {
return callStatus().catch(function() {
return {
running: false,
enabled: false,
installed: false,
lxc_available: false,
mode: 'regular',
nft_active: false
};
});
},
getSettings: function() {
return callSettings().catch(function() {
return {
enabled: false,
mode: 'regular',
proxy_port: 8888,
web_port: 8081,
web_host: '0.0.0.0',
data_path: '/srv/mitmproxy',
memory_limit: '256M',
transparent_enabled: false,
transparent_interface: 'br-lan',
redirect_http: true,
redirect_https: true,
filtering_enabled: false,
log_requests: true,
filter_cdn: false,
filter_media: false,
block_ads: false
};
});
},
saveSettings: function(settings) {
return callSaveSettings(
settings.mode,
settings.enabled,
settings.proxy_port,
settings.web_port,
settings.web_host,
settings.data_path,
settings.memory_limit,
settings.upstream_proxy,
settings.reverse_target,
settings.ssl_insecure,
settings.anticache,
settings.anticomp,
settings.transparent_enabled,
settings.transparent_interface,
settings.redirect_http,
settings.redirect_https,
settings.filtering_enabled,
settings.log_requests,
settings.filter_cdn,
settings.filter_media,
settings.block_ads,
settings.apply_now !== false
);
},
setMode: function(mode, applyNow) {
return callSetMode(mode, applyNow !== false);
},
install: function() {
return callInstall();
},
start: function() {
return callStart();
},
stop: function() {
return callStop();
},
restart: function() {
return callRestart();
},
setupFirewall: function() {
return callSetupFirewall();
},
clearFirewall: function() {
return callClearFirewall();
},
getAllData: function() {
var self = this;
return Promise.all([
self.getStatus(),
self.getSettings()
]).then(function(results) {
return {
status: results[0],
settings: results[1]
};
});
},
formatBytes: function(bytes) {
if (!bytes || bytes === 0) return '0 B';
var k = 1024;
var sizes = ['B', 'KB', 'MB', 'GB', 'TB'];
var i = Math.floor(Math.log(bytes) / Math.log(k));
return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
},
formatNumber: function(num) {
if (!num) return '0';
if (num >= 1000000) return (num / 1000000).toFixed(1) + 'M';
if (num >= 1000) return (num / 1000).toFixed(1) + 'K';
return num.toString();
}
});