secubox-openwrt/package/secubox/luci-app-mitmproxy/htdocs/luci-static/resources/mitmproxy/api.js
CyberMind-FR 1dd0c95a09 feat(mitmproxy): Add embedded Web UI view with token auth
- Add get_web_token RPCD method to retrieve auth token
- Create webui.js view that embeds mitmweb in an iframe
- Capture auth token at startup and save to file
- Add Web UI navigation to all mitmproxy views
- Fix PATH for /usr/local/bin in Docker image
- Change default port from 8080 to 8888 (avoid CrowdSec conflict)

secubox-app-mitmproxy: bump to r12
luci-app-mitmproxy: bump to r2

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-17 08:49:59 +01:00

255 lines
5.0 KiB
JavaScript

'use strict';
'require baseclass';
'require rpc';
var callMitmproxy = rpc.declare({
object: 'luci.mitmproxy',
method: 'get_status'
});
var callGetConfig = rpc.declare({
object: 'luci.mitmproxy',
method: 'get_config'
});
var callGetTransparentConfig = rpc.declare({
object: 'luci.mitmproxy',
method: 'get_transparent_config'
});
var callGetWhitelistConfig = rpc.declare({
object: 'luci.mitmproxy',
method: 'get_whitelist_config'
});
var callGetFilteringConfig = rpc.declare({
object: 'luci.mitmproxy',
method: 'get_filtering_config'
});
var callGetAllConfig = rpc.declare({
object: 'luci.mitmproxy',
method: 'get_all_config'
});
var callGetStats = rpc.declare({
object: 'luci.mitmproxy',
method: 'get_stats'
});
var callGetRequests = rpc.declare({
object: 'luci.mitmproxy',
method: 'get_requests',
params: ['limit', 'category']
});
var callGetTopHosts = rpc.declare({
object: 'luci.mitmproxy',
method: 'get_top_hosts',
params: ['limit']
});
var callGetCaInfo = rpc.declare({
object: 'luci.mitmproxy',
method: 'get_ca_info'
});
var callGetWebToken = rpc.declare({
object: 'luci.mitmproxy',
method: 'get_web_token'
});
var callServiceStart = rpc.declare({
object: 'luci.mitmproxy',
method: 'service_start'
});
var callServiceStop = rpc.declare({
object: 'luci.mitmproxy',
method: 'service_stop'
});
var callServiceRestart = rpc.declare({
object: 'luci.mitmproxy',
method: 'service_restart'
});
var callFirewallSetup = rpc.declare({
object: 'luci.mitmproxy',
method: 'firewall_setup'
});
var callFirewallClear = rpc.declare({
object: 'luci.mitmproxy',
method: 'firewall_clear'
});
var callSetConfig = rpc.declare({
object: 'luci.mitmproxy',
method: 'set_config',
params: ['key', 'value']
});
var callAddToList = rpc.declare({
object: 'luci.mitmproxy',
method: 'add_to_list',
params: ['key', 'value']
});
var callRemoveFromList = rpc.declare({
object: 'luci.mitmproxy',
method: 'remove_from_list',
params: ['key', 'value']
});
var callClearData = rpc.declare({
object: 'luci.mitmproxy',
method: 'clear_data'
});
return baseclass.extend({
getStatus: function() {
return callMitmproxy().catch(function() {
return { running: false, enabled: false };
});
},
getConfig: function() {
return callGetConfig().catch(function() {
return {};
});
},
getTransparentConfig: function() {
return callGetTransparentConfig().catch(function() {
return { enabled: false };
});
},
getWhitelistConfig: function() {
return callGetWhitelistConfig().catch(function() {
return { enabled: true, bypass_ip: [], bypass_domain: [] };
});
},
getFilteringConfig: function() {
return callGetFilteringConfig().catch(function() {
return { enabled: false };
});
},
getAllConfig: function() {
return callGetAllConfig().catch(function() {
return { main: {}, transparent: {}, whitelist: {}, filtering: {} };
});
},
getStats: function() {
return callGetStats().catch(function() {
return {
total_requests: 0,
unique_hosts: 0,
flow_file_size: 0,
cdn_requests: 0,
media_requests: 0,
blocked_ads: 0
};
});
},
getRequests: function(limit, category) {
return callGetRequests(limit || 50, category || 'all').catch(function() {
return { requests: [] };
});
},
getTopHosts: function(limit) {
return callGetTopHosts(limit || 20).catch(function() {
return { hosts: [] };
});
},
getCaInfo: function() {
return callGetCaInfo().catch(function() {
return { installed: false };
});
},
getWebToken: function() {
return callGetWebToken().catch(function() {
return { token: '', web_url: '', web_url_with_token: '' };
});
},
serviceStart: function() {
return callServiceStart();
},
serviceStop: function() {
return callServiceStop();
},
serviceRestart: function() {
return callServiceRestart();
},
firewallSetup: function() {
return callFirewallSetup();
},
firewallClear: function() {
return callFirewallClear();
},
setConfig: function(key, value) {
return callSetConfig(key, value);
},
addToList: function(key, value) {
return callAddToList(key, value);
},
removeFromList: function(key, value) {
return callRemoveFromList(key, value);
},
clearData: function() {
return callClearData();
},
getAllData: function() {
var self = this;
return Promise.all([
self.getStatus(),
self.getAllConfig(),
self.getStats(),
self.getTopHosts(10),
self.getCaInfo()
]).then(function(results) {
return {
status: results[0],
config: results[1].main || results[1],
allConfig: results[1],
stats: results[2],
topHosts: results[3],
caInfo: results[4]
};
});
},
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();
}
});