/**
  * 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;
     }
 }