-- -- (C) 2013-20 - ntop.org -- local dirs = ntop.getDirs() package.path = dirs.installdir .. "/scripts/lua/modules/?.lua;" .. package.path if((dirs.scriptdir ~= nil) and (dirs.scriptdir ~= "")) then package.path = dirs.scriptdir .. "/lua/modules/?.lua;" .. package.path end require "lua_utils" local alerts_api = require("alerts_api") local recording_utils = require "recording_utils" local remote_assistance = require "remote_assistance" local telemetry_utils = require "telemetry_utils" local ts_utils = require("ts_utils_core") local blog_utils = require("blog_utils") local page_utils = require("page_utils") local delete_data_utils = require "delete_data_utils" local menu_alert_notifications = require("menu_alert_notifications") local host_pools = require "host_pools" local is_nedge = ntop.isnEdge() local is_admin = isAdministrator() local is_windows = ntop.isWindows() local info = ntop.getInfo() local updates_supported = (is_admin and ntop.isPackage() and not ntop.isWindows()) -- this is a global variable local is_system_interface = page_utils.is_system_view() print([[
]]) print[[ ]] local template = require "template_utils" prefs = ntop.getPrefs() local iface_names = interface.getIfNames() -- tprint(prefs) -- tprint(iface_names) num_ifaces = 0 for k,v in pairs(iface_names) do num_ifaces = num_ifaces+1 end interface.select(ifname) local ifs = interface.getStats() local is_pcap_dump = interface.isPcapDumpInterface() local is_packet_interface = interface.isPacketInterface() ifId = ifs.id -- NOTE: see sidebar.js for the client logic page_utils.init_menubar() if is_nedge then dofile(dirs.installdir .. "/pro/scripts/lua/nedge/inc/menubar.lua") else -- ############################################## -- Dashboard page_utils.add_menubar_section( { section = page_utils.menu_sections.dashboard, hidden = is_pcap_dump or is_system_interface, entries = { { entry = page_utils.menu_entries.traffic_dashboard, url = ntop.isPro() and '/lua/pro/dashboard.lua' or '/lua/index.lua', }, { entry = page_utils.menu_entries.network_discovery, hidden = not interface.isDiscoverableInterface() or interface.isLoopback(), url = "/lua/discover.lua", }, { entry = page_utils.menu_entries.traffic_report, hidden = not ntop.isPro(), url = "/lua/pro/report.lua", }, { entry = page_utils.menu_entries.divider, hidden = not ntop.isPro() or not prefs.is_dump_flows_to_mysql_enabled or ifs.isViewed, }, { entry = page_utils.menu_entries.db_explorer, hidden = not ntop.isPro() or not prefs.is_dump_flows_to_mysql_enabled or ifs.isViewed, url = "/lua/pro/db_explorer.lua?ifid="..ifId, }, }, } ) -- ############################################## -- Alerts page_utils.add_menubar_section( { section = page_utils.menu_sections.alerts, hidden = not ntop.getPrefs().are_alerts_enabled or is_system_interface, entries = { { entry = page_utils.menu_entries.detected_alerts, url = '/lua/show_alerts.lua', }, { entry = page_utils.menu_entries.alerts_dashboard, hidden = not ntop.isEnterpriseM(), url = '/lua/pro/enterprise/alerts_dashboard.lua', }, { entry = page_utils.menu_entries.divider, hidden = not ntop.isEnterpriseM(), }, { entry = page_utils.menu_entries.flow_alerts_explorer, hidden = not ntop.isEnterpriseM(), url = '/lua/pro/enterprise/flow_alerts_explorer.lua', }, }, } ) -- ############################################## -- Flows page_utils.add_menubar_section( { hidden = is_system_interface, section = page_utils.menu_sections.flows, url = "/lua/flows_stats.lua", } ) -- ############################################## -- Hosts page_utils.add_menubar_section( { section = page_utils.menu_sections.hosts, hidden = ifs.isViewed or is_system_interface, entries = { { entry = page_utils.menu_entries.hosts, url = '/lua/hosts_stats.lua', }, { entry = page_utils.menu_entries.devices, hidden = not ifs.has_macs, url = '/lua/macs_stats.lua?devices_mode=source_macs_only', }, { entry = page_utils.menu_entries.networks, url = '/lua/network_stats.lua', }, { entry = page_utils.menu_entries.host_pools, url = '/lua/pool_stats.lua', }, { entry = page_utils.menu_entries.autonomous_systems, hidden = not ntop.hasGeoIP(), url = '/lua/as_stats.lua', }, { entry = page_utils.menu_entries.countries, hidden = not ntop.hasGeoIP(), url = '/lua/country_stats.lua', }, { entry = page_utils.menu_entries.operating_systems, url = '/lua/os_stats.lua', }, { entry = page_utils.menu_entries.vlans, hidden = not interface.hasVLANs(), url = '/lua/vlan_stats.lua', }, { entry = page_utils.menu_entries.pods, hidden = not ifs.has_seen_pods, url = '/lua/pods_stats.lua', }, { entry = page_utils.menu_entries.containers, hidden = not ifs.has_seen_containers, url = '/lua/containers_stats.lua', }, { entry = page_utils.menu_entries.divider, }, { entry = page_utils.menu_entries.http_servers, url = '/lua/http_servers_stats.lua', }, { entry = page_utils.menu_entries.top_hosts, hidden = is_pcap_dump, url = '/lua/top_hosts.lua', }, { entry = page_utils.menu_entries.divider, }, { entry = page_utils.menu_entries.geo_map, hidden = interface.isLoopback() or not ntop.hasGeoIP(), url = '/lua/hosts_geomap.lua', }, { entry = page_utils.menu_entries.host_explorer, url = '/lua/bubble.lua', }, }, } ) -- ############################################## -- Exporters page_utils.add_menubar_section( { section = page_utils.menu_sections.exporters, hidden = (ifs.type ~= "zmq" or not ntop.isEnterpriseM()) or is_system_interface, entries = { { entry = page_utils.menu_entries.event_exporters, hidden = not ifs.has_seen_ebpf_events, url = '/lua/pro/enterprise/event_exporters.lua', }, { entry = page_utils.menu_entries.sflow_exporters, hidden = table.len(interface.getSFlowDevices() or {}) == 0, url = '/lua/pro/enterprise/flowdevices_stats.lua?sflow_filter=All', }, { entry = page_utils.menu_entries.flow_exporters, url = '/lua/pro/enterprise/flowdevices_stats.lua', }, }, } ) end -- ############################################## -- Interface page_utils.add_menubar_section( { section = page_utils.menu_sections.if_stats, hidden = is_system_interface, url = "/lua/if_stats.lua", } ) -- ############################################## -- System Health page_utils.add_menubar_section({ hidden = not is_system_interface, section = page_utils.menu_sections.health, entries = { { entry = page_utils.menu_entries.system_status, url = '/lua/system_stats.lua', }, { entry = page_utils.menu_entries.interfaces_status, url = '/lua/system_interfaces_stats.lua', }, } }) -- ############################################## -- SNMP page_utils.add_menubar_section({ hidden = not is_system_interface or not ntop.isEnterpriseM(), url = "/lua/pro/enterprise/snmpdevices_stats.lua", section = page_utils.menu_sections.snmp }) -- ############################################## -- System local system_entries = {} -- Add plugin entries... for k, entry in pairsByField(page_utils.plugins_menu, "sort_order", rev) do system_entries[#system_entries + 1] = { entry = page_utils.menu_entries[entry.menu_entry.key], url = entry.url, } end -- Possibly add nEdge entries if is_nedge then for _, entry in ipairs( { { entry = page_utils.menu_entries.divider, hidden = not is_admin, }, { entry = page_utils.menu_entries.system_setup, hidden = not is_admin, url = '/lua/pro/nedge/system_setup/interfaces.lua', }, { entry = page_utils.menu_entries.dhcp_leases, hidden = not is_admin or not ntop.isRoutingMode(), url = '/lua/pro/nedge/admin/dhcp_leases.lua', }, { entry = page_utils.menu_entries.port_forwarding, hidden = not is_admin or not ntop.isRoutingMode(), url = '/lua/pro/nedge/admin/port_forwarding.lua', }, { entry = page_utils.menu_entries.nedge_users, hidden = not is_admin or not is_system_interface, url = '/lua/pro/nedge/admin/nf_list_users.lua', }, }) do system_entries[#system_entries + 1] = entry end end page_utils.add_menubar_section( { section = page_utils.menu_sections.system_stats, hidden = not isAllowedSystemInterface() or not is_system_interface, entries = system_entries, } ) -- ############################################## -- Tools page_utils.add_menubar_section({ hidden = not is_system_interface, section = page_utils.menu_sections.tools, entries = { { entry = page_utils.menu_entries.remote_assistance, hidden = not is_admin or not remote_assistance.isAvailable(), url = '/lua/admin/remote_assistance.lua', }, { entry = page_utils.menu_entries.conf_backup, hidden = not is_admin or is_windows, url = '/lua/get_config.lua', }, { entry = page_utils.menu_entries.conf_restore, hidden = not is_admin or is_windows, url = 'https://www.ntop.org/guides/ntopng/web_gui/settings.html#restore-configuration', }, } }) -- ############################################## -- Pools page_utils.add_menubar_section({ hidden = not is_system_interface or is_nedge, section = page_utils.menu_sections.pools, entries = { { entry = page_utils.menu_entries.manage_pools, hidden = not is_admin, url = '/lua/admin/manage_pools.lua' }, { entry = page_utils.menu_entries.host_members, hidden = not is_admin, url = '/lua/admin/manage_host_members.lua', } } }) -- ############################################## local inactive_interfaces = delete_data_utils.list_inactive_interfaces() local num_inactive_interfaces = ternary(not ntop.isnEdge(), table.len(inactive_interfaces or {}), 0) local delete_active_interface_requested_system = delete_data_utils.delete_active_interface_data_requested(getSystemInterfaceId()) -- Admin page_utils.add_menubar_section( { section = page_utils.menu_sections.admin, hidden = not is_admin, entries = { { entry = page_utils.menu_entries.manage_users, hidden = not _SESSION["localuser"] or not is_admin, url = '/lua/admin/users.lua', }, { entry = page_utils.menu_entries.preferences, hidden = not is_admin, url = '/lua/admin/prefs.lua', }, { entry = page_utils.menu_entries.scripts_config, hidden = not is_admin, url = '/lua/admin/scripts_config.lua', }, { entry = page_utils.menu_entries.endpoint_notifications, hidden = not is_admin, url = '/lua/admin/endpoint_notifications_list.lua', }, { entry = page_utils.menu_entries.endpoint_recipients, hidden = not is_admin, url = '/lua/admin/endpoint_recipients_list.lua', }, { entry = page_utils.menu_entries.divider, hidden = not is_admin, }, { entry = page_utils.menu_entries.manage_data, hidden = not is_admin or is_system_interface, url = '/lua/manage_data.lua', }, { hidden = (not is_system_interface or delete_active_interface_requested_system), custom = ([[
  • ]].. i18n("manage_data.delete_system_interface_data") ..[[
  • ]]) }, { hidden = (num_inactive_interfaces <= 0 or not is_system_interface) , custom = ([[
  • ]].. i18n("manage_data.delete_inactive_interfaces") ..[[
  • ]]) }, { entry = page_utils.menu_entries.divider, }, { entry = page_utils.menu_entries.profiles, hidden = not is_admin or not ntop.isPro() or is_nedge, url = '/lua/pro/admin/edit_profiles.lua', }, { entry = page_utils.menu_entries.categories, hidden = not is_admin, url = '/lua/admin/edit_categories.lua', }, { entry = page_utils.menu_entries.category_lists, hidden = not is_admin, url = '/lua/admin/edit_category_lists.lua', }, { entry = page_utils.menu_entries.device_protocols, hidden = not is_admin, url = '/lua/admin/edit_device_protocols.lua', }, }, } ) -- ############################################## -- Developer if not info.oem then page_utils.add_menubar_section( { section = page_utils.menu_sections.dev, entries = { { entry = page_utils.menu_entries.plugins, url = '/lua/plugins_overview.lua', }, { entry = page_utils.menu_entries.user_scripts_dev, url = '/lua/user_scripts_overview.lua', }, { entry = page_utils.menu_entries.alert_definitions, url = '/lua/defs_overview.lua', }, { entry = page_utils.menu_entries.directories, url = '/lua/directories.lua', }, { entry = page_utils.menu_entries.api, url = 'https://www.ntop.org/guides/ntopng/api/', }, { entry = page_utils.menu_entries.divider, hidden = not is_admin, }, { entry = page_utils.menu_entries.widgets_list, hidden = not is_admin, url = '/lua/widgets_list.lua', }, { entry = page_utils.menu_entries.datasources_list, hidden = not is_admin, url = '/lua/datasources_list.lua', }, }, } ) end -- ############################################## -- About page_utils.add_menubar_section( { section = page_utils.menu_sections.about, hidden = info.oem, entries = { { entry = page_utils.menu_entries.about, url = '/lua/about.lua', }, { entry = page_utils.menu_entries.telemetry, url = '/lua/telemetry.lua', }, { entry = page_utils.menu_entries.blog, url = 'http://blog.ntop.org/', }, { entry = page_utils.menu_entries.telegram, url = 'https://t.me/ntop_community', }, { entry = page_utils.menu_entries.manual, url = 'https://www.ntop.org/guides/ntopng/', }, { entry = page_utils.menu_entries.divider }, { entry = page_utils.menu_entries.report_issue, url = 'https://github.com/ntop/ntopng/issues', }, { entry = page_utils.menu_entries.suggest_feature, url = 'https://www.ntop.org/support/need-help-2/contact-us/', } }, } ) -- ############################################## page_utils.print_menubar() -- ############################################## -- Interface if(num_ifaces > 0) then url = ntop.getHttpPrefix().."/lua/if_stats.lua" -- ############################################## -- Updates submenu if updates_supported then -- Updates check print[[ ]] end end -- num_ifaces > 0 -- ############################################## print([[ ]]) -- begging of #n-container print([[
    ]]) -- ################################################### -- Render main alert notifications menu_alert_notifications.render_notifications("main-container", menu_alert_notifications.load_main_notifications()) -- ################################################### print("
    ") local lbd_serialize_by_mac = (_POST["lbd_hosts_as_macs"] == "1") or (ntop.getPref(string.format("ntopng.prefs.ifid_%u.serialize_local_broadcast_hosts_as_macs", ifs.id)) == "1") if(ifs.has_seen_dhcp_addresses and is_admin and (not is_pcap_dump) and is_packet_interface) then if(not lbd_serialize_by_mac) then if(ntop.getPref(string.format("ntopng.prefs.ifid_%u.disable_host_identifier_message", ifs.id)) ~= "1") then print('') end elseif isEmptyString(_POST["dhcp_ranges"]) then local dhcp_utils = require("dhcp_utils") local ranges = dhcp_utils.listRanges(ifs.id) if(table.empty(ranges)) then print('') end end end -- Hidden by default, will be shown by the footer if necessary print('') -- Hidden by default, will be shown by the footer if necessary print('') -- Hidden by default, will be shown by the footer if necessary print('') if(_SESSION["INVALID_CSRF"]) then print('') end -- end of main alerts print("
    ") dofile(dirs.installdir .. "/scripts/lua/inc/manage_data.lua") -- append password change modal if(not is_admin) then dofile(dirs.installdir .. "/scripts/lua/inc/password_dialog.lua") end