entityManager = $entityManager; $this->config = $config; } public function login( ?string $username, ?string $password, ?AuthToken $authToken, Request $request, array $params, array &$resultData ) :?User { $authString = base64_decode($request->getHeader('X-Hmac-Authorization')); list($apiKey, $hash) = explode(':', $authString, 2); $user = $this->entityManager->getRepository('User')->where([ 'type' => 'api', 'apiKey' => $apiKey, 'authMethod' => 'Hmac', ])->findOne(); if (!$user) return null; if ($user) { $secretKey = (new ApiKey($this->config))->getSecretKeyForUserId($user->id); if (!$secretKey) return null; $string = $request->getMethod() . ' ' . $request->getResourcePath(); if ($hash === ApiKey::hash($secretKey, $string)) { return $user; } return null; } return $user; } }