headers->get(self::KEY_HEADER)); if ($this->openRequest($request, $key) === false) { return new JsonResponse(['message' => 'Khoá phiên không khớp, vui lòng thử lại.'], 428); } $response = $next($request); $wanted = $mode === 'always' || $request->headers->get(self::OPT_IN_HEADER) === '1'; if (! $key || ! $wanted || $request->attributes->has(self::SEALED_ATTRIBUTE) || ! $response instanceof JsonResponse) { return $response; } $request->attributes->set(self::SEALED_ATTRIBUTE, true); $response->setData(['enc' => ResponseCipher::seal($response->getContent(), $key)]); return $response; } private function openRequest(Request $request, ?string $key): ?bool { $sealed = $request->isJson() ? $request->json('enc') : null; if (! is_string($sealed)) { return null; } $data = $key ? json_decode((string) ResponseCipher::open($sealed, $key), true) : null; if (! is_array($data)) { return false; } $request->json()->replace($data); $request->request->replace($data); return true; } }