1<?php 2/* 3 * Copyright 2015 Google Inc. 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18namespace Google\Auth; 19 20use Psr\Cache\CacheItemPoolInterface; 21 22trait CacheTrait 23{ 24 /** 25 * @var int 26 */ 27 private $maxKeyLength = 64; 28 29 /** 30 * @var array<mixed> 31 */ 32 private $cacheConfig; 33 34 /** 35 * @var ?CacheItemPoolInterface 36 */ 37 private $cache; 38 39 /** 40 * Gets the cached value if it is present in the cache when that is 41 * available. 42 * 43 * @param mixed $k 44 * 45 * @return mixed 46 */ 47 private function getCachedValue($k) 48 { 49 if (is_null($this->cache)) { 50 return null; 51 } 52 53 $key = $this->getFullCacheKey($k); 54 if (is_null($key)) { 55 return null; 56 } 57 58 $cacheItem = $this->cache->getItem($key); 59 if ($cacheItem->isHit()) { 60 return $cacheItem->get(); 61 } 62 } 63 64 /** 65 * Saves the value in the cache when that is available. 66 * 67 * @param mixed $k 68 * @param mixed $v 69 * @return mixed 70 */ 71 private function setCachedValue($k, $v) 72 { 73 if (is_null($this->cache)) { 74 return null; 75 } 76 77 $key = $this->getFullCacheKey($k); 78 if (is_null($key)) { 79 return null; 80 } 81 82 $cacheItem = $this->cache->getItem($key); 83 $cacheItem->set($v); 84 $cacheItem->expiresAfter($this->cacheConfig['lifetime']); 85 return $this->cache->save($cacheItem); 86 } 87 88 /** 89 * @param null|string $key 90 * @return null|string 91 */ 92 private function getFullCacheKey($key) 93 { 94 if (is_null($key)) { 95 return null; 96 } 97 98 $key = $this->cacheConfig['prefix'] . $key; 99 100 // ensure we do not have illegal characters 101 $key = preg_replace('|[^a-zA-Z0-9_\.!]|', '', $key); 102 103 // Hash keys if they exceed $maxKeyLength (defaults to 64) 104 if ($this->maxKeyLength && strlen($key) > $this->maxKeyLength) { 105 $key = substr(hash('sha256', $key), 0, $this->maxKeyLength); 106 } 107 108 return $key; 109 } 110} 111