mirror of
https://github.com/ntop/ntopng.git
synced 2026-04-29 07:29:32 +00:00
219 lines
6.7 KiB
Lua
219 lines
6.7 KiB
Lua
--
|
|
-- (C) 2013-24 - ntop.org
|
|
--
|
|
|
|
local dirs = ntop.getDirs()
|
|
package.path = dirs.installdir .. "/scripts/lua/modules/?.lua;" .. package.path
|
|
|
|
local system_setup_ui_utils = require "system_setup_ui_utils"
|
|
require "lua_utils"
|
|
require "prefs_utils"
|
|
prefsSkipRedis(true)
|
|
|
|
if not (ntop.isnEdge() or ntop.isAppliance()) or not isAdministrator() then
|
|
return
|
|
end
|
|
|
|
local sys_config
|
|
if ntop.isnEdge() then
|
|
package.path = dirs.installdir .. "/pro/scripts/lua/nedge/modules/system_config/?.lua;" .. package.path
|
|
sys_config = require("nf_config"):create(true)
|
|
else -- ntop.isAppliance()
|
|
package.path = dirs.installdir .. "/scripts/lua/modules/system_config/?.lua;" .. package.path
|
|
sys_config = require("appliance_config"):create(true)
|
|
end
|
|
|
|
system_setup_ui_utils.process_apply_discard_config(sys_config)
|
|
|
|
local mode = sys_config:getOperatingMode()
|
|
|
|
if (_POST["lan_interfaces"] ~= nil) and (_POST["wan_interfaces"] ~= nil) then
|
|
sys_config:setLanWanIfaces(split(_POST["lan_interfaces"], ","), split(_POST["wan_interfaces"], ","))
|
|
|
|
if (mode == "routing") then
|
|
-- Ensure we are on static mode on the lan inteface
|
|
local lan_ifaces = sys_config:getLanInterfaces()
|
|
for _, lan_iface in ipairs(lan_ifaces) do
|
|
sys_config:setInterfaceMode(lan_iface, "static")
|
|
end
|
|
|
|
-- Add to the list of gateways if not already present
|
|
local wan_ifaces = sys_config:getWanInterfaces()
|
|
for _, wan_iface in ipairs(wan_ifaces) do
|
|
sys_config:addGateway(wan_iface)
|
|
end
|
|
|
|
end
|
|
|
|
sys_config:save()
|
|
end
|
|
|
|
local function valuesToKeys(t)
|
|
local res = {}
|
|
|
|
for k, v in pairs(t or {}) do
|
|
res[v] = 1
|
|
end
|
|
|
|
return res
|
|
end
|
|
|
|
local function printIfSelected(iface, interfaces_set)
|
|
print([[<option value="]] .. iface .. [["]])
|
|
|
|
if interfaces_set then
|
|
print(" selected")
|
|
end
|
|
|
|
print([[>]] .. iface .. [[</option>]])
|
|
end
|
|
|
|
local print_page_body
|
|
|
|
-- Interaface limits configuration
|
|
local min_lan_ifaces = "1"
|
|
local min_wan_ifaces = "1"
|
|
local max_lan_ifaces = "1"
|
|
local max_wan_ifaces = ""
|
|
if mode == "routing" then
|
|
-- testing
|
|
max_lan_ifaces = ""
|
|
elseif mode == "bridging" then
|
|
-- temporary limits - we need to support multiple LAN interfaces in C code
|
|
max_wan_ifaces = "1"
|
|
elseif mode == "passive" then
|
|
min_wan_ifaces = ""
|
|
end
|
|
|
|
local lan_label
|
|
local wan_label
|
|
if mode == "passive" then
|
|
lan_label = i18n("appliance.management")
|
|
wan_label = i18n("appliance.capture_interfaces")
|
|
else
|
|
lan_label = i18n("nedge.lan")
|
|
wan_label = i18n("nedge.wan")
|
|
end
|
|
|
|
print_page_body = function()
|
|
printPageSection(i18n("prefs.network_interfaces"))
|
|
|
|
local ifaces = sys_config:getAllInterfaces()
|
|
|
|
print[[
|
|
<tr>
|
|
<td>
|
|
<input name="lan_interfaces" type="hidden">
|
|
<input name="wan_interfaces" type="hidden">
|
|
|
|
<div class="form-group mb-3" style="width:40%; margin-left:5%; display:inline-block;">
|
|
<label class='form-label' for="lan_ifaces">]] print(lan_label) print[[</label>
|
|
<select id="lan_ifaces" class="form-select" name="lan_ifaces" style="min-height: 150px;" multiple>]]
|
|
|
|
for iface, role in pairsByKeys(ifaces) do
|
|
printIfSelected(iface, role == "lan")
|
|
end
|
|
|
|
print[[</select>
|
|
</div>
|
|
<div class="form-group mb-3" style="width:40%; margin-right:5%; display:inline-block; float:right;">
|
|
<label class='form-label' for="wan_ifaces" >]] print(wan_label) print[[</label>
|
|
<select id="wan_ifaces" class="form-select" name="wan_ifaces" style="min-height: 150px;" multiple>]]
|
|
|
|
for iface, role in pairsByKeys(ifaces) do
|
|
printIfSelected(iface, role == "wan")
|
|
end
|
|
|
|
print[[</select>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
|
|
<script>
|
|
function setSelectValue(select_obj, value) {
|
|
select_obj.data("old_val", value);
|
|
}
|
|
|
|
function saveSelectValue(select_obj) {
|
|
setSelectValue(select_obj, $(select_obj).val());
|
|
}
|
|
|
|
function getSavedSelectValue(select_obj) {
|
|
return select_obj.data("old_val");
|
|
}
|
|
|
|
function handleSelect(select_set, inverse_set, select_min, inverse_min, select_max) {
|
|
var input = $(select_set);
|
|
var inverse_input = $(inverse_set);
|
|
var selection = input.val();
|
|
var inverse_selection = inverse_input.val();
|
|
|
|
// Minimum selection check
|
|
if (((typeof select_min !== "undefined") && input.find("option:selected").length < select_min)
|
|
|| ((typeof select_max !== "undefined") && input.find("option:selected").length > select_max)) {
|
|
input.val(getSavedSelectValue(input));
|
|
return;
|
|
}
|
|
|
|
// Avoid selecting the same elements on the two sets
|
|
for (var i=0; i<selection.length; i++) {
|
|
for (var j=0; j<inverse_selection.length; j++) {
|
|
if (inverse_selection[j] == selection[i]) {
|
|
var to_desel = inverse_input.find("option[value='" + inverse_selection[j] + "']");
|
|
to_desel.prop("selected", false);
|
|
|
|
// find an element to select
|
|
var found = false;
|
|
to_desel.siblings().each(function() {
|
|
if (!found && !input.find("option[value='" + $(this).val() + "']").prop("selected")) {
|
|
found = true;
|
|
$(this).prop("selected", true);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
// Minimum selection check
|
|
if (((typeof inverse_min !== "undefined") && inverse_input.find("option:selected").length < inverse_min)) {
|
|
input.val(getSavedSelectValue(input));
|
|
inverse_input.val(getSavedSelectValue(inverse_input));
|
|
return;
|
|
}
|
|
|
|
saveSelectValue(input);
|
|
saveSelectValue(inverse_input);
|
|
}
|
|
|
|
$("#lan_ifaces").change(function() { handleSelect("#lan_ifaces", "#wan_ifaces", ]]
|
|
print(min_lan_ifaces) print[[, ]]
|
|
print(ternary(isEmptyString(min_wan_ifaces), 'undefined', min_wan_ifaces)) print[[, ]]
|
|
print(ternary(isEmptyString(max_lan_ifaces), 'undefined', max_lan_ifaces)) print[[); });
|
|
$("#wan_ifaces").change(function() { handleSelect("#wan_ifaces", "#lan_ifaces", ]]
|
|
print(ternary(isEmptyString(min_wan_ifaces), 'undefined', min_wan_ifaces)) print[[, ]]
|
|
print(min_lan_ifaces) print[[, ]]
|
|
print(ternary(isEmptyString(max_wan_ifaces), 'undefined', max_wan_ifaces)) print[[); });
|
|
|
|
saveSelectValue($("#lan_ifaces"));
|
|
saveSelectValue($("#wan_ifaces"));
|
|
|
|
$("#lan_ifaces").closest("form").submit(function() {
|
|
var lan_ifaces = $("#lan_ifaces").val().join(",");
|
|
var wan_ifaces = $("#wan_ifaces").val().join(",");
|
|
|
|
// Format conversion
|
|
$(this).find("[name='lan_interfaces']").val(lan_ifaces);
|
|
$(this).find("[name='wan_interfaces']").val(wan_ifaces);
|
|
|
|
// Remove name in old fields to avoid submitting them
|
|
$("#lan_ifaces").removeAttr("name");
|
|
$("#wan_ifaces").removeAttr("name");
|
|
});
|
|
</script>
|
|
]]
|
|
|
|
printSaveButton()
|
|
end
|
|
|
|
system_setup_ui_utils.print_setup_page(print_page_body, sys_config)
|
|
|