Edit File by line

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93

Warning: Undefined array key "page_file_edit_line" in /home/sportsfever/public_html/filemanger/edit_text_line.php on line 32
/home/sportsfe.../httpdocs/clone/wp-conte.../plugins/wordfenc.../lib
File: wfUtils.php
}
[500] Fix | Delete
return self::hasIPv6Support() ? @inet_ntop($ip) : self::_inet_ntop($ip);
[501] Fix | Delete
}
[502] Fix | Delete
[503] Fix | Delete
/**
[504] Fix | Delete
* Return the packed binary string of an IPv4 or IPv6 address.
[505] Fix | Delete
*
[506] Fix | Delete
* @param string $ip
[507] Fix | Delete
* @return string
[508] Fix | Delete
*/
[509] Fix | Delete
public static function inet_pton($ip) {
[510] Fix | Delete
// convert the 4 char IPv4 to IPv6 mapped version.
[511] Fix | Delete
$pton = str_pad(self::hasIPv6Support() ? @inet_pton($ip) : self::_inet_pton($ip), 16,
[512] Fix | Delete
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00", STR_PAD_LEFT);
[513] Fix | Delete
return $pton;
[514] Fix | Delete
}
[515] Fix | Delete
[516] Fix | Delete
/**
[517] Fix | Delete
* Added compatibility for hosts that do not have inet_pton.
[518] Fix | Delete
*
[519] Fix | Delete
* @param $ip
[520] Fix | Delete
* @return bool|string
[521] Fix | Delete
*/
[522] Fix | Delete
public static function _inet_pton($ip) {
[523] Fix | Delete
// IPv4
[524] Fix | Delete
if (preg_match('/^(?:\d{1,3}(?:\.|$)){4}/', $ip)) {
[525] Fix | Delete
$octets = explode('.', $ip);
[526] Fix | Delete
$bin = chr($octets[0]) . chr($octets[1]) . chr($octets[2]) . chr($octets[3]);
[527] Fix | Delete
return $bin;
[528] Fix | Delete
}
[529] Fix | Delete
[530] Fix | Delete
// IPv6
[531] Fix | Delete
if (preg_match('/^((?:[\da-f]{1,4}(?::|)){0,8})(::)?((?:[\da-f]{1,4}(?::|)){0,8})$/i', $ip)) {
[532] Fix | Delete
if ($ip === '::') {
[533] Fix | Delete
return "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
[534] Fix | Delete
}
[535] Fix | Delete
$colon_count = substr_count($ip, ':');
[536] Fix | Delete
$dbl_colon_pos = strpos($ip, '::');
[537] Fix | Delete
if ($dbl_colon_pos !== false) {
[538] Fix | Delete
$ip = str_replace('::', str_repeat(':0000',
[539] Fix | Delete
(($dbl_colon_pos === 0 || $dbl_colon_pos === strlen($ip) - 2) ? 9 : 8) - $colon_count) . ':', $ip);
[540] Fix | Delete
$ip = trim($ip, ':');
[541] Fix | Delete
}
[542] Fix | Delete
[543] Fix | Delete
$ip_groups = explode(':', $ip);
[544] Fix | Delete
$ipv6_bin = '';
[545] Fix | Delete
foreach ($ip_groups as $ip_group) {
[546] Fix | Delete
$ipv6_bin .= pack('H*', str_pad($ip_group, 4, '0', STR_PAD_LEFT));
[547] Fix | Delete
}
[548] Fix | Delete
[549] Fix | Delete
return strlen($ipv6_bin) === 16 ? $ipv6_bin : false;
[550] Fix | Delete
}
[551] Fix | Delete
[552] Fix | Delete
// IPv4 mapped IPv6
[553] Fix | Delete
if (preg_match('/^(?:\:(?:\:0{1,4}){0,4}\:|(?:0{1,4}\:){5})ffff\:(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/i', $ip, $matches)) {
[554] Fix | Delete
$octets = explode('.', $matches[1]);
[555] Fix | Delete
return "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff" . chr($octets[0]) . chr($octets[1]) . chr($octets[2]) . chr($octets[3]);
[556] Fix | Delete
}
[557] Fix | Delete
[558] Fix | Delete
return false;
[559] Fix | Delete
}
[560] Fix | Delete
[561] Fix | Delete
/**
[562] Fix | Delete
* Added compatibility for hosts that do not have inet_ntop.
[563] Fix | Delete
*
[564] Fix | Delete
* @param $ip
[565] Fix | Delete
* @return bool|string
[566] Fix | Delete
*/
[567] Fix | Delete
public static function _inet_ntop($ip) {
[568] Fix | Delete
// IPv4
[569] Fix | Delete
if (strlen($ip) === 4) {
[570] Fix | Delete
return ord($ip[0]) . '.' . ord($ip[1]) . '.' . ord($ip[2]) . '.' . ord($ip[3]);
[571] Fix | Delete
}
[572] Fix | Delete
[573] Fix | Delete
// IPv6
[574] Fix | Delete
if (strlen($ip) === 16) {
[575] Fix | Delete
[576] Fix | Delete
// IPv4 mapped IPv6
[577] Fix | Delete
if (substr($ip, 0, 12) == "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff") {
[578] Fix | Delete
return "::ffff:" . ord($ip[12]) . '.' . ord($ip[13]) . '.' . ord($ip[14]) . '.' . ord($ip[15]);
[579] Fix | Delete
}
[580] Fix | Delete
[581] Fix | Delete
$hex = bin2hex($ip);
[582] Fix | Delete
$groups = str_split($hex, 4);
[583] Fix | Delete
$in_collapse = false;
[584] Fix | Delete
$done_collapse = false;
[585] Fix | Delete
foreach ($groups as $index => $group) {
[586] Fix | Delete
if ($group == '0000' && !$done_collapse) {
[587] Fix | Delete
if ($in_collapse) {
[588] Fix | Delete
$groups[$index] = '';
[589] Fix | Delete
continue;
[590] Fix | Delete
}
[591] Fix | Delete
$groups[$index] = ':';
[592] Fix | Delete
$in_collapse = true;
[593] Fix | Delete
continue;
[594] Fix | Delete
}
[595] Fix | Delete
if ($in_collapse) {
[596] Fix | Delete
$done_collapse = true;
[597] Fix | Delete
}
[598] Fix | Delete
$groups[$index] = ltrim($groups[$index], '0');
[599] Fix | Delete
if (strlen($groups[$index]) === 0) {
[600] Fix | Delete
$groups[$index] = '0';
[601] Fix | Delete
}
[602] Fix | Delete
}
[603] Fix | Delete
$ip = join(':', array_filter($groups, 'strlen'));
[604] Fix | Delete
$ip = str_replace(':::', '::', $ip);
[605] Fix | Delete
return $ip == ':' ? '::' : $ip;
[606] Fix | Delete
}
[607] Fix | Delete
[608] Fix | Delete
return false;
[609] Fix | Delete
}
[610] Fix | Delete
[611] Fix | Delete
/**
[612] Fix | Delete
* Verify PHP was compiled with IPv6 support.
[613] Fix | Delete
*
[614] Fix | Delete
* Some hosts appear to not have inet_ntop, and others appear to have inet_ntop but are unable to process IPv6 addresses.
[615] Fix | Delete
*
[616] Fix | Delete
* @return bool
[617] Fix | Delete
*/
[618] Fix | Delete
public static function hasIPv6Support() {
[619] Fix | Delete
return defined('AF_INET6');
[620] Fix | Delete
}
[621] Fix | Delete
[622] Fix | Delete
public static function hasLoginCookie(){
[623] Fix | Delete
if(isset($_COOKIE)){
[624] Fix | Delete
if(is_array($_COOKIE)){
[625] Fix | Delete
foreach($_COOKIE as $key => $val){
[626] Fix | Delete
if(strpos($key, 'wordpress_logged_in') === 0){
[627] Fix | Delete
return true;
[628] Fix | Delete
}
[629] Fix | Delete
}
[630] Fix | Delete
}
[631] Fix | Delete
}
[632] Fix | Delete
return false;
[633] Fix | Delete
}
[634] Fix | Delete
public static function getBaseURL(){
[635] Fix | Delete
return plugins_url('', WORDFENCE_FCPATH) . '/';
[636] Fix | Delete
}
[637] Fix | Delete
public static function getPluginBaseDir(){
[638] Fix | Delete
if(function_exists('wp_normalize_path')){ //Older WP versions don't have this func and we had many complaints before this check.
[639] Fix | Delete
if(defined('WP_PLUGIN_DIR')) {
[640] Fix | Delete
return wp_normalize_path(WP_PLUGIN_DIR . '/');
[641] Fix | Delete
}
[642] Fix | Delete
return wp_normalize_path(WP_CONTENT_DIR . '/plugins/');
[643] Fix | Delete
} else {
[644] Fix | Delete
if(defined('WP_PLUGIN_DIR')) {
[645] Fix | Delete
return WP_PLUGIN_DIR . '/';
[646] Fix | Delete
}
[647] Fix | Delete
return WP_CONTENT_DIR . '/plugins/';
[648] Fix | Delete
}
[649] Fix | Delete
}
[650] Fix | Delete
public static function makeRandomIP(){
[651] Fix | Delete
return rand(11,230) . '.' . rand(0,255) . '.' . rand(0,255) . '.' . rand(0,255);
[652] Fix | Delete
}
[653] Fix | Delete
[654] Fix | Delete
/**
[655] Fix | Delete
* Converts a truthy value to a boolean, checking in this order:
[656] Fix | Delete
* - already a boolean
[657] Fix | Delete
* - numeric (0 => false, otherwise true)
[658] Fix | Delete
* - 'false', 'f', 'no', 'n', or 'off' => false
[659] Fix | Delete
* - 'true', 't', 'yes', 'y', or 'on' => true
[660] Fix | Delete
* - empty value => false, otherwise true
[661] Fix | Delete
*
[662] Fix | Delete
* @param $value
[663] Fix | Delete
* @return bool
[664] Fix | Delete
*/
[665] Fix | Delete
public static function truthyToBoolean($value) {
[666] Fix | Delete
if ($value === true || $value === false) {
[667] Fix | Delete
return $value;
[668] Fix | Delete
}
[669] Fix | Delete
[670] Fix | Delete
if (is_numeric($value)) {
[671] Fix | Delete
return !!$value;
[672] Fix | Delete
}
[673] Fix | Delete
[674] Fix | Delete
if (preg_match('/^(?:f(?:alse)?|no?|off)$/i', $value)) {
[675] Fix | Delete
return false;
[676] Fix | Delete
}
[677] Fix | Delete
else if (preg_match('/^(?:t(?:rue)?|y(?:es)?|on)$/i', $value)) {
[678] Fix | Delete
return true;
[679] Fix | Delete
}
[680] Fix | Delete
[681] Fix | Delete
return !empty($value);
[682] Fix | Delete
}
[683] Fix | Delete
[684] Fix | Delete
/**
[685] Fix | Delete
* Converts a truthy value to 1 or 0.
[686] Fix | Delete
*
[687] Fix | Delete
* @see wfUtils::truthyToBoolean
[688] Fix | Delete
*
[689] Fix | Delete
* @param $value
[690] Fix | Delete
* @return int
[691] Fix | Delete
*/
[692] Fix | Delete
public static function truthyToInt($value) {
[693] Fix | Delete
return self::truthyToBoolean($value) ? 1 : 0;
[694] Fix | Delete
}
[695] Fix | Delete
[696] Fix | Delete
/**
[697] Fix | Delete
* Returns the whitelist presets, which first grabs the bundled list and then merges the dynamic list into it.
[698] Fix | Delete
*
[699] Fix | Delete
* @return array
[700] Fix | Delete
*/
[701] Fix | Delete
public static function whitelistPresets() {
[702] Fix | Delete
static $_cachedPresets = null;
[703] Fix | Delete
if ($_cachedPresets === null) {
[704] Fix | Delete
include(dirname(__FILE__) . '/wfIPWhitelist.php'); /** @var array $wfIPWhitelist */
[705] Fix | Delete
$currentPresets = wfConfig::getJSON('whitelistPresets', array());
[706] Fix | Delete
if (is_array($currentPresets)) {
[707] Fix | Delete
$_cachedPresets = array_merge($wfIPWhitelist, $currentPresets);
[708] Fix | Delete
}
[709] Fix | Delete
else {
[710] Fix | Delete
$_cachedPresets = $wfIPWhitelist;
[711] Fix | Delete
}
[712] Fix | Delete
}
[713] Fix | Delete
return $_cachedPresets;
[714] Fix | Delete
}
[715] Fix | Delete
[716] Fix | Delete
/**
[717] Fix | Delete
* Returns an array containing all whitelisted service IPs/ranges. The returned array is grouped by service
[718] Fix | Delete
* tag: array('service1' => array('range1', 'range2', range3', ...), ...)
[719] Fix | Delete
*
[720] Fix | Delete
* @return array
[721] Fix | Delete
*/
[722] Fix | Delete
public static function whitelistedServiceIPs() {
[723] Fix | Delete
$result = array();
[724] Fix | Delete
$whitelistPresets = self::whitelistPresets();
[725] Fix | Delete
$whitelistedServices = wfConfig::getJSON('whitelistedServices', array());
[726] Fix | Delete
foreach ($whitelistPresets as $tag => $preset) {
[727] Fix | Delete
if (!isset($preset['n'])) { //Just an array of IPs/ranges
[728] Fix | Delete
$result[$tag] = $preset;
[729] Fix | Delete
continue;
[730] Fix | Delete
}
[731] Fix | Delete
[732] Fix | Delete
if ((isset($preset['h']) && $preset['h']) || (isset($preset['f']) && $preset['f'])) { //Forced
[733] Fix | Delete
$result[$tag] = $preset['r'];
[734] Fix | Delete
continue;
[735] Fix | Delete
}
[736] Fix | Delete
[737] Fix | Delete
if ((!isset($whitelistedServices[$tag]) && isset($preset['d']) && $preset['d']) || (isset($whitelistedServices[$tag]) && $whitelistedServices[$tag])) {
[738] Fix | Delete
$result[$tag] = $preset['r'];
[739] Fix | Delete
}
[740] Fix | Delete
}
[741] Fix | Delete
return $result;
[742] Fix | Delete
}
[743] Fix | Delete
[744] Fix | Delete
/**
[745] Fix | Delete
* Get the list of whitelisted IPs and networks, which is a combination of preset IPs/ranges and user-entered
[746] Fix | Delete
* IPs/ranges.
[747] Fix | Delete
*
[748] Fix | Delete
* @param string $filter Group name to filter whitelist by
[749] Fix | Delete
* @return array
[750] Fix | Delete
*/
[751] Fix | Delete
public static function getIPWhitelist($filter = null) {
[752] Fix | Delete
static $wfIPWhitelist;
[753] Fix | Delete
[754] Fix | Delete
if (!isset($wfIPWhitelist)) {
[755] Fix | Delete
$wfIPWhitelist = self::whitelistedServiceIPs();
[756] Fix | Delete
[757] Fix | Delete
//Append user ranges
[758] Fix | Delete
$wfIPWhitelist['user'] = array();
[759] Fix | Delete
foreach (array_filter(explode(',', wfConfig::get('whitelisted'))) as $ip) {
[760] Fix | Delete
$wfIPWhitelist['user'][] = new wfUserIPRange($ip);
[761] Fix | Delete
}
[762] Fix | Delete
}
[763] Fix | Delete
[764] Fix | Delete
$whitelist = array();
[765] Fix | Delete
foreach ($wfIPWhitelist as $group => $values) {
[766] Fix | Delete
if ($filter === null || $group === $filter) {
[767] Fix | Delete
$whitelist = array_merge($whitelist, $values);
[768] Fix | Delete
}
[769] Fix | Delete
}
[770] Fix | Delete
[771] Fix | Delete
return $whitelist;
[772] Fix | Delete
}
[773] Fix | Delete
[774] Fix | Delete
/**
[775] Fix | Delete
* @param string $addr Should be in dot or colon notation (127.0.0.1 or ::1)
[776] Fix | Delete
* @return bool
[777] Fix | Delete
*/
[778] Fix | Delete
public static function isPrivateAddress($addr) {
[779] Fix | Delete
// Run this through the preset list for IPv4 addresses.
[780] Fix | Delete
if (filter_var($addr, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) !== false) {
[781] Fix | Delete
foreach (self::getIPWhitelist('private') as $a) {
[782] Fix | Delete
if (self::subnetContainsIP($a, $addr)) {
[783] Fix | Delete
return true;
[784] Fix | Delete
}
[785] Fix | Delete
}
[786] Fix | Delete
}
[787] Fix | Delete
[788] Fix | Delete
return filter_var($addr, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_IPV6) !== false
[789] Fix | Delete
&& filter_var($addr, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_IPV6 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) === false;
[790] Fix | Delete
}
[791] Fix | Delete
[792] Fix | Delete
/**
[793] Fix | Delete
* Expects an array of items. The items are either IP's or IP's separated by comma, space or tab. Or an array of IP's.
[794] Fix | Delete
* We then examine all IP's looking for a public IP and storing private IP's in an array. If we find no public IPs we return the first private addr we found.
[795] Fix | Delete
*
[796] Fix | Delete
* @param array $arr
[797] Fix | Delete
* @return bool|mixed
[798] Fix | Delete
*/
[799] Fix | Delete
private static function getCleanIP($arr){
[800] Fix | Delete
$privates = array(); //Store private addrs until end as last resort.
[801] Fix | Delete
for($i = 0; $i < count($arr); $i++){
[802] Fix | Delete
$item = $arr[$i];
[803] Fix | Delete
if(is_array($item)){
[804] Fix | Delete
foreach($item as $j){
[805] Fix | Delete
// try verifying the IP is valid before stripping the port off
[806] Fix | Delete
if (!self::isValidIP($j)) {
[807] Fix | Delete
$j = preg_replace('/:\d+$/', '', $j); //Strip off port
[808] Fix | Delete
}
[809] Fix | Delete
if (self::isValidIP($j)) {
[810] Fix | Delete
if (self::isPrivateAddress($j)) {
[811] Fix | Delete
$privates[] = $j;
[812] Fix | Delete
} else {
[813] Fix | Delete
return $j;
[814] Fix | Delete
}
[815] Fix | Delete
}
[816] Fix | Delete
}
[817] Fix | Delete
continue; //This was an array so we can skip to the next item
[818] Fix | Delete
}
[819] Fix | Delete
$skipToNext = false;
[820] Fix | Delete
foreach(array(',', ' ', "\t") as $char){
[821] Fix | Delete
if(strpos($item, $char) !== false){
[822] Fix | Delete
$sp = explode($char, $item);
[823] Fix | Delete
$sp = array_reverse($sp);
[824] Fix | Delete
foreach($sp as $j){
[825] Fix | Delete
$j = trim($j);
[826] Fix | Delete
if (!self::isValidIP($j)) {
[827] Fix | Delete
$j = preg_replace('/:\d+$/', '', $j); //Strip off port
[828] Fix | Delete
}
[829] Fix | Delete
if(self::isValidIP($j)){
[830] Fix | Delete
if(self::isPrivateAddress($j)){
[831] Fix | Delete
$privates[] = $j;
[832] Fix | Delete
} else {
[833] Fix | Delete
return $j;
[834] Fix | Delete
}
[835] Fix | Delete
}
[836] Fix | Delete
}
[837] Fix | Delete
$skipToNext = true;
[838] Fix | Delete
break;
[839] Fix | Delete
}
[840] Fix | Delete
}
[841] Fix | Delete
if($skipToNext){ continue; } //Skip to next item because this one had a comma, space or tab so was delimited and we didn't find anything.
[842] Fix | Delete
[843] Fix | Delete
if (!self::isValidIP($item)) {
[844] Fix | Delete
$item = preg_replace('/:\d+$/', '', $item); //Strip off port
[845] Fix | Delete
}
[846] Fix | Delete
if(self::isValidIP($item)){
[847] Fix | Delete
if(self::isPrivateAddress($item)){
[848] Fix | Delete
$privates[] = $item;
[849] Fix | Delete
} else {
[850] Fix | Delete
return $item;
[851] Fix | Delete
}
[852] Fix | Delete
}
[853] Fix | Delete
}
[854] Fix | Delete
if(sizeof($privates) > 0){
[855] Fix | Delete
return $privates[0]; //Return the first private we found so that we respect the order the IP's were passed to this function.
[856] Fix | Delete
} else {
[857] Fix | Delete
return false;
[858] Fix | Delete
}
[859] Fix | Delete
}
[860] Fix | Delete
[861] Fix | Delete
/**
[862] Fix | Delete
* Expects an array of items. The items are either IP's or IP's separated by comma, space or tab. Or an array of IP's.
[863] Fix | Delete
* We then examine all IP's looking for a public IP and storing private IP's in an array. If we find no public IPs we return the first private addr we found.
[864] Fix | Delete
*
[865] Fix | Delete
* @param array $arr
[866] Fix | Delete
* @return bool|mixed
[867] Fix | Delete
*/
[868] Fix | Delete
private static function getCleanIPAndServerVar($arr, $trustedProxies = null) {
[869] Fix | Delete
$privates = array(); //Store private addrs until end as last resort.
[870] Fix | Delete
for($i = 0; $i < count($arr); $i++){
[871] Fix | Delete
list($item, $var) = $arr[$i];
[872] Fix | Delete
if(is_array($item)){
[873] Fix | Delete
foreach($item as $j){
[874] Fix | Delete
// try verifying the IP is valid before stripping the port off
[875] Fix | Delete
if (!self::isValidIP($j)) {
[876] Fix | Delete
$j = preg_replace('/:\d+$/', '', $j); //Strip off port
[877] Fix | Delete
}
[878] Fix | Delete
if (self::isValidIP($j)) {
[879] Fix | Delete
if (self::isIPv6MappedIPv4($j)) {
[880] Fix | Delete
$j = self::inet_ntop(self::inet_pton($j));
[881] Fix | Delete
}
[882] Fix | Delete
[883] Fix | Delete
if (self::isPrivateAddress($j)) {
[884] Fix | Delete
$privates[] = array($j, $var);
[885] Fix | Delete
} else {
[886] Fix | Delete
return array($j, $var);
[887] Fix | Delete
}
[888] Fix | Delete
}
[889] Fix | Delete
}
[890] Fix | Delete
continue; //This was an array so we can skip to the next item
[891] Fix | Delete
}
[892] Fix | Delete
$skipToNext = false;
[893] Fix | Delete
if ($trustedProxies === null) {
[894] Fix | Delete
$trustedProxies = self::unifiedTrustedProxies();
[895] Fix | Delete
}
[896] Fix | Delete
foreach(array(',', ' ', "\t") as $char){
[897] Fix | Delete
if(strpos($item, $char) !== false){
[898] Fix | Delete
$sp = explode($char, $item);
[899] Fix | Delete
$sp = array_reverse($sp);
[900] Fix | Delete
foreach($sp as $index => $j){
[901] Fix | Delete
$j = trim($j);
[902] Fix | Delete
if (!self::isValidIP($j)) {
[903] Fix | Delete
$j = preg_replace('/:\d+$/', '', $j); //Strip off port
[904] Fix | Delete
}
[905] Fix | Delete
if(self::isValidIP($j)){
[906] Fix | Delete
if (self::isIPv6MappedIPv4($j)) {
[907] Fix | Delete
$j = self::inet_ntop(self::inet_pton($j));
[908] Fix | Delete
}
[909] Fix | Delete
[910] Fix | Delete
foreach ($trustedProxies as $proxy) {
[911] Fix | Delete
if (!empty($proxy)) {
[912] Fix | Delete
if (self::subnetContainsIP($proxy, $j) && $index < count($sp) - 1) {
[913] Fix | Delete
continue 2;
[914] Fix | Delete
}
[915] Fix | Delete
}
[916] Fix | Delete
}
[917] Fix | Delete
[918] Fix | Delete
if(self::isPrivateAddress($j)){
[919] Fix | Delete
$privates[] = array($j, $var);
[920] Fix | Delete
} else {
[921] Fix | Delete
return array($j, $var);
[922] Fix | Delete
}
[923] Fix | Delete
}
[924] Fix | Delete
}
[925] Fix | Delete
$skipToNext = true;
[926] Fix | Delete
break;
[927] Fix | Delete
}
[928] Fix | Delete
}
[929] Fix | Delete
if($skipToNext){ continue; } //Skip to next item because this one had a comma, space or tab so was delimited and we didn't find anything.
[930] Fix | Delete
[931] Fix | Delete
if (!self::isValidIP($item)) {
[932] Fix | Delete
$item = preg_replace('/:\d+$/', '', $item); //Strip off port
[933] Fix | Delete
}
[934] Fix | Delete
if(self::isValidIP($item)){
[935] Fix | Delete
if (self::isIPv6MappedIPv4($item)) {
[936] Fix | Delete
$item = self::inet_ntop(self::inet_pton($item));
[937] Fix | Delete
}
[938] Fix | Delete
[939] Fix | Delete
if(self::isPrivateAddress($item)){
[940] Fix | Delete
$privates[] = array($item, $var);
[941] Fix | Delete
} else {
[942] Fix | Delete
return array($item, $var);
[943] Fix | Delete
}
[944] Fix | Delete
}
[945] Fix | Delete
}
[946] Fix | Delete
if(sizeof($privates) > 0){
[947] Fix | Delete
return $privates[0]; //Return the first private we found so that we respect the order the IP's were passed to this function.
[948] Fix | Delete
} else {
[949] Fix | Delete
return false;
[950] Fix | Delete
}
[951] Fix | Delete
}
[952] Fix | Delete
[953] Fix | Delete
/**
[954] Fix | Delete
* Returns an array of all trusted proxies, combining both the user-entered ones and those from the selected preset.
[955] Fix | Delete
*
[956] Fix | Delete
* @return string[]
[957] Fix | Delete
*/
[958] Fix | Delete
public static function unifiedTrustedProxies() {
[959] Fix | Delete
$trustedProxies = explode("\n", wfConfig::get('howGetIPs_trusted_proxies', ''));
[960] Fix | Delete
[961] Fix | Delete
$preset = wfConfig::get('howGetIPs_trusted_proxy_preset');
[962] Fix | Delete
$presets = wfConfig::getJSON('ipResolutionList', array());
[963] Fix | Delete
if (is_array($presets) && isset($presets[$preset])) {
[964] Fix | Delete
$testIPs = array_merge($presets[$preset]['ipv4'], $presets[$preset]['ipv6']);
[965] Fix | Delete
foreach ($testIPs as $val) {
[966] Fix | Delete
if (strlen($val) > 0) {
[967] Fix | Delete
if (wfUtils::isValidIP($val) || wfUtils::isValidCIDRRange($val)) {
[968] Fix | Delete
$trustedProxies[] = $val;
[969] Fix | Delete
}
[970] Fix | Delete
}
[971] Fix | Delete
}
[972] Fix | Delete
}
[973] Fix | Delete
return $trustedProxies;
[974] Fix | Delete
}
[975] Fix | Delete
[976] Fix | Delete
/**
[977] Fix | Delete
* @param string $ip
[978] Fix | Delete
* @return bool
[979] Fix | Delete
*/
[980] Fix | Delete
public static function isIPv6MappedIPv4($ip) {
[981] Fix | Delete
return preg_match('/^(?:\:(?:\:0{1,4}){0,4}\:|(?:0{1,4}\:){5})ffff\:\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/i', $ip) > 0;
[982] Fix | Delete
}
[983] Fix | Delete
[984] Fix | Delete
public static function extractHostname($str){
[985] Fix | Delete
if(preg_match('/https?:\/\/([a-zA-Z0-9\.\-]+)(?:\/|$)/i', $str, $matches)){
[986] Fix | Delete
return strtolower($matches[1]);
[987] Fix | Delete
} else {
[988] Fix | Delete
return false;
[989] Fix | Delete
}
[990] Fix | Delete
}
[991] Fix | Delete
[992] Fix | Delete
/**
[993] Fix | Delete
* Returns the known server IPs, ordered by those as the best match for outgoing requests.
[994] Fix | Delete
*
[995] Fix | Delete
* @param bool $refreshCache
[996] Fix | Delete
* @return string[]
[997] Fix | Delete
*/
[998] Fix | Delete
public static function serverIPs($refreshCache = false) {
[999] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function