diff --git a/src/opnsense/mvc/app/models/OPNsense/Base/Menu/Menu.xml b/src/opnsense/mvc/app/models/OPNsense/Base/Menu/Menu.xml index 7e4652d6a..1dfef1cdb 100644 --- a/src/opnsense/mvc/app/models/OPNsense/Base/Menu/Menu.xml +++ b/src/opnsense/mvc/app/models/OPNsense/Base/Menu/Menu.xml @@ -12,8 +12,6 @@ - - @@ -101,7 +99,7 @@ - + @@ -126,8 +124,8 @@ - - + + diff --git a/src/opnsense/mvc/app/models/OPNsense/Core/ACL.php b/src/opnsense/mvc/app/models/OPNsense/Core/ACL.php index acb04dee3..ad08a6642 100644 --- a/src/opnsense/mvc/app/models/OPNsense/Core/ACL.php +++ b/src/opnsense/mvc/app/models/OPNsense/Core/ACL.php @@ -82,6 +82,14 @@ class ACL $this->legacyUsers[$node->name->__toString()] = array() ; $this->legacyUsers[$node->name->__toString()]["uid"] = $node->uid->__toString(); $this->legacyUsers[$node->name->__toString()]["groups"] = array(); + $this->legacyUsers[$node->name->__toString()]["priv"] = array(); + foreach ($node->priv as $priv) { + if (substr($priv, 0, 5) == "page-") { + if (array_key_exists($priv->__toString(), $legacyPageMap)) { + $this->legacyUsers[$node->name->__toString()]["priv"][] = $legacyPageMap[$priv->__toString()] ; + } + } + } } elseif ($key == "group") { $groupmap[$node->name->__toString()] = $node ; } @@ -115,6 +123,16 @@ class ACL public function isPageAccessible($username, $url) { if (array_key_exists($username, $this->legacyUsers)) { + // search user privs + foreach ($this->legacyUsers[$username]["priv"] as $privset) { + foreach ($privset as $urlmask) { + $match = str_replace(array(".", "*","?"), array("\.", ".*","\?"), $urlmask); + $result = preg_match("@^/{$match}$@", "{$url}"); + if ($result) { + return true; + } + } + } // search groups foreach ($this->legacyUsers[$username]["groups"] as $itemkey => $group) { if (array_key_exists($group, $this->legacyGroupPrivs)) { diff --git a/src/www/diag_dns.php b/src/www/diag_dns.php index ffd8ba169..762dac9b0 100644 --- a/src/www/diag_dns.php +++ b/src/www/diag_dns.php @@ -32,7 +32,7 @@ require_once("guiconfig.inc"); $host = trim($_REQUEST['host'], " \t\n\r\0\x0B[];\"'"); $host_esc = escapeshellarg($host); -if (is_array($config['aliases']['alias'])) { +if (isset($config['aliases']['alias']) && is_array($config['aliases']['alias'])) { $a_aliases = &$config['aliases']['alias']; } else { $a_aliases = array(); @@ -271,3 +271,4 @@ include("head.inc"); ?> + diff --git a/src/www/fbegin.inc b/src/www/fbegin.inc index 2f18fa1e4..398e9278d 100755 --- a/src/www/fbegin.inc +++ b/src/www/fbegin.inc @@ -31,6 +31,7 @@ require_once("globals.inc"); require_once("functions.inc"); require_once("shortcuts.inc"); require_once("service-utils.inc"); +require_once("script/load_phalcon.php"); /* Determine automated help URL. Should output the page name and parameters separately */ @@ -64,213 +65,19 @@ if (($pagename == "pkg.php") || ($pagename == "pkg_edit.php") || ($pagename == " /* Build the full help URL. */ $helpurl .= "/help.php?page={$pagename}"; +// link menu system +$menu = new OPNsense\Base\Menu\MenuSystem(); -function output_menu($arrayitem, $target = null) { - foreach ($arrayitem as $item) { - if (isAllowedPage($item[1]) || $item[1]=="/index.php?logout") { - - - $attr = sprintf("href=\"%s\"", htmlentities($item[1])); - if ($target) { - $attr .= sprintf(" target=\"%s\"", htmlentities($target)); - } - $class = "list-group-item"; - - - $check = substr($item[1],1,-3); - if (stripos($_SERVER['PHP_SELF'], $check) !== false) { - $class .= " active"; - } - - if ($item['class']) { - $class .= " {$item['class']}"; - } - $attr .= sprintf(" class=\"%s\"", htmlentities($class)); - if ($item['style']) { - $attr .= sprintf(" style=\"%s\"", htmlentities($item['style'])); - } - //echo "\n"; - printf("%s\n", $attr, $item[0]); - //echo "\n"; - } - } +// add interfaces to "Interfaces" menu tab... kind of a hack, may need some improvement. +$cnf = OPNsense\Core\Config::getInstance(); +$ordid = 0; +foreach ($cnf->object()->interfaces->children() as $key => $node) { + $menu->appendItem("Interfaces", $key, array("url"=>"/interfaces.php?if=".$key,"order"=>($ordid++), + "visiblename"=>$node->descr?$node->descr:strtoupper($key))); } +$menuSystem = $menu->getItems($_SERVER['PHP_SELF']); - -function active_menu($arrayitem, $pagename) { - $pagename = "/".ltrim($pagename,"/"); - - foreach ($arrayitem as $item) { - $check = substr($item[1],1,-3); - - if (stripos($pagename, $check) !== false) { - return true; - } - } - - return false; -} - -function active_main_menu() { - $options = func_get_args(); - - foreach ($options as $uri) { - if (substr($_SERVER['PHP_SELF'], 0, strlen($uri)) == $uri) { - return true; - } - } - - return false; -} - - -// System -$system_menu = array(); -$system_menu[] = array(gettext("Certificates"), "/system_certmanager.php"); -$system_menu[] = array(gettext("Firmware"), "/system_firmware_check.php"); -$system_menu[] = array(gettext("High Availability"), "/system_hasync.php"); -$system_menu[] = array(gettext("Routing"), "/system_gateways.php"); -$system_menu[] = array(gettext("Settings"), "/system_general.php"); -$system_menu[] = array(gettext("Setup Wizard"), "/wizard.php?xml=setup_wizard.xml"); -if (!isAllowedPage("system_usermanager.php*")) { - $system_menu[] = array(gettext("User Manager"), "/system_usermanager_passwordmg.php"); -} else { - $system_menu[] = array(gettext("User Manager"), "/system_usermanager.php"); -} - -// Interfaces -$interfaces_menu = array(); -if (!isset($config['system']['webgui']['noassigninterfaces'])) - $interfaces_menu[] = array(gettext("(assign)"), "/interfaces_assign.php"); -$opts = get_configured_interface_with_descr(false, true); -foreach ($opts as $oif => $odescr) - if (!isset($config['interfaces'][$oif]['ovpn'])) - $interfaces_menu[] = array(htmlspecialchars($odescr), "/interfaces.php?if={$oif}"); -$interfaces_menu = msort($interfaces_menu,0); - -// Firewall -$firewall_menu = array(); -$firewall_menu[] = array(gettext("Aliases"), "/firewall_aliases.php"); -$firewall_menu[] = array(gettext("NAT"), "/firewall_nat.php"); -$firewall_menu[] = array(gettext("Rules"), "/firewall_rules.php"); -$firewall_menu[] = array(gettext("Schedules"), "/firewall_schedule.php"); -$firewall_menu[] = array(gettext("Traffic Shaper"), "/firewall_shaper.php"); -$firewall_menu[] = array(gettext("Virtual IPs"), "/firewall_virtual_ip.php"); -$firewall_menu = msort($firewall_menu,0); - -// Services -$services_menu = array(); -$services_menu[] = array(gettext("Captive Portal"), "/services_captiveportal.php"); -$services_menu[] = array(gettext("DNS Filter"), "/services_opendns.php"); -$services_menu[] = array(gettext("DNS Forwarder"), "/services_dnsmasq.php"); -$services_menu[] = array(gettext("DNS Resolver"), "/services_unbound.php"); -$services_menu[] = array(gettext("DHCP Relay"), "/services_dhcp_relay.php"); -$services_menu[] = array(gettext("DHCPv6 Relay"), "/services_dhcpv6_relay.php"); -$services_menu[] = array(gettext("DHCP Server"), "/services_dhcp.php"); -$services_menu[] = array(gettext("DHCPv6 Server/RA"), "/services_dhcpv6.php"); -$services_menu[] = array(gettext("Dynamic DNS"), "/services_dyndns.php"); -$services_menu[] = array(gettext("IGMP proxy"), "/services_igmpproxy.php"); -$services_menu[] = array(gettext("Load Balancer"), "/load_balancer_pool.php"); -$services_menu[] = array(gettext("NTP"), "/services_ntpd.php"); -$services_menu[] = array(gettext("PPPoE Server"), "/services_vpn_pppoe.php"); -$services_menu[] = array(gettext("SNMP"), "/services_snmp.php"); -if(count($config['interfaces']) > 1) { - /* no use for UPnP in single-interface deployments - remove to reduce user confusion - */ - $services_menu[] = array(gettext("UPnP & NAT-PMP"), "/pkg_edit.php?xml=miniupnpd.xml"); -} -$services_menu[] = array(gettext("Wake on LAN"), "/services_wol.php"); -$services_menu = msort($services_menu, 0); - -// VPN -$vpn_menu = array(); -$vpn_menu[] = array(gettext("IPsec"), "/vpn_ipsec.php"); -$vpn_menu[] = array(gettext("OpenVPN"), "/vpn_openvpn_server.php"); -$vpn_menu[] = array(gettext("PPTP"), "/vpn_pptp.php"); -$vpn_menu[] = array(gettext("L2TP"), "/vpn_l2tp.php"); -$vpn_menu = msort($vpn_menu, 0); - -// Status -$status_menu = array(); -//if (count($config['captiveportal']) > 0) - $status_menu[] = array(gettext("Captive Portal"), "/status_captiveportal.php"); -$status_menu[] = array(gettext("CARP (failover)"), "/carp_status.php"); -$status_menu[] = array(gettext("Gateways"), "/status_gateways.php"); -$status_menu[] = array(gettext("DHCP Leases"), "/status_dhcp_leases.php"); -$status_menu[] = array(gettext("DHCPv6 Leases"), "/status_dhcpv6_leases.php"); -$status_menu[] = array(gettext("Filter Reload"), "/status_filter_reload.php"); -$status_menu[] = array(gettext("Interfaces"), "/status_interfaces.php"); -$status_menu[] = array(gettext("IPsec"), "/diag_ipsec.php"); -$status_menu[] = array(gettext("Load Balancer"), "/status_lb_pool.php"); -$status_menu[] = array(gettext("NTP"), "/status_ntpd.php"); -$status_menu[] = array(gettext("OpenVPN"), "/status_openvpn.php"); -$status_menu[] = array(gettext("Queues"), "/status_queues.php"); -$status_menu[] = array(gettext("RRD Graphs"), "/status_rrd_graph.php"); -$status_menu[] = array(gettext("Services"), "/status_services.php"); -$status_menu[] = array(gettext("System Logs"), "/diag_logs.php"); -$status_menu[] = array(gettext("Traffic Graph"), "/status_graph.php?if=wan"); -if(count($config['interfaces']) > 1) - $status_menu[] = array(gettext("UPnP & NAT-PMP"), "/status_upnp.php"); -$ifentries = get_configured_interface_with_descr(); -foreach ($ifentries as $ent => $entdesc) { - if (is_array($config['interfaces'][$ent]['wireless']) && - match_wireless_interface($config['interfaces'][$ent]['if'])) { - $wifdescrs[$ent] = $entdesc; - } -} -if (count($wifdescrs) > 0) - $status_menu[] = array(gettext("Wireless"), "/status_wireless.php"); -$status_menu = msort($status_menu, 0); - -// Diagnostics -$diagnostics_menu = array(); -$diagnostics_menu[] = array(gettext("ARP Table"), "/diag_arp.php"); -$diagnostics_menu[] = array(gettext("Authentication"), "/diag_authentication.php"); -$diagnostics_menu[] = array(gettext("Backup/Restore"), "/diag_backup.php"); -$diagnostics_menu[] = array(gettext("Crash Reporter"), "/crash_reporter.php"); -$diagnostics_menu[] = array(gettext("DNS Lookup"), "/diag_dns.php"); -$diagnostics_menu[] = array(gettext("NDP Table"), "/diag_ndp.php" ); -$diagnostics_menu[] = array(gettext("Factory Defaults"), "/diag_defaults.php"); -$diagnostics_menu[] = array(gettext("Halt System"), "/diag_halt.php" ); -$diagnostics_menu[] = array(gettext("Limiter Info"), "/diag_limiter_info.php" ); -$diagnostics_menu[] = array(gettext("pfInfo"), "/diag_pf_info.php"); -$diagnostics_menu[] = array(gettext("pfTop"), "/diag_system_pftop.php"); -$diagnostics_menu[] = array(gettext("Ping"), "/diag_ping.php"); -$diagnostics_menu[] = array(gettext("Reboot"), "/diag_reboot.php"); -$diagnostics_menu[] = array(gettext("Packet Capture"), "/diag_packet_capture.php"); -$diagnostics_menu[] = array(gettext("Traceroute"), "/diag_traceroute.php"); -$diagnostics_menu[] = array(gettext("SMART Status"), "/diag_smart.php"); -$diagnostics_menu[] = array(gettext("System Activity"), "/diag_system_activity.php"); -$diagnostics_menu[] = array(gettext("Test Port"), "/diag_testport.php"); -$diagnostics_menu[] = array(gettext("Routes"), "/diag_routes.php"); -$diagnostics_menu[] = array(gettext("Sockets"), "/diag_sockets.php" );; -$diagnostics_menu[] = array(gettext("States"), "/diag_dump_states.php"); -$diagnostics_menu[] = array(gettext("States Summary"), "/diag_states_summary.php"); -$diagnostics_menu[] = array(gettext("Tables"), "/diag_tables.php"); - -if (file_exists("/var/run/gmirror_active")) { - $diagnostics_menu[] = array(gettext("GEOM Mirrors"), "/diag_gmirror.php" ); -} - -$diagnostics_menu = msort($diagnostics_menu, 0); - -$help_menu = array(); -$help_menu[] = array(gettext("About this Page"), $helpurl); -$help_menu[] = array(gettext("Bug Database"), "https://github.com/opnsense/core/issues"); -$help_menu[] = array(gettext("User Forum"), "https://forum.opnsense.org/"); -$help_menu[] = array(gettext("Documentation"), "https://wiki.opnsense.org/"); -$help_menu[] = array(gettext("Developers Wiki"), "https://wiki.opnsense.org/index.php/Develop:Info"); -$help_menu[] = array(gettext("Paid Support"), "https://opnsense.org/support-overview/commercial-support/"); -$help_menu[] = array(gettext("FreeBSD Handbook"), "https://www.freebsd.org/doc/handbook/"); -$help_menu = msort($help_menu, 0); - -function add_to_menu($url, $name) -{ - if (isAllowedPage($url)) { - echo "{$name}\n"; - } -} +$aclObj = new \OPNsense\Core\ACL(); /* display a top alert bar if need be */ $need_alert_display = false; @@ -289,7 +96,6 @@ if($need_alert_display == true) { $pgtitle_output = true; ?> - @@ -333,93 +139,30 @@ $pgtitle_output = true; - + - + diff --git a/src/www/foot.inc b/src/www/foot.inc index 27dadcca1..38d1e4b65 100644 --- a/src/www/foot.inc +++ b/src/www/foot.inc @@ -61,5 +61,9 @@ + + + +