$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
'; } if ($rulestate != "lokinet") { $status = '
Not Connected to Lokinet
'; } else { $status = '
Successfully Connected to Lokinet
'; } ?>
Configure Lokinet

All 4 buttons below must be active (green) to connect to Lokinet. If there isn't a current lokinet.ini file found on the system the "Generate.ini" button will be red. The .ini file must be generated first by pressing the button. Similarly the absense of a valid bootstrap will be indicated by the red "Bootstrap" button. Applying a bootstrap by pressing the apply button without submitting a valid URL in the textbox area will apply the original default bootstrap in place of one being provided. Stopping the daemon also exits Lokinet. If you simply exit Lokinet the daemon is left running in the background. So in summary if necessary generate the .ini and bootstrap then you are able to connect to lokinet and the daemon will be started.
Enter a valid bootstrap url below and apply to overwrite the current bootstrap:
' , PHP_EOL; } else { echo '' , PHP_EOL; } if ($lokinetstatus[0] == 0) { echo '' , PHP_EOL; } else { echo '' , PHP_EOL; } $filename = '/usr/local/bin/lokinet.ini'; if (file_exists($filename)) { echo '' , PHP_EOL; } else { echo '' , PHP_EOL; } ?>

Lokient Daemon

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; } } elseif (isset($_POST['StartDaemon'])) { ?>
Starting Lokinet background daemon process.
$output";*/ $output = shell_exec('sudo /home/pi/loki-network/lokilaunch.sh start'); echo "
$output
"; /*$output = shell_exec('sudo /etc/init.d/dnsmasq start'); echo "
$output
";*/ } elseif (isset($_POST['StopDaemon'])) { ?>
Exiting Lokinet.
$output"; ?>
Stopping Lokinet background daemon process.
$output"; } elseif (isset($_POST['UseLokinet'])) { ?>
Connecting to Lokinet.
$output"; if ($lokinetstatus[0] == 0){ $output = shell_exec('sudo /home/pi/loki-network/lokilaunch.sh start'); echo "
$output
"; } $output = shell_exec('sudo /home/pi/loki-network/lokilaunch.sh connect'); echo "
$output
"; $output = shell_exec('sudo /etc/init.d/dnsmasq start'); # sleep(5); # $output = shell_exec('sudo dnsmasq --interface=wlan0 --bind-interfaces --dhcp-range=10.3.141.0,10.3.141.24,12h --conf-file=/etc/resolv.conf'); echo "
$output
"; } elseif (isset($_POST['ExitLokinet'])) { ?>
Exiting Lokinet.
$output"; } elseif (isset($_POST['GenerateLokinet'])) { ?>
Generating Lokinet Configuration
$output"; } elseif (isset($_POST['ReGenerateLokinet'])) { ?>
Regenerating Lokinet Configuration
$output"; } elseif (isset($_POST['ApplyLokinetSettings'])) { ?>
Exiting Lokinet.
$output"; ?>
Stopping Lokinet background daemon process.
$output"; $bootstrap = $_POST['lokinetbootstrap']; ?>
Applying Bootstrap
$output"; } } ?>