99871d669b1b6f713e43a40e7caf7ec496685a2a
3 namespace seekat\API\Call\Cache
;
5 use http\Client\Request
;
6 use http\Client\Response
;
20 * @param Request $request
22 function __construct(Request
$request) {
23 $method = $request->getRequestMethod();
27 $uid = $this->extractAuth($request);
28 $url = $request->getRequestUrl();
29 $this->key
= "seekat call $uid $method $url";
40 public function isValid() : bool {
41 return strlen($this->key
) > 0;
47 public function getKey() : string {
52 * @param Response $response
55 public function isStale(Response
$response) : bool {
56 if (false === $response->getHeader("Cache-Control") &&
57 false === $response->getHeader("Expires")) {
61 $max_age = $this->extractMaxAge($response);
62 $cur_age = time() - $response->getHeader("X-Cache-Time");
64 return $max_age >= 0 && $max_age < $cur_age;
68 * @param Response $response
71 private function extractMaxAge(Response
$response) : int {
73 * @var Header $control
74 * @var Header $expires
76 $control = $response->getHeader("Cache-Control", Header
::class);
78 /* @var Params $params */
79 $params = $control->getParams();
80 if (isset($params["max-age"])) {
81 return (int) $params->params
["max-age"]["value"];
85 $expires = $response->getHeader("Expires", Header
::class);
87 if ($expires->match(0, Header
::MATCH_FULL
)) {
91 $date = $response->getHeader("Date", Header
::class);
93 return strtotime($expires->value
) - strtotime($date->value
);
101 * @param Request $request
104 private function extractAuth(Request
$request) : string {
105 $auth = $request->getHeader("Authorization");
107 return substr($auth, strpos($auth, " ") +
1);
110 $opts = $request->getOptions();
111 if (isset($opts["httpauth"])) {
112 return base64_encode($opts["httpauth"]);
115 $query = new QueryString((new Url($request->getRequestUrl()))->query
);
116 return $query->getString("access_token", $query->getString("client_id", ""));