$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 '' , 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[] = htmlspecialchars($protocol . ' ('. $matchArr[2] .')', ENT_QUOTES); } else { $options[] = htmlspecialchars($protocol, ENT_QUOTES); } } } 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

' , PHP_EOL; } else { echo '' , PHP_EOL; } ?>
Lokinet daemon is not running
'; } else { $status = '
Lokinet daemon is running
'; } ?>
Configure Lokinet

Enter Exit Node Data to activate:

' , PHP_EOL; } else { echo '' , PHP_EOL; } if ($lokinetstatus[0] == 0) { echo '' , PHP_EOL; } else { echo '' , PHP_EOL; } ?>

Lokient Daemon

The 3 buttons below must be armed (red) to connect to Lokinet. If there isn't a current lokinet.ini file found on the system the "Generate.ini" button will be gre$
Enter a valid bootstrap url below and apply to overwrite the current bootstrap:

' , PHP_EOL; } else { echo '' , PHP_EOL; } if (file_exists($filename)) { echo '' , 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 settings

Relay settings

' , 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; } /* Lokinet script commands start HERE //// //// LOKINET //// //*/ //START } elseif (isset($_POST['StartDaemon'])) { exec('sudo /var/lib/lokinet/lokilaunch.sh start'); //STOP } elseif (isset($_POST['StopDaemon'])) { exec('sudo /var/lib/lokinet/lokilaunch.sh stop'); //START EXIT } elseif (isset($_POST['StartExit'])) { $exit = $_POST['exitaddress']; $token = $_POST['exitkey']; $exit=str_replace("'", "", $exit); $token=str_replace("'", "", $token); $output = shell_exec("sudo /var/lib/lokinet/lokilaunch.sh exitup '".$exit."''" .$token."'"); echo "
$output
"; GLOBAL $existatus; $exitstatus = TRUE; //STOP EXIT } elseif (isset($_POST['StopExit'])) { exec ('sudo /var/lib/lokinet/lokilaunch.sh exitdown'); GLOBAL $exitstatus; $exitstatus = FALSE; //GENERATE LOKINET.INI } elseif (isset($_POST['GenerateLokinet'])) { ?>
Generating Lokinet Configuration
$output"; //REGENERATE LOKINET.INI } elseif (isset($_POST['ReGenerateLokinet'])) { ?>
Regenerating Lokinet Configuration
$output"; //APPLY LOKINET-BOOTSTRAP } elseif (isset($_POST['ApplyLokinetSettings'])) { ?>
Stopping Lokinet background daemon process.
Applying Bootstrap
$output"; } DisplayLokinetConfig(); } ?>