Validar con headers

This commit is contained in:
Juan Pablo Vial
2025-05-30 14:18:48 -04:00
parent f728ed0b55
commit 734f258382
2 changed files with 17 additions and 9 deletions

View File

@ -88,7 +88,7 @@ class API
$data = $this->externalPaths[$basePath][$subPath];
if (isset($data['validator'])) {
$method = [$data['validator'], 'validateToken'];
if ($method($request, $data['token'])) {
if ($method($request, $data)) {
return true;
}
}

View File

@ -395,16 +395,24 @@ class Toku extends Ideal\Service
return $data;
}
public static function validateToken(ServerRequestInterface $request, string $token): bool
public static function validateToken(ServerRequestInterface $request, array $tokenConfig): bool
{
$tokenHeader = $request->getHeader('token');
if (is_array($tokenHeader)) {
$tokenHeader = $tokenHeader[0];
if (!$request->hasHeader('User-Agent') or !str_starts_with($request->getHeaderLine('User-Agent'), 'Toku-Webhooks')) {
return false;
}
$json = json_decode($tokenHeader, true);
if ($json !== null) {
$tokenHeader = $json;
if (!$request->hasHeader('X-Datadog-Tags') or !$request->hasHeader('Tracestate')) {
return false;
}
return strtolower($tokenHeader['header']) === 'x-api-key' and $tokenHeader['token'] === $token;
if (!$request->hasHeader('Toku-Signature')) {
return false;
}
$tracestate = explode(';', substr($request->getHeaderLine('Tracestate'), strlen('dd=')));
$ptid = substr(array_find($tracestate, fn($item) => str_starts_with($item, 't.tid:')), strlen('t.tid:'));
$datadogTags = explode(',', $request->getHeaderLine('X-Datadog-Tags'));
$tid = array_find($datadogTags, fn($item) => str_contains($item, 'p.tid='));
$tid = substr($tid, strpos($tid, 'p.tid=') + strlen('p.tid='));
return $tid === $ptid;
}
}