ERROR FILE NOT FOUND: " . $config['default_white_page'] . "! \r\n
";
die();
}
if (empty($config['default_offer_page']) || (!strstr($config['default_offer_page'], '://') && !is_file($config['default_offer_page']))) {
echo "ERROR FILE NOT FOUND: " . $config['default_offer_page'] . "! \r\n
";
die();
}
// Fungsi untuk menentukan apakah visitor diperbolehkan
function isVisitorAllowed($config) {
$user_ip = $_SERVER['REMOTE_ADDR'];
$user_agent = $_SERVER['HTTP_USER_AGENT'] ?? '';
// 1. Cek IP Whitelist
if (!empty($config['ip_whitelist'])) {
$whitelist = explode(',', $config['ip_whitelist']);
if (in_array($user_ip, $whitelist)) {
return true;
}
}
// 2. Cek IP Blacklist
if (!empty($config['ip_blacklist'])) {
$blacklist = explode(',', $config['ip_blacklist']);
if (in_array($user_ip, $blacklist)) {
return false;
}
}
// 3. Cek User Agent Blacklist
if (!empty($config['ua_blacklist']) && !empty($user_agent)) {
if (preg_match('/(' . $config['ua_blacklist'] . ')/i', $user_agent)) {
return false;
}
}
// 4. Cek Referrer
if (!$config['without_referrer'] && empty($_SERVER['HTTP_REFERER'])) {
return false;
}
// 5. Cek UTM Parameters
if ($config['allowed_params']) {
// Strict UTM
if (!empty($config['strict_utm']) && empty($_GET[$config['strict_utm']])) {
return false;
}
// Blocked UTM
if (!empty($config['blocked_utm']) && !empty($_GET[$config['blocked_utm']])) {
return false;
}
// Optional UTM
if (!empty($config['opt_utm'])) {
$opt_values = explode('|', $config['opt_utm']);
$found = false;
foreach ($_GET as $value) {
if (in_array($value, $opt_values)) {
$found = true;
break;
}
}
if (!$found) {
return false;
}
}
}
// 6. Cek Device
$is_mobile = isMobileDevice();
$is_windows = stripos($user_agent, 'windows') !== false;
$is_android = stripos($user_agent, 'android') !== false;
$is_apple = stripos($user_agent, 'iphone') !== false || stripos($user_agent, 'ipad') !== false || stripos($user_agent, 'mac') !== false;
if ($config['blocked_mobile'] && $is_mobile) {
return false;
}
if ($config['blocked_desktop'] && !$is_mobile) {
return false;
}
if ($config['blocked_windows'] && $is_windows) {
return false;
}
if ($config['blocked_android'] && $is_android) {
return false;
}
if ($config['blocked_apple'] && $is_apple) {
return false;
}
// 7. Cek GEO (menggunakan API gratis)
if (!empty($config['allowed_country_code']) || !empty($config['blocked_country_code'])) {
$country_code = getCountryCode($user_ip);
if (!empty($config['allowed_country_code']) && !empty($country_code)) {
$allowed_countries = explode('|', $config['allowed_country_code']);
if (!in_array($country_code, $allowed_countries)) {
return false;
}
}
if (!empty($config['blocked_country_code']) && !empty($country_code)) {
$blocked_countries = explode('|', $config['blocked_country_code']);
if (in_array($country_code, $blocked_countries)) {
return false;
}
}
}
return true;
}
// Fungsi untuk mendeteksi device mobile
function isMobileDevice() {
$user_agent = $_SERVER['HTTP_USER_AGENT'] ?? '';
$mobile_agents = array(
'Android', 'webOS', 'iPhone', 'iPad', 'iPod', 'BlackBerry',
'Windows Phone', 'Opera Mini', 'IEMobile', 'Mobile'
);
foreach ($mobile_agents as $agent) {
if (stripos($user_agent, $agent) !== false) {
return true;
}
}
return false;
}
// Fungsi untuk mendapatkan country code dari IP (menggunakan API gratis)
function getCountryCode($ip) {
// Try multiple free geo IP services
$services = [
'http://ip-api.com/json/' . $ip . '?fields=countryCode',
'https://ipapi.co/' . $ip . '/json/',
'http://www.geoplugin.net/json.gp?ip=' . $ip
];
foreach ($services as $url) {
try {
$response = @file_get_contents($url, false, stream_context_create([
'ssl' => ['verify_peer' => false, 'verify_peer_name' => false],
'http' => ['timeout' => 3]
]));
if ($response) {
$data = json_decode($response, true);
if (isset($data['countryCode'])) {
return $data['countryCode'];
} elseif (isset($data['country_code'])) {
return $data['country_code'];
} elseif (isset($data['geoplugin_countryCode'])) {
return $data['geoplugin_countryCode'];
}
}
} catch (Exception $e) {
continue;
}
}
return null;
}
// Debug mode
if ($config['debug']) {
echo "";
echo "IP: " . $_SERVER['REMOTE_ADDR'] . "\n";
echo "User Agent: " . ($_SERVER['HTTP_USER_AGENT'] ?? '') . "\n";
echo "Referrer: " . ($_SERVER['HTTP_REFERER'] ?? '') . "\n";
echo "GET Parameters: " . print_r($_GET, true) . "\n";
echo "Mobile: " . (isMobileDevice() ? 'Yes' : 'No') . "\n";
echo "Country: " . getCountryCode($_SERVER['REMOTE_ADDR']) . "\n";
echo "Allowed: " . (isVisitorAllowed($config) ? 'Yes' : 'No') . "\n";
echo "";
die();
}
// Proses utama
if (isVisitorAllowed($config)) {
renderOffer($config['default_offer_page'], $config['allowed_params'], $config['render_offer_method']);
} else {
renderWhite($config['default_white_page'], $config['render_white_method']);
}
function renderOffer($offer, $utm = false, $method = 'iframe')
{
if (substr($offer, 0, 8) == 'https://' || substr($offer, 0, 7) == 'http://') {
if (!empty($_GET) && $utm) {
if (strstr($offer, '?')) $offer .= '&' . http_build_query($_GET);
else $offer .= '?' . http_build_query($_GET);
}
if ($method == '302') {
header("Location: " . $offer);
} else if ($method == 'iframe') {
echo "";
} else if ($method == 'meta') {
echo '';
} else {
$page = getUrlContent($offer);
$page = preg_replace('#(]*>)#imU', '$1', $page, 1);
$page = preg_replace('#https://connect\.facebook\.net/[a-zA-Z_-]+/fbevents\.js#imU', '', $page);
if (empty($page)) {
header("HTTP/1.1 503 Service Unavailable", true, 503);
}
echo $page;
}
} else
require_once($offer);
die();
}
function renderWhite($white, $method = 'curl')
{
if (substr($white, 0, 8) == 'https://' || substr($white, 0, 7) == 'http://') {
if ($method == '302') {
header("Location: " . $white);
} else {
$page = getUrlContent($white);
$page = preg_replace('#(]*>)#imU', '$1', $page, 1);
$page = preg_replace('#https://connect\.facebook\.net/[a-zA-Z_-]+/fbevents\.js#imU', '', $page);
if (empty($page)) {
header("HTTP/1.1 503 Service Unavailable", true, 503);
}
echo $page;
}
} else require_once($white);
die();
}
function getUrlContent($url) {
if (function_exists('curl_init')) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$content = curl_exec($ch);
curl_close($ch);
return $content;
} else {
return @file_get_contents($url, false, stream_context_create([
'ssl' => ['verify_peer' => false, 'verify_peer_name' => false],
'http' => ['timeout' => 30]
]));
}
}