debug
This commit is contained in:
71
code/app/api/middleware/SeoCollectorTokenAuth.php
Normal file
71
code/app/api/middleware/SeoCollectorTokenAuth.php
Normal 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]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user