a6186f25b668f8d91985175779920b3fee67c007
3 namespace seekat\API\Call\Cache
;
5 use http\Client\Request
;
6 use http\Client\Response
;
16 * @param Request $request
18 function __construct(Request
$request) {
19 $method = $request->getRequestMethod();
23 $uid = $this->extractAuth($request);
24 $url = $request->getRequestUrl();
25 $this->key
= "seekat call $uid $method $url";
36 public function isValid() : bool {
37 return strlen($this->key
) > 0;
43 public function getKey() : string {
48 * @param Response $response
51 public function isStale(Response
$response) : bool {
52 if (false === $response->getHeader("Cache-Control") &&
53 false === $response->getHeader("Expires")) {
57 $max_age = $this->extractMaxAge($response);
58 $cur_age = time() - $response->getHeader("X-Cache-Time");
60 return $max_age >= 0 && $max_age < $cur_age;
64 * @param Response $response
67 private function extractMaxAge(Response
$response) : int {
69 * @var Header $control
70 * @var Header $expires
72 $control = $response->getHeader("Cache-Control", Header
::class);
74 /* @var Params $params */
75 $params = $control->getParams();
76 if (isset($params["max-age"])) {
77 return (int) $params->params
["max-age"]["value"];
81 $expires = $response->getHeader("Expires", Header
::class);
83 if ($expires->match(0, Header
::MATCH_FULL
)) {
87 $date = $response->getHeader("Date", Header
::class);
89 return strtotime($expires->value
) - strtotime($date->value
);
97 * @param Request $request
100 private function extractAuth(Request
$request) : string {
101 $auth = $request->getHeader("Authorization");
103 return substr($auth, strpos($auth, " ") +
1);
106 $opts = $request->getOptions();
107 if (isset($opts["httpauth"])) {
108 return base64_encode($opts["httpauth"]);
111 $query = new QueryString((new Url($request->getRequestUrl()))->query
);
112 return $query->getString("access_token", $query->getString("client_id", ""));