Author: chabotc
Date: Tue May  6 09:13:44 2008
New Revision: 653825

URL: http://svn.apache.org/viewvc?rev=653825&view=rev
Log:
- Fixed JsonRpcService to generate real iframe urls, and include v= param for 
cachability of the gadgets
- Added variable cache times based on nocache/v=/no v= params to gadget renderer
- Added a check to crypto to see if the cipher is available
- Fixed bug in GadgetRenderingServlet with unknown views
- Made gadget rendering servlet use default_js_prefix so that it actually finds 
js libs now in metadata gadgets
- Made JsonRpcService use the default_iframe_prefix config key instead of hard 
coded value


Modified:
    incubator/shindig/trunk/php/config.php
    incubator/shindig/trunk/php/src/common/Crypto.php
    incubator/shindig/trunk/php/src/common/HttpServlet.php
    incubator/shindig/trunk/php/src/common/UrlGenerator.php
    incubator/shindig/trunk/php/src/gadgets/Gadget.php
    incubator/shindig/trunk/php/src/gadgets/JsonRpcHandler.php
    incubator/shindig/trunk/php/src/gadgets/http/GadgetRenderingServlet.php

Modified: incubator/shindig/trunk/php/config.php
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/php/config.php?rev=653825&r1=653824&r2=653825&view=diff
==============================================================================
--- incubator/shindig/trunk/php/config.php (original)
+++ incubator/shindig/trunk/php/config.php Tue May  6 09:13:44 2008
@@ -39,7 +39,7 @@
 
        // The data handlers for the social data, this is a list of class names
        // seperated by a , For example:
-       // 'handlers' => 'PartuzaHandler',
+       //'handlers' => 'PartuzaHandler',
        // if the value is empty, the defaults used in the example above will 
be used.
        'handlers' => '',
 
@@ -66,8 +66,10 @@
        // gadget server specific settings
        'userpref_param_prefix' => 'up_',
        'libs_param_name' => 'libs',
-       'default_js_prefix' => '/js/',
-       'default_iframe_prefix' => 'ifr?', 
+       // location  of the javascript handler (include the full path), default 
this is /gadgets/js
+       'default_js_prefix' => '/gadgets/js/',
+       // location of the gadget iframe renderer, default this is /gadgets/ifr?
+       'default_iframe_prefix' => '/gadgets/ifr?', 
        
        // if your using memcached, these values are used for locating the 
server
        // if your not using memcached, ignore these values

Modified: incubator/shindig/trunk/php/src/common/Crypto.php
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/php/src/common/Crypto.php?rev=653825&r1=653824&r2=653825&view=diff
==============================================================================
--- incubator/shindig/trunk/php/src/common/Crypto.php (original)
+++ incubator/shindig/trunk/php/src/common/Crypto.php Tue May  6 09:13:44 2008
@@ -68,7 +68,12 @@
        {
                /* Open the cipher */
                $td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', 
MCRYPT_MODE_CBC, '');
-               $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), 
MCRYPT_DEV_RANDOM);
+               if (!$td) {
+                       throw new GeneralSecurityException('Invalid mcrypt 
cipher, check your libmcrypt library and php-mcrypt extention');
+               }
+               // replaced MCRYPT_DEV_RANDOM with MCRYPT_RAND since windows 
doesn't have /dev/rand :)
+               srand((double) microtime() * 1000000);
+               $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), 
MCRYPT_RAND);
                /* Intialize encryption */
                mcrypt_generic_init($td, $key, $iv);
                /* Encrypt data */

Modified: incubator/shindig/trunk/php/src/common/HttpServlet.php
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/php/src/common/HttpServlet.php?rev=653825&r1=653824&r2=653825&view=diff
==============================================================================
--- incubator/shindig/trunk/php/src/common/HttpServlet.php (original)
+++ incubator/shindig/trunk/php/src/common/HttpServlet.php Tue May  6 09:13:44 
2008
@@ -27,31 +27,24 @@
        private $lastModified = false;
        private $contentType = 'text/html';
        private $charset = 'UTF-8';
-       public $noHeaders = false;
        private $noCache = false;
+       private $cacheTime;
+       public $noHeaders = false;
        
        /**
         * Enables output buffering so we can do correct header handling in the 
destructor
         *
         */
-       /**
-        * Enables output buffering so we can do correct header handling in the 
destructor
-        *
-        */
        public function __construct()
        {
+               // set our default cache time (config cache time defaults to 24 
hours aka 1 day)
+               $this->cacheTime = Config::get('cache_time');
                // to do our header magic, we need output buffering on
                ob_start();
        }
        
        /**
-        * Enter description here...
-        * If noHeaders is false, it adds all the correct http/1.1 headers to 
the request
-        * and deals with modified/expires/e-tags/etc. This makes the server 
behave more like
-        * a real http server.
-        */
-       /**
-        * Enter description here...
+        * Code ran after the event handler, adds headers etc to the request
         * If noHeaders is false, it adds all the correct http/1.1 headers to 
the request
         * and deals with modified/expires/e-tags/etc. This makes the server 
behave more like
         * a real http server.
@@ -71,8 +64,8 @@
                        } else {
                                // attempt at some propper header handling from 
php
                                // this departs a little from the shindig code 
but it should give is valid http protocol handling
-                               header('Cache-Control: public,max-age=' . 
Config::get('cache_time'));
-                               header("Expires: " . gmdate("D, d M Y H:i:s", 
time() + Config::get('cache_time')) . " GMT");
+                               header('Cache-Control: public,max-age=' . 
$this->cacheTime);
+                               header("Expires: " . gmdate("D, d M Y H:i:s", 
time() + $this->cacheTime) . " GMT");
                                // Obey browsers (or proxy's) request to send a 
fresh copy if we recieve a no-cache pragma or cache-control request
                                if (! isset($_SERVER['HTTP_PRAGMA']) || ! 
strstr(strtolower($_SERVER['HTTP_PRAGMA']), 'no-cache') && (! 
isset($_SERVER['HTTP_CACHE_CONTROL']) || ! 
strstr(strtolower($_SERVER['HTTP_CACHE_CONTROL']), 'no-cache'))) {
                                        // If the browser send us a E-TAG check 
if it matches (sha1 sum of content), if so send a not modified header instead 
of content
@@ -98,9 +91,7 @@
                                                        die();
                                                }
                                        }
-                                       if ($this->lastModified) {
-                                               header('Last-Modified: ' . 
gmdate('D, d M Y H:i:s', $this->lastModified));
-                                       }
+                                       header('Last-Modified: ' . gmdate('D, d 
M Y H:i:s', ($this->lastModified ? $this->lastModified : time())));
                                }
                        }
                        echo $content;
@@ -108,10 +99,26 @@
        }
        
        /**
-        * Sets the content type of this request (forinstance: text/html or 
text/javascript, etc) 
+        * Sets the time in seconds that the browser's cache should be 
+        * considered out of date (through the Expires header) 
         *
-        * @param string $type content type header to use
+        * @param int $time time in seconds
+        */
+       public function setCacheTime($time)
+       {
+               $this->cacheTime = $time;
+       }
+       
+       /**
+        * Returns the time in seconds that the browser is allowed to cache the 
content
+        *
+        * @return int $time
         */
+       public function getCacheTime()
+       {
+               return $this->cacheTime;
+       }
+       
        /**
         * Sets the content type of this request (forinstance: text/html or 
text/javascript, etc) 
         *
@@ -127,11 +134,6 @@
         *
         * @return string content type string
         */
-       /**
-        * Returns the current content type 
-        *
-        * @return string content type string
-        */
        public function getContentType()
        {
                return $this->contentType;
@@ -142,11 +144,6 @@
         *
         * @return int timestamp
         */
-       /**
-        * returns the current last modified time stamp
-        *
-        * @return int timestamp
-        */
        public function getLastModified()
        {
                return $this->lastModified;
@@ -158,12 +155,6 @@
         *
         * @param int $modified timestamp
         */
-       /**
-        * Sets the last modified timestamp. It automaticly checks if this 
timestamp
-        * is larger then its current timestamp, and if not ignores the call
-        *
-        * @param int $modified timestamp
-        */
        public function setLastModified($modified)
        {
                $this->lastModified = max($this->lastModified, $modified);
@@ -175,12 +166,6 @@
         *
         * @param boolean $cache send no-cache headers?
         */
-       /**
-        * Sets the noCache boolean. If its set to true, no-caching headers 
will be send
-        * (pragma no cache, expiration in the past)
-        *
-        * @param boolean $cache send no-cache headers?
-        */
        public function setNoCache($cache = false)
        {
                $this->noCache = $cache;
@@ -191,11 +176,6 @@
         *
         * @return boolean
         */
-       /**
-        * returns the noCache boolean
-        *
-        * @return boolean
-        */
        public function getNoCache()
        {
                return $this->noCache;

Modified: incubator/shindig/trunk/php/src/common/UrlGenerator.php
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/php/src/common/UrlGenerator.php?rev=653825&r1=653824&r2=653825&view=diff
==============================================================================
--- incubator/shindig/trunk/php/src/common/UrlGenerator.php (original)
+++ incubator/shindig/trunk/php/src/common/UrlGenerator.php Tue May  6 09:13:44 
2008
@@ -19,11 +19,40 @@
  */
 
 class UrlGenerator {
-       static function getIframeURL($gadget)
+       static function getIframeURL($gadget, $context) 
        {
-               //TODO this
-               // returns fake demo value to make the basic JsonRpc service 
work
+               $inlineJs = '';
+               foreach ( $gadget->getJsLibraries() as $library ) {
+                       $type = $library->getType();
+                       if ($type != 'URL') {
+                               $inlineJs .= $library->getContent() . "\n";
+                       }
+               }
+               $v = md5($inlineJs);
+               
+               $view = HttpUtil::getView($gadget, $context);
+               
+               $up = '';
+               $prefs = $context->getUserPrefs();
+               foreach ($gadget->getUserPrefs() as $pref) {
+                       $name = $pref->getName();
+                       $value = $prefs->getPref($name);
+                       if ($value == null) {
+                               $value = $pref->getDefaultValue();
+                       }
+                       $up .= '&up_'.urlencode($name).'='.urlencode($value);
+               }
+               
                // note: put the URL last, else some browsers seem to get 
confused (reported by hi5)
-               return 
"/gadgets/ifr?container=default&mid=1&v=db18c863f15d5d1e758a91f2a44881b4&lang=en&country=US&url=http%3A%2F%2Fwww.google.com%2Fig%2Fmodules%2Fhello.xml";
+               return
+                       Config::get('default_iframe_prefix').
+                       'container='.$context->getContainer().
+                       ($context->getIgnoreCache() ? 'nocache=1' : '&v='.$v).
+                       ($context->getModuleId() != 0 ? 
'&mid='.$context->getModuleId() : '').
+                       '&lang='.$context->getLocale()->getLanguage().
+                       '&country='.$context->getLocale()->getCountry().        
                
+                       '&view='.$view->getName().
+                       $up.
+                       '&url='.urlencode($context->getUrl());          
        }
 }

Modified: incubator/shindig/trunk/php/src/gadgets/Gadget.php
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/php/src/gadgets/Gadget.php?rev=653825&r1=653824&r2=653825&view=diff
==============================================================================
--- incubator/shindig/trunk/php/src/gadgets/Gadget.php (original)
+++ incubator/shindig/trunk/php/src/gadgets/Gadget.php Tue May  6 09:13:44 2008
@@ -293,7 +293,7 @@
        
        public function getView($viewName)
        {
-               return isset($this->views[$viewName]) ? $this->views[$viewName] 
: false;
+               return isset($this->views[$viewName]) ? $this->views[$viewName] 
: $this->views[DEFAULT_VIEW];
        }
 }
 

Modified: incubator/shindig/trunk/php/src/gadgets/JsonRpcHandler.php
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/php/src/gadgets/JsonRpcHandler.php?rev=653825&r1=653824&r2=653825&view=diff
==============================================================================
--- incubator/shindig/trunk/php/src/gadgets/JsonRpcHandler.php (original)
+++ incubator/shindig/trunk/php/src/gadgets/JsonRpcHandler.php Tue May  6 
09:13:44 2008
@@ -12,7 +12,7 @@
                                $context = new 
JsonRpcGadgetContext($requests->context, $gadgetUrl);
                                $gadgetServer = new GadgetServer();
                                $gadget = 
$gadgetServer->processGadget($context);
-                               $response[] = $this->makeResponse($gadget, 
$gadgetModuleId, $gadgetUrl);
+                               $response[] = $this->makeResponse($gadget, 
$gadgetModuleId, $gadgetUrl, $context);
                        } catch (Exception $e) {
                                $response[] = array('errors' => 
array($e->getMessage()), 'moduleId' => $gadgetModuleId, 'url' => $gadgetUrl);
                        }
@@ -20,7 +20,7 @@
                return $response;
        }
        
-       private function makeResponse($gadget, $gadgetModuleId, $gadgetUrl)
+       private function makeResponse($gadget, $gadgetModuleId, $gadgetUrl, 
$context)
        {
                $response = array();
                $prefs = array();
@@ -64,7 +64,7 @@
                $response['titleUrl'] = $gadget->getTitleUrl();
                $response['directoryTitle'] = $gadget->getDirectoryTitle();
                $response['author'] = $gadget->getAuthor();
-               $response['iframeUrl'] = UrlGenerator::getIframeURL($gadget);   
+               $response['iframeUrl'] = UrlGenerator::getIframeURL($gadget, 
$context); 
                $response['userPrefs'] = $prefs;
                return $response;
        }

Modified: 
incubator/shindig/trunk/php/src/gadgets/http/GadgetRenderingServlet.php
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/php/src/gadgets/http/GadgetRenderingServlet.php?rev=653825&r1=653824&r2=653825&view=diff
==============================================================================
--- incubator/shindig/trunk/php/src/gadgets/http/GadgetRenderingServlet.php 
(original)
+++ incubator/shindig/trunk/php/src/gadgets/http/GadgetRenderingServlet.php Tue 
May  6 09:13:44 2008
@@ -134,7 +134,7 @@
                // Forced libs first.
                if (! empty($forcedLibs)) {
                        $libs = explode(':', $forcedLibs);
-                       $output .= sprintf($externFmt, $this->getJsUrl($libs)) 
. "\n";
+                       $output .= sprintf($externFmt, 
Config::get('default_js_prefix').$this->getJsUrl($libs, $gadget)) . "\n";
                }
                if (strlen($inlineJs) > 0) {
                        $output .= "<script><!--\n" . $inlineJs . 
"\n-->\n</script>\n";
@@ -158,6 +158,17 @@
                $output .= $content . "\n";
                $output .= 
"<script>gadgets.util.runOnLoadHandlers();</script>\n";
                $output .= "</body>\n</html>";
+               if ($context->getIgnoreCache()) {
+                       // no cache was requested, set non-caching-headers
+                       $this->setNoCache(true);
+               } elseif (isset($_GET['v'])) {
+                       // version was given, cache for a long long time (a 
year)
+                       $this->setCacheTime(365 * 24 * 60 * 60);
+               } else {
+                       // no version was given, cache for 5 minutes
+                       $this->setCacheTime(5 * 60);
+               }
+               // Was a privacy policy header configured? if so set it
                if (Config::get('P3P') != '') {
                        header("P3P: ".Config::get('P3P'));
                }
@@ -269,7 +280,7 @@
                                $inlineJs .= $library->getContent() . "\n";
                        }
                }
-               $buf .= ".js?v=" . sha1($inlineJs);
+               $buf .= ".js?v=" . md5($inlineJs);
                return $buf;
        }
        


Reply via email to