-- -- (C) 2017 - ntop.org -- dirs = ntop.getDirs() package.path = dirs.installdir .. "/scripts/lua/modules/?.lua;" .. package.path require "lua_utils" local host_pools_utils = require "host_pools_utils" local template = require "template_utils" if(ntop.isPro()) then package.path = dirs.installdir .. "/pro/scripts/lua/modules/?.lua;" .. package.path shaper_utils = require "shaper_utils" end if not isAdministrator() then return end if _POST["edit_pools"] ~= nil then local config = paramsPairsDecode(_POST, true) for pool_id, pool_name in pairs(config) do if tonumber(pool_id) == nil then http_lint.validationError(_POST, "pool_id", pool_id, "Invalid pool id") end -- create or rename host_pools_utils.createPool(ifId, pool_id, pool_name) if(interface.isBridgeInterface(ifId) == true) then -- create default shapers shaper_utils.setProtocolShapers(ifId, pool_id, shaper_utils.POOL_SHAPER_DEFAULT_PROTO_KEY, shaper_utils.DEFAULT_SHAPER_ID --[[ ingress shaper --]], shaper_utils.DEFAULT_SHAPER_ID --[[ egress shaper --]], true) -- Set only if the key does NOT exist end end -- Note: do not call reload here elseif _POST["pool_to_delete"] ~= nil then local pool_id = _POST["pool_to_delete"] host_pools_utils.deletePool(ifId, pool_id) if(interface.isBridgeInterface(ifId) == true) then shaper_utils.flushPoolRules(ifId, pool_id) end -- Note: this will also realod the shaping rules interface.reloadHostPools() elseif (_POST["edit_members"] ~= nil) then local pool_to_edit = _POST["pool"] local config = paramsPairsDecode(_POST, true) -- This code handles member address changes. The starting '_' is used for icons and alias -- delete old addresses for k,old_member in pairs(config) do if not starts(k, "_") then if((not isEmptyString(old_member)) and (k ~= old_member)) then if not isValidPoolMember(old_member) then http_lint.validationError(_POST, "old_member", old_member, "Invalid pool member") else host_pools_utils.deletePoolMember(ifId, pool_to_edit, old_member) end end end end -- add new addresses for new_member,k in pairs(config) do if not starts(new_member, "_") then if not isValidPoolMember(new_member) then http_lint.validationError(_POST, "new_member", new_member, "Invalid pool member") end local is_new_member = (k ~= new_member) if is_new_member then host_pools_utils.addPoolMember(ifId, pool_to_edit, new_member) end local host_key, is_network = host_pools_utils.getMemberKey(new_member) if not is_network then local alias = config["_alias_" .. new_member] if((not is_new_member) or (not isEmptyString(alias))) then setHostAltName(host_key, alias) end local icon = config["_icon_" .. new_member] if((not is_new_member) or (not isEmptyString(icon))) then setHostIcon(host_key, icon) end end end end interface.reloadHostPools() elseif _POST["member_to_delete"] ~= nil then local pool_to_edit = _POST["pool"] host_pools_utils.deletePoolMember(ifId, pool_to_edit, _POST["member_to_delete"]) interface.reloadHostPools() elseif _POST["empty_pool"] ~= nil then host_pools_utils.emptyPool(ifId, _POST["empty_pool"]) interface.reloadHostPools() end function printPoolNameField(pool_id_str) print[[
]] print[[]] print[[
]] print[[
]] end function printMemberAddressField(member_str, origin_value_str) print[[
]] print[[]] print[[
]] print[[
]] end function printMemberVlanField(member_str) print[[
]] print[[]] print[[
]] print[[
]] end function printIconField(member_str) print[[]] end function printAliasField(member_str) print[[]] end -------------------------------------------------------------------------------- local selected_pool_id = _GET["pool"] local selected_pool = nil local available_pools = host_pools_utils.getPoolsList(ifId) for _, pool in ipairs(available_pools) do if pool.id == selected_pool_id then selected_pool = pool end end if selected_pool == nil then if #available_pools == 1 then -- only the default pool is available selected_pool = available_pools[1] else selected_pool = available_pools[2] end end local perPageMembers if tonumber(tablePreferences("hostPoolMembers")) == nil then perPageMembers = "10" else perPageMembers = tablePreferences("hostPoolMembers") end local member_filtering = _GET["member"] local manage_url = "?ifid="..ifId.."&page=pools&pool="..selected_pool.id.."#manage" -------------------------------------------------------------------------------- print [[

]] print(i18n("host_pools.edit_host_pools")) print[[



]] print('\n') if member_filtering ~= nil then local member_name = split(member_filtering, "/")[1] print[[ ]] end print('
') print( template.gen("typeahead_input.html", { typeahead={ base_id = "t_member", action = ntop.getHttpPrefix() .. "/lua/if_stats.lua#manage", parameters = { pool=selected_pool.id, ifid=tostring(ifId), page="pools", }, json_key = "key", query_field = "member", query_url = ntop.getHttpPrefix() .. "/lua/find_member.lua", query_title = i18n("host_pools.search_member"), style = "margin-left:1em; width:25em;", } }) ) print('
') print('
') print(i18n("host_pools.pool")) print(': ') local ifstats = interface.getStats() local is_bridge_iface = (ifstats["bridge.device_a"] ~= nil) and (ifstats["bridge.device_b"] ~= nil) if is_bridge_iface then print("") end print('
') if no_pools then print[[]] end print[[

]] print[[




]] if isCaptivePortalActive() then print[[ NOTES: ]] end print[[
]] -- Create delete dialogs print( template.gen("modal_confirm_dialog.html", { dialog={ id = "delete_pool_dialog", action = "deletePool(delete_pool_id)", title = i18n("host_pools.delete_pool"), message = i18n("host_pools.confirm_delete_pool") .. ' "", ' .. i18n("host_pools.and_associated_members"), confirm = i18n("delete"), } }) ) print( template.gen("modal_confirm_dialog.html", { dialog={ id = "delete_member_dialog", action = "deletePoolMember(delete_member_id)", title = i18n("host_pools.remove_member"), message = i18n("host_pools.confirm_remove_member") .. ' "" ' .. i18n("host_pools.from_pool") .. ' "' .. selected_pool.name .. '" ', confirm = i18n("remove"), } }) ) print( template.gen("modal_confirm_dialog.html", { dialog={ id = "empty_pool_dialog", action = "emptyCurrentPool()", title = i18n("host_pools.empty_pool"), message = i18n("host_pools.confirm_empty_pool") .. " " .. selected_pool.name, confirm = i18n("host_pools.empty_pool"), } }) ) -------------------------------------------------------------------------------- print[[ ]] -- ==== Manage tab ==== print [[ ]] -- ==== Create tab ==== print [[ ]] print[[ ]]