diff --git a/ajax/networking/get_netcfg.php b/ajax/networking/get_netcfg.php new file mode 100644 index 00000000..f2e735a4 --- /dev/null +++ b/ajax/networking/get_netcfg.php @@ -0,0 +1,41 @@ + 1) { + $dhcpdata['DNS1'] = $arrDns[1]; + } + if (count($arrDns) > 2) { + $dhcpdata['DNS2'] = $arrDns[2]; + } + } + } + echo json_encode($dhcpdata); +} diff --git a/app/js/custom.js b/app/js/custom.js index 0a35d917..0d8ce7f6 100644 --- a/app/js/custom.js +++ b/app/js/custom.js @@ -236,9 +236,28 @@ function loadWifiStations(refresh) { .load('ajax/networking/wifi_stations.php'+qs, complete); }; } - $(".js-reload-wifi-stations").on("click", loadWifiStations(true)); + +function loadInterfaceDHCP(selected) { + +} + +function loadInterfaceDHCPSelect() { + var interface = $('#cbxdhcpiface').val(); + console.log(interface); + $.get('ajax/networking/get_netcfg.php?iface='+interface,function(data){ + jsonData = JSON.parse(data); + $('#dhcp-iface')[0].checked = jsonData.DHCPEnabled; + $('#txtrangestart').val(jsonData.RangeStart); + $('#txtrangeend').val(jsonData.RangeEnd); + $('#txtrangeleasetime').val(jsonData.leaseTime); + $('#txtdns1').val(jsonData.DNS1); + $('#txtdns2').val(jsonData.DNS2); + $('#cbxrangeleasetimeunits').val(jsonData.leaseTimeInterval); + }); +} + function loadChannel() { $.get('ajax/networking/get_channel.php',function(data){ jsonData = JSON.parse(data); diff --git a/config/config.php b/config/config.php index 030df874..d80c8038 100755 --- a/config/config.php +++ b/config/config.php @@ -11,6 +11,7 @@ define('RASPI_CACHE_PATH', sys_get_temp_dir() . '/raspap'); // These are typical for default RPi installs. Modify if needed. define('RASPI_DNSMASQ_CONFIG', '/etc/dnsmasq.d/090_raspap.conf'); define('RASPI_DNSMASQ_LEASES', '/var/lib/misc/dnsmasq.leases'); +define('RASPI_DNSMASQ_PREFIX', '/etc/dnsmasq.d/090_'); define('RASPI_ADBLOCK_LISTPATH', '/etc/raspap/adblock/'); define('RASPI_ADBLOCK_CONFIG', '/etc/dnsmasq.d/090_adblock.conf'); define('RASPI_HOSTAPD_CONFIG', '/etc/hostapd/hostapd.conf'); diff --git a/includes/defaults.php b/includes/defaults.php index fb543d43..e6ecab74 100755 --- a/includes/defaults.php +++ b/includes/defaults.php @@ -16,6 +16,7 @@ $defaults = [ // These are typical for default RPi installs. Modify if needed. 'RASPI_DNSMASQ_CONFIG' => '/etc/dnsmasq.d/090_raspap.conf', 'RASPI_DNSMASQ_LEASES' => '/var/lib/misc/dnsmasq.leases', + 'RASPI_DNSMASQ_PREFIX' => '/etc/dnsmasq.d/090_', 'RASPI_ADBLOCK_LISTPATH' => '/etc/raspap/adblock/', 'RASPI_ADBLOCK_CONFIG' => '/etc/dnsmasq.d/090_adblock.conf', 'RASPI_HOSTAPD_CONFIG' => '/etc/hostapd/hostapd.conf', diff --git a/includes/dhcp.php b/includes/dhcp.php index b1838214..e498b962 100755 --- a/includes/dhcp.php +++ b/includes/dhcp.php @@ -81,15 +81,63 @@ function DisplayDHCPConfig() $config .= "log-facility=/tmp/dnsmasq.log".PHP_EOL; $config .= "conf-dir=/etc/dnsmasq.d".PHP_EOL; - file_put_contents("/tmp/dnsmasqdata", $config); - system('sudo cp /tmp/dnsmasqdata '.RASPI_DNSMASQ_CONFIG, $return); + + $iface = $_POST['interface']; + // handle DHCP for selected interface option + if ($_POST['dhcp-iface'] == "1") { + $net_cfg = RASPI_CONFIG_NETWORKING.'/'.$iface.'.ini'; + if (!file_exists($net_cfg) || filesize($net_cfg) ==0 ) { + $status->addMessage('Static IP address for '.$iface.' not found.', 'danger'); + $status->addMessage('Configure this interface in Networking > '.$iface.'.', 'danger'); + $return = 1; + } else { + $dhcp_cfg = file_get_contents(RASPI_DHCPCD_CONFIG); + if (!preg_match('/^interface\s'.$iface.'$/m', $dhcp_cfg)) { + // set dhcp values from ini + $iface_cfg = parse_ini_file($net_cfg, false, INI_SCANNER_RAW); + $ip_address = $iface_cfg['ip_address']; + $domain_name_server = ($iface_cfg['domain_name_server'] =='') ? '1.1.1.1 8.8.8.8' : $iface_cfg['domain_name_server']; + + // append interface config to dhcpcd.conf + $cfg = $dhcp_conf; + $cfg[] = '# RaspAP '.$_POST['interface'].' configuration'; + $cfg[] = 'interface '.$_POST['interface']; + $cfg[] = 'static ip_address='.$ip_address; + $cfg[] = 'static domain_name_server='.$domain_name_server; + $cfg[] = PHP_EOL; + $cfg = join(PHP_EOL, $cfg); + $dhcp_cfg .= $cfg; + file_put_contents("/tmp/dhcpddata", $dhcp_cfg); + system('sudo cp /tmp/dhcpddata '.RASPI_DHCPCD_CONFIG, $return); + $status->addMessage('DHCP configuration for '.$iface.' added.', 'success'); + system('sudo cp /tmp/dnsmasqdata '.RASPI_DNSMASQ_PREFIX.$iface.'.conf', $return); + $status->addMessage('Dnsmasq configuration for '.$iface.' added.', 'success'); + } else { + $status->addMessage('DHCP for '.$iface.' already enabled.', 'danger'); + } + } + } elseif (($_POST['dhcp-iface'] == "0") && file_exists(RASPI_DNSMASQ_PREFIX.$iface.'.conf')) { + // remove dhcp conf for selected interface + $dhcp_cfg = file_get_contents(RASPI_DHCPCD_CONFIG); + // todo: improve by removing extra blank lines + $dhcp_cfg = preg_replace('/^#\sRaspAP\s'.$iface.'.*\n(.*\n){3}/m', '', $dhcp_cfg); + file_put_contents("/tmp/dhcpddata", $dhcp_cfg); + system('sudo cp /tmp/dhcpddata '.RASPI_DHCPCD_CONFIG, $return); + $status->addMessage('DHCP configuration for '.$iface.' removed.', 'success'); + // remove dnsmasq eth0 conf + system('sudo rm '.RASPI_DNSMASQ_PREFIX.$iface.'.conf', $return); + $status->addMessage('Dnsmasq configuration for '.$iface.' removed.', 'success'); + } else { + system('sudo cp /tmp/dnsmasqdata '.RASPI_DNSMASQ_CONFIG, $return); + } + } else { $status->addMessage($errors, 'danger'); } if ($return == 0) { - $status->addMessage('Dnsmasq configuration updated successfully', 'success'); + $status->addMessage('Dnsmasq configuration updated successfully.', 'success'); } else { $status->addMessage('Dnsmasq configuration failed to be updated.', 'danger'); } @@ -128,55 +176,6 @@ function DisplayDHCPConfig() } $serviceStatus = $dnsmasq_state ? "up" : "down"; - - exec('cat '. RASPI_DNSMASQ_CONFIG, $return); - $conf = ParseConfig($return); - $arrRange = explode(",", $conf['dhcp-range']); - $RangeStart = $arrRange[0]; - $RangeEnd = $arrRange[1]; - $RangeMask = $arrRange[2]; - $leaseTime = $arrRange[3]; - $dhcpHost = $conf["dhcp-host"]; - $dhcpHost = empty($dhcpHost) ? [] : $dhcpHost; - $dhcpHost = is_array($dhcpHost) ? $dhcpHost : [ $dhcpHost ]; - $upstreamServers = is_array($conf['server']) ? $conf['server'] : [ $conf['server'] ]; - $upstreamServers = array_filter($upstreamServers); - - $DNS1 = ''; - $DNS2 = ''; - if (isset($conf['dhcp-option'])) { - $arrDns = explode(",", $conf['dhcp-option']); - if ($arrDns[0] == '6') { - if (count($arrDns) > 1) { - $DNS1 = $arrDns[1]; - } - if (count($arrDns) > 2) { - $DNS2 = $arrDns[2]; - } - } - } - - $hselected = ''; - $mselected = ''; - $dselected = ''; - $infiniteselected = ''; - preg_match('/([0-9]*)([a-z])/i', $leaseTime, $arrRangeLeaseTime); - if ($leaseTime === 'infinite') { - $infiniteselected = ' selected="selected"'; - } else { - switch ($arrRangeLeaseTime[2]) { - case 'h': - $hselected = ' selected="selected"'; - break; - case 'm': - $mselected = ' selected="selected"'; - break; - case 'd': - $dselected = ' selected="selected"'; - break; - } - } - exec("ip -o link show | awk -F': ' '{print $2}'", $interfaces); exec('cat ' . RASPI_DNSMASQ_LEASES, $leases); @@ -184,16 +183,6 @@ function DisplayDHCPConfig() "dhcp", compact( "status", "serviceStatus", - "RangeStart", - "RangeEnd", - "DNS1", - "DNS2", - "upstreamServers", - "arrRangeLeaseTime", - "mselected", - "hselected", - "dselected", - "infiniteselected", "dnsmasq_state", "conf", "dhcpHost", diff --git a/installers/common.sh b/installers/common.sh index 7fddc414..4d4a03e9 100755 --- a/installers/common.sh +++ b/installers/common.sh @@ -266,7 +266,7 @@ function _prompt_install_openvpn() { function _install_openvpn() { _install_log "Installing OpenVPN and enabling client configuration" echo "Adding packages via apt-get" - sudo apt-get install $apt_option openvpn || _install_status 1 "Unable to install openvpn" + sudo apt-get install -y openvpn || _install_status 1 "Unable to install openvpn" sudo sed -i "s/\('RASPI_OPENVPN_ENABLED', \)false/\1true/g" "$webroot_dir/includes/config.php" || _install_status 1 "Unable to modify config.php" echo "Enabling openvpn-client service on boot" sudo systemctl enable openvpn-client@client || _install_status 1 "Unable to enable openvpn-client daemon" diff --git a/installers/raspap.sudoers b/installers/raspap.sudoers index ae42393c..69262f1a 100644 --- a/installers/raspap.sudoers +++ b/installers/raspap.sudoers @@ -21,6 +21,8 @@ www-data ALL=(ALL) NOPASSWD:/bin/systemctl disable openvpn-client@client www-data ALL=(ALL) NOPASSWD:/bin/cp /tmp/ovpnclient.ovpn /etc/openvpn/client/client.conf www-data ALL=(ALL) NOPASSWD:/bin/cp /tmp/authdata /etc/openvpn/client/login.conf www-data ALL=(ALL) NOPASSWD:/bin/cp /tmp/dnsmasqdata /etc/dnsmasq.d/090_raspap.conf +www-data ALL=(ALL) NOPASSWD:/bin/cp /tmp/dnsmasqdata /etc/dnsmasq.d/090_*.conf +www-data ALL=(ALL) NOPASSWD:/bin/rm /etc/dnsmasq.d/090_*.conf www-data ALL=(ALL) NOPASSWD:/bin/cp /tmp/dhcpddata /etc/dhcpcd.conf www-data ALL=(ALL) NOPASSWD:/sbin/shutdown -h now www-data ALL=(ALL) NOPASSWD:/sbin/reboot diff --git a/templates/dhcp/advanced.php b/templates/dhcp/advanced.php index 6366977c..fda2eb00 100644 --- a/templates/dhcp/advanced.php +++ b/templates/dhcp/advanced.php @@ -4,7 +4,6 @@
-
diff --git a/templates/dhcp/general.php b/templates/dhcp/general.php index e4023392..e2782cf4 100644 --- a/templates/dhcp/general.php +++ b/templates/dhcp/general.php @@ -3,41 +3,51 @@
- +
+ +
+
+
+ +
+ aria-describedby="dhcp-iface-description"> + +
+

+ +

+
+
+
+
- +
- +
- +
- + + + +
@@ -45,14 +55,14 @@
- +
- +