feat: xxbb
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Channel;
|
||||
use App\Models\PageVisit;
|
||||
use App\Support\UserAgentParser;
|
||||
use Illuminate\Http\Request;
|
||||
@@ -14,21 +15,26 @@ class PageHitController extends Controller
|
||||
|
||||
public function __invoke(Request $request): Response
|
||||
{
|
||||
$channelId = strtolower(trim((string) $request->query('c', $request->input('c', ''))));
|
||||
$channelId = trim((string) $request->query('c', $request->input('c', '')));
|
||||
$clientUid = trim((string) $request->query('u', $request->input('u', '')));
|
||||
$path = trim((string) $request->query('p', $request->input('p', '')));
|
||||
|
||||
if (! preg_match('/^[0-9a-f]{32}$/', $channelId)) {
|
||||
return $this->pixel();
|
||||
$newCode = Channel::normalizeNewChannelId($channelId);
|
||||
if ($newCode !== null) {
|
||||
$channelId = $newCode;
|
||||
} else {
|
||||
$channelId = strtolower($channelId);
|
||||
if (! preg_match('/^[0-9a-f]{32}$/', $channelId)) {
|
||||
return $this->pixel();
|
||||
}
|
||||
}
|
||||
if (! preg_match('/^[0-9a-fA-F-]{8,64}$/', $clientUid) && ! preg_match('/^tmp_[0-9a-f]+$/i', $clientUid)) {
|
||||
return $this->pixel();
|
||||
}
|
||||
if (strlen($path) > 255) {
|
||||
$path = substr($path, 0, 255);
|
||||
}
|
||||
|
||||
$debounceKey = 'page_hit:'.$channelId.':'.$clientUid;
|
||||
$ip = (string) $request->ip();
|
||||
$domain = PageVisit::normalizeDomain($request->getHost());
|
||||
$uid = PageVisit::visitorUid($domain ?? $request->getHost(), $ip);
|
||||
|
||||
$debounceKey = 'page_hit:'.$channelId.':'.$uid;
|
||||
if (! Cache::add($debounceKey, 1, now()->addSeconds(8))) {
|
||||
return $this->pixel();
|
||||
}
|
||||
@@ -39,14 +45,14 @@ class PageHitController extends Controller
|
||||
|
||||
PageVisit::query()->create([
|
||||
'channel_id' => $channelId,
|
||||
'client_uid' => substr($clientUid, 0, 64),
|
||||
'client_uid' => $uid,
|
||||
'user_agent' => $ua !== '' ? $ua : null,
|
||||
'os' => $parsed['os'],
|
||||
'os_version' => $parsed['os_version'] !== '' ? $parsed['os_version'] : null,
|
||||
'browser' => $parsed['browser'],
|
||||
'browser_version' => $parsed['browser_version'] !== '' ? $parsed['browser_version'] : null,
|
||||
'ip' => $request->ip(),
|
||||
'path' => $path !== '' ? $path : null,
|
||||
'ip' => $ip !== '' ? $ip : null,
|
||||
'domain' => $domain,
|
||||
'referer' => $referer,
|
||||
'created_at' => now(),
|
||||
]);
|
||||
|
||||
Reference in New Issue
Block a user