$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 green. The .ini file must be generated prior to connecting to Lokinet by pressing the button which will automatically write the required .ini file. Similarly the absense of a valid bootstrap will be indicated by a green "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. To summarize, if necessary generate the .ini and bootstrap Lokinet then you are able to connect to Lokinet by starting the daemon and letting the network establish itself.
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 $exitstatus; $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(); } ?>