<?php
/**
* FILE: Detector.php
*
* @AUTHOR: LTD shalvasoft
* @AUTHOR: Shalva Kvaratskhelia
* PROJECT: Georgia Express
* VERSION: 1.0.0
*/
class Detector{
/**
* @return string
*/
public static function getProtocol(){
if(isset($_SERVER['REQUEST_SCHEME'])) { return $_SERVER['REQUEST_SCHEME'];
}else{
$isSecure = false;
if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') { $isSecure = true;
}
elseif (!empty($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' || !empty($_SERVER['HTTP_X_FORWARDED_SSL']) && $_SERVER['HTTP_X_FORWARDED_SSL'] == 'on') { $isSecure = true;
}
return $isSecure ? 'https' : 'http';
}
}
/**
* @param bool|false $allowProxy
* @return string
*/
public static function getLocalHost($allowProxy = false){
if (true === $allowProxy) {
if (isset($_SERVER['HTTP_X_FORWARDED_HOST']) && !empty($_SERVER['HTTP_X_FORWARDED_HOST'])) { $host = $_SERVER['HTTP_X_FORWARDED_HOST'];
if (strpos($host, ',') !== false) { }
return $host;
}
}
}
if (isset($_SERVER['HTTP_HOST']) && !empty($_SERVER['HTTP_HOST'])) { if (isset($_SERVER['SERVER_PORT'])) { $portStr = ':' . $_SERVER['SERVER_PORT'];
strlen($portStr)) == $portStr) { return substr($_SERVER['HTTP_HOST'], 0, 0-strlen($portStr)); }
}
return $_SERVER['HTTP_HOST'];
}
if (!isset($_SERVER['SERVER_NAME']) || !isset($_SERVER['SERVER_PORT'])) { return '';
}
return $_SERVER['SERVER_NAME'];
}
/**
* @return bool
*/
public static function getHttps() {
$https = null;
if (isset($_SERVER['HTTPS'])) { if ($https == 'on' || $https == '1') {
return true;
}
}
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO'])) { $https = strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']); if ($https == 'https') {
return true;
}
}
if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == '443') { return true;
}
return false;
}
}
PD9waHAKCi8qKgogKiBGSUxFOiBEZXRlY3Rvci5waHAKICoKICogQEFVVEhPUjogTFREIHNoYWx2YXNvZnQKICogQEFVVEhPUjogU2hhbHZhIEt2YXJhdHNraGVsaWEKICogUFJPSkVDVDogR2VvcmdpYSBFeHByZXNzCiAqIFZFUlNJT046IDEuMC4wCiAqLwoKICAgIGNsYXNzIERldGVjdG9yewoKICAgICAgICAvKioKICAgICAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UHJvdG9jb2woKXsKICAgICAgICAgICAgaWYoaXNzZXQoJF9TRVJWRVJbJ1JFUVVFU1RfU0NIRU1FJ10pKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJF9TRVJWRVJbJ1JFUVVFU1RfU0NIRU1FJ107CiAgICAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgJGlzU2VjdXJlID0gZmFsc2U7CiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJF9TRVJWRVJbJ0hUVFBTJ10pICYmICRfU0VSVkVSWydIVFRQUyddID09ICdvbicpIHsKICAgICAgICAgICAgICAgICAgICAkaXNTZWN1cmUgPSB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZWlmICghZW1wdHkoJF9TRVJWRVJbJ0hUVFBfWF9GT1JXQVJERURfUFJPVE8nXSkgJiYgJF9TRVJWRVJbJ0hUVFBfWF9GT1JXQVJERURfUFJPVE8nXSA9PSAnaHR0cHMnIHx8ICFlbXB0eSgkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9TU0wnXSkgJiYgJF9TRVJWRVJbJ0hUVFBfWF9GT1JXQVJERURfU1NMJ10gPT0gJ29uJykgewogICAgICAgICAgICAgICAgICAgICRpc1NlY3VyZSA9IHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gJGlzU2VjdXJlID8gJ2h0dHBzJyA6ICdodHRwJzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogQHBhcmFtIGJvb2x8ZmFsc2UgJGFsbG93UHJveHkKICAgICAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0TG9jYWxIb3N0KCRhbGxvd1Byb3h5ID0gZmFsc2UpewogICAgICAgICAgICBpZiAodHJ1ZSA9PT0gJGFsbG93UHJveHkpIHsKICAgICAgICAgICAgICAgIGlmIChpc3NldCgkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9IT1NUJ10pCiAgICAgICAgICAgICAgICAgICAgJiYgIWVtcHR5KCRfU0VSVkVSWydIVFRQX1hfRk9SV0FSREVEX0hPU1QnXSkpIHsKICAgICAgICAgICAgICAgICAgICAkaG9zdCA9ICRfU0VSVkVSWydIVFRQX1hfRk9SV0FSREVEX0hPU1QnXTsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RycG9zKCRob3N0LCAnLCcpICE9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgICAgICAkaG9zdHMgPSBleHBsb2RlKCcsJywgJGhvc3QpOwogICAgICAgICAgICAgICAgICAgICAgICAkaG9zdCA9IHRyaW0oYXJyYXlfcG9wKCRob3N0cykpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoIWVtcHR5KCRob3N0KSkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGhvc3Q7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChpc3NldCgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pICYmICFlbXB0eSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pKSB7CiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJF9TRVJWRVJbJ1NFUlZFUl9QT1JUJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgJHBvcnRTdHIgPSAnOicgLiAkX1NFUlZFUlsnU0VSVkVSX1BPUlQnXTsKICAgICAgICAgICAgICAgICAgICBpZiAoc3Vic3RyKCRfU0VSVkVSWydIVFRQX0hPU1QnXSwgMCAtIHN0cmxlbigkcG9ydFN0ciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oJHBvcnRTdHIpKSA9PSAkcG9ydFN0cikgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3Vic3RyKCRfU0VSVkVSWydIVFRQX0hPU1QnXSwgMCwgMC1zdHJsZW4oJHBvcnRTdHIpKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gJF9TRVJWRVJbJ0hUVFBfSE9TVCddOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICghaXNzZXQoJF9TRVJWRVJbJ1NFUlZFUl9OQU1FJ10pIHx8ICFpc3NldCgkX1NFUlZFUlsnU0VSVkVSX1BPUlQnXSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gJF9TRVJWRVJbJ1NFUlZFUl9OQU1FJ107CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEh0dHBzKCkgewogICAgICAgICAgICAkaHR0cHMgPSBudWxsOwogICAgICAgICAgICBpZiAoaXNzZXQoJF9TRVJWRVJbJ0hUVFBTJ10pKSB7CiAgICAgICAgICAgICAgICAkaHR0cHMgPSBzdHJ0b2xvd2VyKCRfU0VSVkVSWydIVFRQUyddKTsKICAgICAgICAgICAgICAgIGlmICgkaHR0cHMgPT0gJ29uJyB8fCAkaHR0cHMgPT0gJzEnKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGlzc2V0KCRfU0VSVkVSWydIVFRQX1hfRk9SV0FSREVEX1BST1RPJ10pKSB7CiAgICAgICAgICAgICAgICAkaHR0cHMgPSBzdHJ0b2xvd2VyKCRfU0VSVkVSWydIVFRQX1hfRk9SV0FSREVEX1BST1RPJ10pOwogICAgICAgICAgICAgICAgaWYgKCRodHRwcyA9PSAnaHR0cHMnKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGlzc2V0KCRfU0VSVkVSWydTRVJWRVJfUE9SVCddKSAmJiAkX1NFUlZFUlsnU0VSVkVSX1BPUlQnXSA9PSAnNDQzJykgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgIH0=