/** * Wraps a credential provider and saves provided credentials in an * instance of Aws\CacheInterface. Forwards calls when no credentials found * in cache and updates cache with the results. * * Defaults to using a simple file-based cache when none provided. * * @param callable $provider Credentials provider function to wrap * @param CacheInterface $cache (optional) Cache to store credentials * @param string|null $cacheKey (optional) Cache key to use * * @return callable */ public static function cache(callable $provider, CacheInterface $cache, $cacheKey = null) { $cacheKey = $cacheKey ?: 'aws_cached_credentials'; return function () use($provider, $cache, $cacheKey) { $found = $cache->get($cacheKey); if ($found instanceof CredentialsInterface && !$found->isExpired()) { return Promise\promise_for($found); } return $provider()->then(function (CredentialsInterface $creds) use($cache, $cacheKey) { $cache->set($cacheKey, $creds, null === $creds->getExpiration() ? 0 : $creds->getExpiration() - time()); return $creds; }); }; }
public function determineBucketRegionAsync($bucketName) { if ($cached = $this->cache->get($this->getCacheKey($bucketName))) { return Promise\promise_for($cached); } return $this->lookupBucketRegion($bucketName)->then(function ($region) use($bucketName) { $this->cache->set($this->getCacheKey($bucketName), $region); return $region; }); }