Files
newznab-tmux/app/Extensions/helper/age_verification_helpers.php
T
2026-02-11 14:02:26 +01:00

187 lines
5.8 KiB
PHP

<?php
/**
* Enhanced getRawHtml function with automatic age verification
*
* This is a replacement/enhancement for the existing getRawHtml() in helpers.php
* that automatically handles age verification for adult sites.
*/
use App\Services\AdultProcessing\AgeVerificationManager;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;
use Illuminate\Support\Facades\Log;
if (! function_exists('getRawHtmlWithAgeVerification')) {
/**
* Get raw HTML with automatic age verification handling
*
* @param string $url URL to fetch
* @param string|false $cookie Optional cookie string (legacy support)
* @param string|null $postData Optional POST data
* @return string|array<string, mixed>|false
*/
function getRawHtmlWithAgeVerification($url, $cookie = false, $postData = null)
{
static $ageVerificationManager = null;
// Initialize manager on first use
if ($ageVerificationManager === null) {
$ageVerificationManager = new AgeVerificationManager;
}
// Check if this is an adult site that needs age verification
$adultSites = [
'adultdvdempire.com',
'adultdvdmarketplace.com',
'aebn.net',
'hotmovies.com',
'popporn.com',
];
$isAdultSite = false;
foreach ($adultSites as $site) {
if (stripos($url, $site) !== false) {
$isAdultSite = true;
break;
}
}
// For adult sites, use the age verification manager
if ($isAdultSite) {
try {
$options = [];
// Handle POST data if provided
if ($postData !== null) {
$options['form_params'] = $postData;
$cookieJar = $ageVerificationManager->getCookieJar($url);
$client = new Client([
'cookies' => $cookieJar,
'headers' => [
'User-Agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
],
]);
$response = $client->post($url, $options);
$html = $response->getBody()->getContents();
} else {
$html = $ageVerificationManager->makeRequest($url, $options);
}
// Try to decode as JSON (some APIs return JSON)
if ($html !== false) {
$jsonResponse = json_decode($html, true);
if (json_last_error() === JSON_ERROR_NONE) {
return $jsonResponse;
}
}
return $html;
} catch (RequestException $e) {
if (config('app.debug') === true) {
Log::error('getRawHtmlWithAgeVerification: '.$e->getMessage());
}
return false;
} catch (\Exception $e) {
if (config('app.debug') === true) {
Log::error('getRawHtmlWithAgeVerification: '.$e->getMessage());
}
return false;
}
}
// For non-adult sites, use standard approach
return getRawHtml($url, $cookie, $postData);
}
}
if (! function_exists('initializeAdultSiteCookies')) {
/**
* Initialize age verification cookies for all adult sites
* Run this once during application setup
*
* @return array<string, mixed> Statistics about initialized cookies
*/
function initializeAdultSiteCookies(): array
{
$manager = new AgeVerificationManager;
$sites = [
'https://www.adultdvdempire.com',
'https://www.adultdvdmarketplace.com',
'https://straight.theater.aebn.net',
'https://www.hotmovies.com',
'https://www.popporn.com',
];
$results = [
'initialized' => 0,
'failed' => 0,
'sites' => [],
];
foreach ($sites as $url) {
try {
// Making a request will automatically set up cookies
$cookieJar = $manager->getCookieJar($url);
$domain = parse_url($url, PHP_URL_HOST);
$results['sites'][$domain] = [
'status' => 'initialized',
'cookies' => count($cookieJar),
];
$results['initialized']++;
} catch (\Exception $e) {
$domain = parse_url($url, PHP_URL_HOST);
$results['sites'][$domain] = [
'status' => 'failed',
'error' => $e->getMessage(),
];
$results['failed']++;
}
}
return $results;
}
}
if (! function_exists('getAdultSiteCookieStats')) {
/**
* Get statistics about stored adult site cookies
*
* @return array<string, mixed> Cookie statistics
*/
function getAdultSiteCookieStats(): array
{
$manager = new AgeVerificationManager;
return $manager->getCookieStats();
}
}
if (! function_exists('clearAdultSiteCookies')) {
/**
* Clear all stored adult site cookies
*
* @param string|null $domain Optional specific domain to clear
* @return int|bool Number of cookies cleared (or bool for specific domain)
*/
function clearAdultSiteCookies(?string $domain = null)
{
$manager = new AgeVerificationManager;
if ($domain !== null) {
return $manager->clearCookies($domain);
}
return $manager->clearAllCookies();
}
}