-- -- (C) 2013-21 - ntop.org -- local dirs = ntop.getDirs() package.path = dirs.installdir .. "/scripts/lua/modules/?.lua;" .. package.path package.path = dirs.installdir .. "/scripts/lua/modules/toasts/?.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 telemetry_utils = require "telemetry_utils" local ts_utils = require("ts_utils_core") local page_utils = require("page_utils") local delete_data_utils = require "delete_data_utils" local toasts_manager = require("toasts_manager") local host_pools = require "host_pools" local auth = require "auth" local blog_utils = require("blog_utils") local template_utils = require "template_utils" local auth = require "auth" local is_nedge = ntop.isnEdge() local is_appliance = ntop.isAppliance() 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()) local has_local_auth = (ntop.getPref("ntopng.prefs.local.auth_enabled") ~= '0') local is_system_interface = page_utils.is_system_view() blog_utils.fetchLatestPosts() 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 -- ############################################## -- Shortcuts -- The Shortcuts entry are used to go to the System interface pages -- without using the Interface dropdown. The section is hidden -- in system interface. page_utils.add_menubar_section({ section = page_utils.menu_sections.shortcuts, hidden = is_system_interface or not is_admin, entries = { { entry = page_utils.menu_entries.snmp, hidden = (not ntop.isEnterpriseM() and not ntop.isnEdgeEnterprise()), url = "/lua/pro/enterprise/snmpdevices_stats.lua" }, { entry = page_utils.menu_entries.active_monitoring, url = "/plugins/active_monitoring_stats.lua" }, { entry = page_utils.menu_entries.divider, hidden = not ntop.isEnterpriseM(), }, { entry = page_utils.menu_entries.manage_pools, hidden = not is_admin, url = '/lua/admin/manage_pools.lua' }, { entry = page_utils.menu_entries.divider, }, { 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/recipients_list.lua', }, } }) -- 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.divider, }, { 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 prefs.is_nindex_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, }, { entry = page_utils.menu_entries.db_explorer, hidden = not ntop.isPro() or not prefs.is_nindex_enabled or ifs.isViewed, url = "/lua/pro/nindex_query.lua", }, }, } ) -- ############################################## -- Alerts page_utils.add_menubar_section( { section = page_utils.menu_sections.alerts, hidden = not ntop.getPrefs().are_alerts_enabled or not auth.has_capability(auth.capabilities.alerts), url = '/lua/alert_stats.lua', } ) -- ############################################## -- Flows page_utils.add_menubar_section( { hidden = is_system_interface, section = page_utils.menu_sections.flows, url = "/lua/flows_stats.lua", } ) -- ############################################## local service_map_available = false if(ntop.isEnterpriseL() and (ntop.getPref("ntopng.prefs.is_behaviour_analysis_enabled") == "1")) then local service_map = interface.serviceMap() if service_map and (table.len(service_map) > 0) then service_map_available = true end end local periodic_info_available = false if(ntop.isEnterpriseL() and (ntop.getPref("ntopng.prefs.is_behaviour_analysis_enabled") == "1")) then local periodicity_map = interface.periodicityMap() if periodicity_map and (table.len(periodicity_map) > 0) then periodic_info_available = true end end -- 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', }, }, } ) -- ############################################## -- Maps page_utils.add_menubar_section({ section = page_utils.menu_sections.maps, hidden = is_system_interface, entries = { { entry = page_utils.menu_entries.service_map, hidden = not service_map_available, url = '/lua/pro/enterprise/service_map.lua', }, { entry = page_utils.menu_entries.periodicity_map, hidden = not periodic_info_available, url = '/lua/pro/enterprise/periodicity_map.lua', }, { entry = page_utils.menu_entries.geo_map, hidden = interface.isLoopback() or not ntop.hasGeoIP(), url = '/lua/hosts_geomap.lua', }, { entry = page_utils.menu_entries.hosts_map, url = '/lua/hosts_map.lua', }, } }) -- ############################################## -- Exporters page_utils.add_menubar_section( { section = page_utils.menu_sections.exporters, hidden = ((ifs.type ~= "zmq" and ifs.type ~= "custom") 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/sflowdevices_stats.lua', }, { 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 local 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', }, { entry = page_utils.menu_entries.alerts_status, url = '/lua/system_alerts_stats.lua', }, } -- Add plugin entries relative to system health (e.g., redis) ... for k, entry in pairsByField(page_utils.plugins_menu, "sort_order", rev) do -- NOTE: match on the health key to only pick the right subset of entries if entry.menu_entry.section == page_utils.menu_sections.health.key then health_entries[#health_entries + 1] = { entry = page_utils.menu_entries[entry.menu_entry.key], url = entry.url, } end end page_utils.add_menubar_section({ hidden = not is_system_interface, section = page_utils.menu_sections.health, entries = health_entries }) -- ############################################## -- Pollers (e.g., SNMP, active monitoring) local poller_entries = { { entry = page_utils.menu_entries.infrastructure_dashboard, hidden = not ntop.isEnterpriseL() or not is_admin, url = '/lua/pro/enterprise/infrastructure_dashboard.lua' } } -- Add SNMP to the poller entries poller_entries[#poller_entries + 1] = { entry = page_utils.menu_entries.snmp, hidden = not is_system_interface or (not ntop.isEnterpriseM() and not ntop.isnEdgeEnterprise()), url = "/lua/pro/enterprise/snmpdevices_stats.lua", } -- Add plugin entries relative to pollers (e.g., active monitoring) ... for k, entry in pairsByField(page_utils.plugins_menu, "sort_order", rev) do if entry.menu_entry.section == page_utils.menu_sections.pollers.key then poller_entries[#poller_entries + 1] = { entry = page_utils.menu_entries[entry.menu_entry.key], url = entry.url, } end end page_utils.add_menubar_section({ hidden = not is_system_interface, section = page_utils.menu_sections.pollers, entries = poller_entries }) -- ############################################## -- System local system_entries = {} -- Add plugin entries... for k, entry in pairsByField(page_utils.plugins_menu, "sort_order", rev) do -- Skip pollers, they've already been set under pollers section if not entry.menu_entry.section == "pollers" then system_entries[#system_entries + 1] = { entry = page_utils.menu_entries[entry.menu_entry.key], url = entry.url, } end end -- Possibly add nEdge entries if is_nedge or is_appliance then -- Possibly add a divider if system_entries already contain elements if #system_entries > 0 then system_entries[#system_entries + 1] = { entry = page_utils.menu_entries.divider, hidden = not is_admin, } end end if is_nedge then for _, entry in ipairs( { { entry = page_utils.menu_entries.system_setup, hidden = not is_admin, url = '/lua/system_setup_ui/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', }, }) do system_entries[#system_entries + 1] = entry end end if is_appliance then for _, entry in ipairs( { { entry = page_utils.menu_entries.system_setup, hidden = not is_admin, url = '/lua/system_setup_ui/mode.lua', }, }) do system_entries[#system_entries + 1] = entry end end if #system_entries > 0 then page_utils.add_menubar_section( { section = page_utils.menu_sections.system_stats, hidden = not isAllowedSystemInterface() or not is_system_interface, entries = system_entries, } ) end -- ############################################## -- Pools page_utils.add_menubar_section({ hidden = not is_system_interface, 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', } } }) -- ############################################## page_utils.add_menubar_section({ section = page_utils.menu_sections.notifications, hidden = not is_system_interface, entries = { { 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/recipients_list.lua', } } }) -- ############################################## -- Admin page_utils.add_menubar_section( { section = page_utils.menu_sections.admin, hidden = not is_admin, entries = { { entry = page_utils.menu_entries.nedge_users, hidden = not is_admin or not is_nedge, url = '/lua/pro/nedge/admin/nf_list_users.lua', }, { entry = page_utils.menu_entries.manage_users, -- Note: 'not _SESSION["localuser"]' indicates that this is an external -- user (e.g. LDAP), in that case allow users management if fallback is enabled. hidden = not is_admin or (not _SESSION["localuser"] and not has_local_auth), 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, section = page_utils.menu_sections.user_scripts, hidden = not is_admin, url = '/lua/admin/edit_configset.lua?subdir=host', }, { entry = page_utils.menu_entries.license, hidden = info["pro.forced_community"], url = '/lua/license.lua', }, { entry = page_utils.menu_entries.divider, }, { entry = page_utils.menu_entries.manage_configurations, hidden = not is_admin or is_windows, url = '/lua/admin/manage_configurations.lua', }, { entry = page_utils.menu_entries.manage_data, hidden = not is_admin, url = '/lua/manage_data.lua', }, { 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 and auth.has_capability(auth.capabilities.developer) 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/', }, }, } ) 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 toasts toasts_manager.render_toasts("main-container", toasts_manager.load_main_toasts()) -- ################################################### 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('') -- Hidden by default, will be shown by the footer if necessary print('') if(_SESSION["INVALID_CSRF"]) then print('') end -- end of main alerts print("
") -- append password change modal if(not is_admin) then dofile(dirs.installdir .. "/scripts/lua/inc/password_dialog.lua") end