$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; } } //Function to get string between used for Mobile.sh function get_string_between($string, $start, $end) { $string = " " . $string; $ini = strpos($string, $start); if ($ini == 0) { return ""; } $ini += strlen($start); $len = strpos($string, $end, $ini) - $ini; return substr($string, $ini, $len); } /** * * 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 = []; 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 = []; 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); } } /** * * */ /*LOKINET FUNCTIONS ADDED HERE*/ function DisplayLokinetConfig() { exec("pidof lokinet | wc -l", $lokinetstatus); if ($lokinetstatus[0] != 0) { $exitstatus = exec("lokinet-vpn --status"); } else { $exitstatus = "no exits"; } $rulestate = exec( "ip rule show default | grep lokinet | awk {'print $5'}", $output ); $lokiversion = exec("dpkg -s lokinet | grep '^Version:'", $output); ?>
Configure Lokinet

Enter Exit Node Data to activate:
'; echo $listedexits; } ?>
', PHP_EOL; } else { echo '', PHP_EOL; } if ($lokinetstatus[0] == 0) { echo '', PHP_EOL; } else { echo '', PHP_EOL; } ?>
Independent LabyrinthAP developer TechnicalTumbleweed's OXEN wallet address:"; ?>
Enter mobile provider apn:

', PHP_EOL; ?>
Independent LabyrinthAP developer TechnicalTumbleweed's OXEN wallet address:"; ?>
Enter .loki Address:

', PHP_EOL; ?>
Independent LabyrinthAP developer TechnicalTumbleweed's OXEN wallet address:"; ?>
$output"; ?>', PHP_EOL; echo "\n"; ?>
$output"; ?>', PHP_EOL; echo "\n"; ?>
Reboot required to start mobile. Reboot now?"; ?>', PHP_EOL; echo '', PHP_EOL; echo "\n"; ?>