mirror of
				https://github.com/billz/raspap-webgui.git
				synced 2025-03-01 10:31:47 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			104 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
/*
 | 
						|
 Save settings of network devices (type, name, PW, APN ...)
 | 
						|
  
 | 
						|
 Called by js saveNetDeviceSettings (App/js/custom.js)
 | 
						|
*/
 | 
						|
 | 
						|
 | 
						|
require '../../includes/csrf.php';
 | 
						|
 | 
						|
require_once '../../includes/config.php';
 | 
						|
require_once '../../includes/functions.php';
 | 
						|
 | 
						|
if (isset($_POST['interface'])) {
 | 
						|
    $int = $_POST['interface'];
 | 
						|
    $cfg = [];
 | 
						|
    $file = $int.".ini";
 | 
						|
    $cfgfile="/etc/wvdial.conf";
 | 
						|
    if ( $int == "mobiledata") {
 | 
						|
        $cfg['pin'] = $_POST["pin-mobile"];
 | 
						|
        $cfg['apn'] = $_POST["apn-mobile"];
 | 
						|
        $cfg['apn_user'] = $_POST["apn-user-mobile"];
 | 
						|
        $cfg['apn_pw'] = $_POST["apn-pw-mobile"];
 | 
						|
        if (file_exists($cfgfile)) {
 | 
						|
            if($cfg["pin"] !== "") exec('sudo /bin/sed -i  "s/CPIN=\".*\"/CPIN=\"'.$cfg["pin"].'\"/gi" '.$cfgfile);
 | 
						|
            if($cfg["apn"] !== "") exec('sudo /bin/sed -i "s/\"IP\"\,\".*\"/\"IP\"\,\"'.$cfg["apn"].'\"/gi" '.$cfgfile);
 | 
						|
            if($cfg["apn_user"] !== "") exec('sudo /bin/sed -i "s/^username = .*$/Username = '.$cfg["apn_user"].'/gi" '.$cfgfile);
 | 
						|
            if($cfg["apn_pw"] !== "") exec('sudo /bin/sed -i "s/^password = .*$/Password = '.$cfg["apn_pw"].'/gi" '.$cfgfile);
 | 
						|
        }
 | 
						|
    } else if ( preg_match("/netdevices/",$int)) {
 | 
						|
        if(!isset($_POST['opts']) ) {
 | 
						|
            $jsonData = ['return'=>0,'output'=>['No valid data to add/delete udev rule ']];
 | 
						|
            echo json_encode($jsonData);
 | 
						|
            return;
 | 
						|
        } else {
 | 
						|
            $opts=explode(" ",$_POST['opts'] );
 | 
						|
            $dev=$opts[0];
 | 
						|
            $vid=$_POST["int-vid-".$dev];
 | 
						|
            $pid=$_POST["int-pid-".$dev];
 | 
						|
            $mac=$_POST["int-mac-".$dev];
 | 
						|
            $name=trim($_POST["int-name-".$dev]);
 | 
						|
			// limit device name to letters and numbers. Total length max 20
 | 
						|
            $name=preg_replace("/[^a-z0-9]/", "", strtolower($name));
 | 
						|
            $name=substr($name, 0, min(strlen($name),20));
 | 
						|
            $type=$_POST["int-type-".$dev];
 | 
						|
            $newtype=$_POST["int-new-type-".$dev];
 | 
						|
            $udevfile=$_SESSION["udevrules"]["udev_rules_file"]; // default file /etc/udev/rules.d/80-net-devices.rules";
 | 
						|
 | 
						|
            // find the rule prototype and prefix
 | 
						|
            $rule = "";
 | 
						|
            foreach($_SESSION["udevrules"]["network_devices"] as $devt) {
 | 
						|
                if($devt["type"]==$newtype) {
 | 
						|
                    $rulenew = $devt["udev_rule"];
 | 
						|
                    $prefix = $devt["name_prefix"];
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            // check for an existing rule and delete lines with same MAC or same VID/PID
 | 
						|
            if (!empty($vid) && !empty($pid)) {
 | 
						|
                $rule = '^.*ATTRS{idVendor}==\"' . $vid . '\".*ATTRS{idProduct}==\"' . $pid . '\".*$';
 | 
						|
                exec('sudo sed -i "/'.$rule.'/Id" '.$udevfile);  // clear all entries with this VID/PID
 | 
						|
                $rule = '^.*ATTRS{idProduct}==\"' . $pid . '\".*ATTRS{idVendor}==\"' . $vid . '\".*$';
 | 
						|
                exec('sudo sed -i "/'.$rule.'/Id" '.$udevfile);  // clear all entries with this VID/PID
 | 
						|
            }
 | 
						|
            if (!empty($mac)) {
 | 
						|
                exec('sudo sed -i "/^.*'.$mac.'.*$/d" '.$udevfile);  // clear all entries with same MAC
 | 
						|
            }
 | 
						|
            // create new entry
 | 
						|
            if ( ($type != $newtype) || !empty($name) ) { // new device type or new name
 | 
						|
                if (empty($name)) $name = $prefix."%n";
 | 
						|
                if (!empty($mac)) $rule = preg_replace("/\\\$MAC\\\$/i", $mac, $rulenew);
 | 
						|
                if (!empty($vid)) $rule = preg_replace("/\\\$IDVENDOR\\\$/i", $vid, $rule);
 | 
						|
                if (!empty($pid)) $rule = preg_replace("/\\\$IDPRODUCT\\\$/i", $pid, $rule);
 | 
						|
                if (!empty($name)) $rule = preg_replace("/\\\$DEVNAME\\\$/i",$name,$rule);
 | 
						|
                if (!empty($rule)) exec('echo \''.$rule.'\' | sudo /usr/bin/tee -a '.$udevfile);
 | 
						|
            }
 | 
						|
            $jsonData = ['return'=>0,'output'=>['Settings changed for device '.$dev. '<br>Changes will only be in effect after reconnecting the device'  ] ];
 | 
						|
            echo json_encode($jsonData);
 | 
						|
            return;
 | 
						|
        }
 | 
						|
    } else {
 | 
						|
        $ip = $_POST[$int.'-ipaddress'];
 | 
						|
        $netmask = mask2cidr($_POST[$int.'-netmask']);
 | 
						|
        $dns1 = $_POST[$int.'-dnssvr'];
 | 
						|
        $dns2 = $_POST[$int.'-dnssvralt'];
 | 
						|
 | 
						|
        $cfg['interface'] = $int;
 | 
						|
        $cfg['routers'] = $_POST[$int.'-gateway'];
 | 
						|
        $cfg['ip_address'] = $ip."/".$netmask;
 | 
						|
        $cfg['domain_name_server'] = $dns1." ".$dns2;
 | 
						|
        $cfg['static'] = $_POST[$int.'-static'];
 | 
						|
        $cfg['failover'] = $_POST[$int.'-failover'];
 | 
						|
    }
 | 
						|
    if (write_php_ini($cfg, RASPI_CONFIG.'/networking/'.$file)) {
 | 
						|
        $jsonData = ['return'=>0,'output'=>['Successfully Updated Network Configuration']];
 | 
						|
    } else {
 | 
						|
        $jsonData = ['return'=>1,'output'=>['Error saving network configuration to file']];
 | 
						|
    }
 | 
						|
} else {
 | 
						|
    $jsonData = ['return'=>2,'output'=>'Unable to detect interface'];
 | 
						|
}
 | 
						|
 | 
						|
echo json_encode($jsonData);
 |