zoraxy-waf/web/app.js

59 lines
1.8 KiB
JavaScript

// Zoraxy WAF — config panel
function loadConfig() {
$.get('./api/config', function (data) {
$('#waf-enabled').prop('checked', data.enabled);
$('#enabled-label').text(data.enabled ? 'WAF Enabled' : 'WAF Disabled');
$('#node-url').val(data.node_url);
$('#return-port').val(data.return_port);
$('#timeout-ms').val(data.timeout_ms);
});
}
function loadStats() {
$.get('./api/stats', function (data) {
$('#circuit-state').text(data.circuit).attr('class', 'stat-value ' +
(data.circuit === 'open' ? 'warn' : data.circuit === 'closed' ? 'ok' : 'warn'));
$('#waf-status').text(data.enabled ? 'Active' : 'Disabled').attr('class', 'stat-value ' +
(data.enabled ? 'ok' : 'off'));
$('#stat-total').text(data.total || 0);
$('#stat-allowed').text(data.allowed || 0);
$('#stat-blocked').text(data.blocked || 0);
$('#stat-bypassed').text(data.bypassed || 0);
});
}
function saveConfig() {
$('#save-status').text('Saving...');
$.cjax({
url: './api/config/save',
type: 'POST',
data: {
enabled: $('#waf-enabled').is(':checked'),
node_url: $('#node-url').val().trim(),
return_port: $('#return-port').val(),
timeout_ms: $('#timeout-ms').val()
},
success: function () {
$('#save-status').text('Saved ✓');
loadConfig();
loadStats();
setTimeout(function () { $('#save-status').text(''); }, 2000);
},
error: function () {
$('#save-status').css('color', '#d63031').text('Save failed');
}
});
}
$('#waf-enabled').on('change', function () {
$('#enabled-label').text(this.checked ? 'WAF Enabled' : 'WAF Disabled');
});
$('#save-btn').on('click', saveConfig);
$(document).ready(function () {
loadConfig();
loadStats();
setInterval(loadStats, 10000); // refresh stats every 10s
});