3 namespace seekat\API\Call\Cache
;
5 use http\Client\Request
;
6 use http\Client\Response
;
19 * @param Request $request
21 function __construct(Request
$request) {
22 $method = $request->getRequestMethod();
26 $uid = $this->extractAuth($request);
27 $url = $request->getRequestUrl();
28 $this->key
= "seekat call $uid $method $url";
39 public function isValid() : bool {
40 return strlen($this->key
) > 0;
46 public function getKey() : string {
51 * @param Response $response
54 public function isStale(Response
$response) : bool {
55 if (false === $response->getHeader("Cache-Control") &&
56 false === $response->getHeader("Expires")) {
60 $max_age = $this->extractMaxAge($response);
61 $cur_age = time() - $response->getHeader("X-Cache-Time");
63 return $max_age >= 0 && $max_age < $cur_age;
67 * @param Response $response
70 private function extractMaxAge(Response
$response) : int {
72 * @var Header $control
73 * @var Header $expires
75 $control = $response->getHeader("Cache-Control", Header
::class);
77 /* @var Params $params */
78 $params = $control->getParams();
79 if (isset($params["max-age"])) {
80 return (int) $params->params
["max-age"]["value"];
84 $expires = $response->getHeader("Expires", Header
::class);
86 if ($expires->match(0, Header
::MATCH_FULL
)) {
90 $date = $response->getHeader("Date", Header
::class);
92 return strtotime($expires->value
) - strtotime($date->value
);
100 * @param Request $request
103 private function extractAuth(Request
$request) : string {
104 $auth = $request->getHeader("Authorization");
106 return substr($auth, strpos($auth, " ") +
1);
109 $opts = $request->getOptions();
110 if (isset($opts["httpauth"])) {
111 return base64_encode($opts["httpauth"]);
114 $query = new QueryString((new Url($request->getRequestUrl()))->query
);
115 return $query->getString("access_token", $query->getString("client_id", ""));