$val) { if(is_array($val)) { $res[] = "[$key]"; foreach($val as $skey => $sval) $res[] = "$skey = ".(is_numeric($sval) ? $sval : '"'.$sval.'"'); } else $res[] = "$key = ".(is_numeric($val) ? $val : '"'.$val.'"'); } if(safefilerewrite($file, implode("\r\n", $res))) { return true; } else { return false; } } function safefilerewrite($fileName, $dataToSave) { if ($fp = fopen($fileName, 'w')) { $startTime = microtime(TRUE); do { $canWrite = flock($fp, LOCK_EX); // If lock not obtained sleep for 0 - 100 milliseconds, to avoid collision and CPU load if(!$canWrite) usleep(round(rand(0, 100)*1000)); } while ((!$canWrite)and((microtime(TRUE)-$startTime) < 5)); //file was locked so now we can store information if ($canWrite) { fwrite($fp, $dataToSave); flock($fp, LOCK_UN); } fclose($fp); return true; } else { return false; } } /** * * Add CSRF Token to form * */ function CSRFToken() { ?> ' , PHP_EOL; foreach ( $options as $opt => $label) { $select = ''; $key = isAssoc($options) ? $opt : $label; if( $key == $selected ) { $select = ' selected="selected"'; } echo ''. htmlspecialchars($label, ENT_QUOTES).'' , PHP_EOL; } echo '' , PHP_EOL; } /** * * @param string $input * @param string $string * @param int $offset * @param string $separator * @return $string */ function GetDistString( $input,$string,$offset,$separator ) { $string = substr( $input,strpos( $input,$string )+$offset,strpos( substr( $input,strpos( $input,$string )+$offset ), $separator ) ); return $string; } /** * * @param array $arrConfig * @return $config */ function ParseConfig( $arrConfig ) { $config = array(); foreach( $arrConfig as $line ) { $line = trim($line); if( $line != "" && $line[0] != "#" ) { $arrLine = explode( "=",$line ); $config[$arrLine[0]] = ( count($arrLine) > 1 ? $arrLine[1] : true ); } } return $config; } /** * * @param string $freq * @return $channel */ function ConvertToChannel( $freq ) { if ($freq >= 2412 && $freq <= 2484) { $channel = ($freq - 2407)/5; } elseif ($freq >= 4915 && $freq <= 4980) { $channel = ($freq - 4910)/5 + 182; } elseif ($freq >= 5035 && $freq <= 5865) { $channel = ($freq - 5030)/5 + 6; } else { $channel = -1; } if ($channel >= 1 && $channel <= 196) { return $channel; } else { return 'Invalid Channel'; } } /** * Converts WPA security string to readable format * @param string $security * @return string */ function ConvertToSecurity( $security ) { $options = array(); preg_match_all('/\[([^\]]+)\]/s', $security, $matches); foreach($matches[1] as $match) { if (preg_match('/^(WPA\d?)/', $match, $protocol_match)) { $protocol = $protocol_match[1]; $matchArr = explode('-', $match); if (count($matchArr) > 2) { $options[] = $protocol . ' ('. $matchArr[2] .')'; } else { $options[] = $protocol; } } } if (count($options) === 0) { // This could also be WEP but wpa_supplicant doesn't have a way to determine // this. // And you shouldn't be using WEP these days anyway. return 'Open'; } else { return implode('', $options); } } /** * * */ function DisplayOpenVPNConfig() { exec( 'cat '. RASPI_OPENVPN_CLIENT_CONFIG, $returnClient ); exec( 'cat '. RASPI_OPENVPN_SERVER_CONFIG, $returnServer ); exec( 'pidof openvpn | wc -l', $openvpnstatus); if( $openvpnstatus[0] == 0 ) { $status = 'OpenVPN is not running ×'; } else { $status = 'OpenVPN is running ×'; } // parse client settings foreach( $returnClient as $a ) { if( $a[0] != "#" ) { $arrLine = explode( " ",$a) ; $arrClientConfig[$arrLine[0]]=$arrLine[1]; } } // parse server settings foreach( $returnServer as $a ) { if( $a[0] != "#" ) { $arrLine = explode( " ",$a) ; $arrServerConfig[$arrLine[0]]=$arrLine[1]; } } ?> Configure OpenVPN Client settings Server settings Client settings Select OpenVPN configuration file (.ovpn) Client Log Server settings Port Protocol Root CA certificate Server certificate Diffie Hellman parameters KeepAlive Server log ' , PHP_EOL; } else { echo '' , PHP_EOL; } ?> TOR is not running ×'; } else { $status = 'TOR is running ×'; } $arrConfig = array(); foreach( $return as $a ) { if( $a[0] != "#" ) { $arrLine = explode( " ",$a) ; $arrConfig[$arrLine[0]]=$arrLine[1]; } } ?> Configure TOR proxy Basic Relay Basic settings VirtualAddrNetwork AutomapHostsSuffixes AutomapHostsOnResolve TransListenAddress DNSPort DNSListenAddress Relay settings ORPort ORListenAddress Nickname Address RelayBandwidthRate RelayBandwidthBurst ' , PHP_EOL; } else { echo '' , PHP_EOL; }; ?> ' , PHP_EOL; } } elseif( isset($_POST['StopOpenVPN']) ) { echo "Attempting to stop openvpn"; exec( 'sudo /etc/init.d/openvpn stop', $return ); foreach( $return as $line ) { echo htmlspecialchars($line, ENT_QUOTES).'' , PHP_EOL; } } elseif( isset($_POST['StartTOR']) ) { echo "Attempting to start TOR"; exec( 'sudo /etc/init.d/tor start', $return ); foreach( $return as $line ) { echo htmlspecialchars($line, ENT_QUOTES).'' , PHP_EOL; } } elseif( isset($_POST['StopTOR']) ) { echo "Attempting to stop TOR"; exec( 'sudo /etc/init.d/tor stop', $return ); foreach( $return as $line ) { echo htmlspecialchars($line, ENT_QUOTES).'' , PHP_EOL; } } }