/** * Invalidate a set of cached resources that are part of the application specification itself. * This includes gadget specs, manifests and message bundles * @param uris of content to invalidate * @param token identifying the calling application */ function invalidateApplicationResources(array $uris, SecurityToken $token) { foreach ($uris as $uri) { $request = new RemoteContentRequest($uri); $this->cache->invalidate($request->toHash()); } }
public static function invalidateGadgetCache(GadgetContext $context) { $request = new RemoteContentRequest($context->getUrl()); $cache = Cache::createCache(Shindig_Config::get('data_cache'), 'RemoteContent'); $cacheData = $cache->get($request->toHash()); if ($cacheData) { $uris = array(); $xml = $cacheData->getResponseContent(); $parserClass = Shindig_Config::get('gadget_spec_parser'); $parser = new $parserClass(); $gadgetSpec = $parser->parse($xml, $context); if ($gadgetSpec->locales) { foreach ($gadgetSpec->locales as $locale) { if (!empty($locale['messages'])) { $uris[] = RemoteContentRequest::transformRelativeUrl($locale['messages'], $context->getUrl()); } } } if (is_array($gadgetSpec->preloads)) { foreach ($gadgetSpec->preloads as $preload) { if (!empty($preload['href'])) { $uris[] = RemoteContentRequest::transformRelativeUrl($preload['href'], $context->getUrl()); } } } if (is_array($gadgetSpec->templatesRequireLibraries)) { foreach ($gadgetSpec->templatesRequireLibraries as $libraryUrl) { $uris[] = RemoteContentRequest::transformRelativeUrl($locale['messages'], $context->getUrl()); } } $uris[] = $request->getUrl(); self::invalidateRemoteContents($uris); } }
public function invalidateApplicationResources(array $uris, SecurityToken $token) { foreach ($uris as $uri) { $request = new RemoteContentRequest($uri); $this->cache->invalidate($request->toHash()); // GET $request = new RemoteContentRequest($uri); $request->createRemoteContentRequestWithUri($uri); $this->cache->invalidate($request->toHash()); // GET & SIGNED $request = new RemoteContentRequest($uri); $request->setAuthType(RemoteContentRequest::$AUTH_SIGNED); $request->setNotSignedUri($uri); $this->cache->invalidate($request->toHash()); } }
public function invalidateApplicationResources(array $uris, SecurityToken $token) { foreach ($uris as $uri) { $request = new RemoteContentRequest($uri); $this->cache->invalidate($request->toHash()); // GET $request = new RemoteContentRequest($uri); $request->createRemoteContentRequestWithUri($uri); $this->cache->invalidate($request->toHash()); // GET & SIGNED $request = new RemoteContentRequest($uri); $request->setAuthType(RemoteContentRequest::$AUTH_SIGNED); $request->setNotSignedUri($uri); $this->cache->invalidate($request->toHash()); } if (Doctrine::getTable('SnsConfig')->get('is_use_outer_shindig', false) && Doctrine::getTable('SnsConfig')->get('is_relay_invalidation_notice', true)) { require_once 'OAuth.php'; $shindigUrl = Doctrine::getTable('SnsConfig')->get('shindig_url'); if (substr($shindigUrl, -1) !== '/') { $shindigUrl .= '/'; } $invalidateUrl = $shindigUrl . 'gadgets/api/rest/cache'; $key = Doctrine::getTable('SnsConfig')->get('shindig_backend_key'); $secret = Doctrine::getTable('SnsConfig')->get('shindig_backend_secret'); $consumer = new OAuthConsumer($key, $secret); $oauthRequest = OAuthRequest::from_consumer_and_token($consumer, null, 'POST', $invalidateUrl); $oauthRequest->set_parameter('xoauth_requestor_id', 1); $oauthRequest->sign_request(new OAuthSignatureMethod_HMAC_SHA1(), $consumer, null); $request = new RemoteContentRequest($invalidateUrl . '?xoauth_requestor_id=1'); $request->setMethod('POST'); $request->setContentType('application/json'); $request->setPostBody(json_encode(array('invalidationKeys' => $uris))); $request->setHeaders($oauthRequest->to_header()); $request->getOptions()->ignoreCache = true; $remoteContent = Shindig_Config::get('remote_content'); $fetcher = new $remoteContent(); $fetcher->fetch($request); } }
/** * Returns the cached request, or false if there's no cached copy of this request, ignoreCache = true or if it's invalidated * * @param RemoteContentRequest $request * @return unknown */ public function getCachedRequest(RemoteContentRequest $request) { $ignoreCache = $request->getOptions()->ignoreCache; if (!$ignoreCache && ($this->cachePostRequest || !$request->isPost()) && ($cachedRequest = $this->cache->get($request->toHash())) !== false && $this->invalidateService->isValid($cachedRequest)) { return $cachedRequest; } else { return false; } }