This commit is contained in:
Your Name
2026-04-14 23:16:47 +08:00
parent 27d193be28
commit 887e95286f
428 changed files with 25304 additions and 0 deletions

View File

@@ -0,0 +1,71 @@
<?php
declare(strict_types=1);
namespace app\api\middleware;
use app\Request;
class SeoCollectorTokenAuth
{
public function handle(Request $request, \Closure $next)
{
$expectedToken = $this->resolveExpectedToken();
if ($expectedToken === '') {
return $this->jsonError('9999', 'SEO_COLLECTOR_TOKEN 未配置');
}
$providedToken = $this->resolveProvidedToken($request);
if ($providedToken === '' || !hash_equals($expectedToken, $providedToken)) {
return $this->jsonError('9995', '采集 token 无效');
}
return $next($request);
}
protected function resolveExpectedToken(): string
{
$candidates = [
trim((string)getenv('SEO_COLLECTOR_TOKEN')),
trim((string)env('SEO_COLLECTOR_TOKEN', '')),
trim((string)($_SERVER['SEO_COLLECTOR_TOKEN'] ?? '')),
trim((string)($_ENV['SEO_COLLECTOR_TOKEN'] ?? '')),
];
foreach ($candidates as $value) {
if ($value !== '') {
return $value;
}
}
return '';
}
protected function resolveProvidedToken(Request $request): string
{
$headerToken = trim((string)$request->header('x-seo-collector-token', ''));
if ($headerToken !== '') {
return $headerToken;
}
$bearer = trim((string)$request->header('authorization', ''));
if (preg_match('/^Bearer\s+(.+)$/i', $bearer, $matches)) {
return trim((string)($matches[1] ?? ''));
}
$queryToken = trim((string)$request->get('token', ''));
if ($queryToken !== '') {
return $queryToken;
}
return trim((string)$request->post('token', ''));
}
protected function jsonError(string $code, string $message)
{
return json([
'code' => $code,
'msg' => $message,
'data' => [],
], 200, [], [JSON_UNESCAPED_UNICODE]);
}
}