rebase from live enviornment
This commit is contained in:
110
wp/plugins/wordfence/lib/wfIpLocator.php
Normal file
110
wp/plugins/wordfence/lib/wfIpLocator.php
Normal file
@@ -0,0 +1,110 @@
|
||||
<?php
|
||||
|
||||
require_once __DIR__ . '/../vendor/autoload.php';
|
||||
|
||||
require_once __DIR__ . '/wfIpLocation.php';
|
||||
|
||||
use Wordfence\MmdbReader\Database;
|
||||
use Wordfence\MmdbReader\Exception\MmdbThrowable;
|
||||
|
||||
class wfIpLocator {
|
||||
|
||||
const SOURCE_BUNDLED = 0;
|
||||
const SOURCE_WFLOGS = 1;
|
||||
|
||||
const DATABASE_FILE_NAME = 'GeoLite2-Country.mmdb';
|
||||
|
||||
private static $instances = array();
|
||||
|
||||
private $database;
|
||||
private $preferred;
|
||||
|
||||
private function __construct($database, $preferred) {
|
||||
$this->database = $database;
|
||||
$this->preferred = $preferred;
|
||||
}
|
||||
|
||||
public function isPreferred() {
|
||||
return $this->preferred;
|
||||
}
|
||||
|
||||
private static function logError($message) {
|
||||
if (class_exists('wfUtils'))
|
||||
wfUtils::check_and_log_last_error('ip_locator', 'IP Location Error:', $message, 0);
|
||||
}
|
||||
|
||||
public function locate($ip) {
|
||||
if ($this->database !== null) {
|
||||
try {
|
||||
$record = $this->database->search($ip);
|
||||
if ($record !== null)
|
||||
return new wfIpLocation($record);
|
||||
}
|
||||
catch (MmdbThrowable $t) {
|
||||
self::logError('Failed to locate IP address: ' . $t->getMessage());
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public function getCountryCode($ip, $default = '') {
|
||||
$record = $this->locate($ip);
|
||||
if ($record !== null)
|
||||
return $record->getCountryCode();
|
||||
return $default;
|
||||
}
|
||||
|
||||
public function getDatabaseVersion() {
|
||||
if ($this->database !== null) {
|
||||
try {
|
||||
return $this->database->getMetadata()->getBuildEpoch();
|
||||
}
|
||||
catch (MmdbThrowable $t) {
|
||||
self::logError('Failed to retrieve database version: ' . $t->getMessage());
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private static function getDatabaseDirectory($source) {
|
||||
switch ($source) {
|
||||
case self::SOURCE_BUNDLED:
|
||||
return WFWAF_LOG_PATH;
|
||||
case self::SOURCE_BUNDLED:
|
||||
default:
|
||||
return __DIR__;
|
||||
}
|
||||
}
|
||||
|
||||
private static function initializeDatabase($preferredSource, &$isPreferred) {
|
||||
$sources = array();
|
||||
if ($preferredSource !== self::SOURCE_BUNDLED)
|
||||
$sources[] = $preferredSource;
|
||||
$sources[] = self::SOURCE_BUNDLED;
|
||||
$isPreferred = true;
|
||||
foreach ($sources as $source) {
|
||||
$directory = self::getDatabaseDirectory($source);
|
||||
try {
|
||||
$path = $directory . '/' . self::DATABASE_FILE_NAME;
|
||||
if (file_exists($path)) //Preemptive check to prevent warnings
|
||||
return Database::open($path);
|
||||
}
|
||||
catch (MmdbThrowable $t) {
|
||||
self::logError('Failed to initialize IP location database: ' . $t->getMessage());
|
||||
}
|
||||
$preferred = false;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static function getInstance($preferredSource = null) {
|
||||
if ($preferredSource === null)
|
||||
$preferredSource = self::SOURCE_WFLOGS;
|
||||
if (!array_key_exists($preferredSource, self::$instances)) {
|
||||
$database = self::initializeDatabase($preferredSource, $isPreferred);
|
||||
self::$instances[$preferredSource] = new wfIpLocator($database, $isPreferred);
|
||||
}
|
||||
return self::$instances[$preferredSource];
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user