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] ])); } }