mirror of
				https://github.com/Icinga/icingaweb2.git
				synced 2025-11-03 20:54:27 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			87 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
/* Icinga Web 2 | (c) 2021 Icinga GmbH | GPLv2+ */
 | 
						|
 | 
						|
namespace Icinga\Web;
 | 
						|
 | 
						|
/**
 | 
						|
 * Class UserAgent
 | 
						|
 *
 | 
						|
 * This class helps to get user agent information like OS type and browser name
 | 
						|
 *
 | 
						|
 * @package Icinga\Web
 | 
						|
 */
 | 
						|
class UserAgent
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * $_SERVER['HTTP_USER_AGENT'] output string
 | 
						|
     *
 | 
						|
     * @var string|null
 | 
						|
     */
 | 
						|
    private $agent;
 | 
						|
 | 
						|
    public function __construct($agent = null)
 | 
						|
    {
 | 
						|
        $this->agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : null;
 | 
						|
 | 
						|
        if ($agent) {
 | 
						|
            $this->agent = $agent->http_user_agent;
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Return $_SERVER['HTTP_USER_AGENT'] output string of given or current device
 | 
						|
     *
 | 
						|
     * @return string
 | 
						|
     */
 | 
						|
    public function getAgent()
 | 
						|
    {
 | 
						|
        return $this->agent;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Get Browser name
 | 
						|
     *
 | 
						|
     * @return string Browser name or unknown if not found
 | 
						|
     */
 | 
						|
    public function getBrowser()
 | 
						|
    {
 | 
						|
        // key => regex value
 | 
						|
        $browsers = [
 | 
						|
            "Internet Explorer"    => "/MSIE(.*)/i",
 | 
						|
            "Seamonkey"            => "/Seamonkey(.*)/i",
 | 
						|
            "MS Edge"              => "/Edg(.*)/i",
 | 
						|
            "Opera"                => "/Opera(.*)/i",
 | 
						|
            "Opera Browser"        => "/OPR(.*)/i",
 | 
						|
            "Chromium"             => "/Chromium(.*)/i",
 | 
						|
            "Firefox"              => "/Firefox(.*)/i",
 | 
						|
            "Google Chrome"        => "/Chrome(.*)/i",
 | 
						|
            "Safari"               => "/Safari(.*)/i"
 | 
						|
        ];
 | 
						|
        //TODO find a way to return also the version of the browser
 | 
						|
        foreach ($browsers as $browser => $regex) {
 | 
						|
            if (preg_match($regex, $this->agent)) {
 | 
						|
                return $browser;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        return 'unknown';
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Get Operating system information
 | 
						|
     *
 | 
						|
     * @return string os information
 | 
						|
     */
 | 
						|
    public function getOs()
 | 
						|
    {
 | 
						|
        // get string before the first appearance of ')'
 | 
						|
        $device = strstr($this->agent, ')', true);
 | 
						|
        if (! $device) {
 | 
						|
            return 'unknown';
 | 
						|
        }
 | 
						|
 | 
						|
        // return string after the first appearance of '('
 | 
						|
        return  substr($device, strpos($device, '(') + 1);
 | 
						|
    }
 | 
						|
}
 |