Great explanations Chris. You just made a very good start on a FAQ.
This stuff should get pulled off the mailing list.

Can someone give an update on the status of
http://cwiki.apache.org/confluence/display/SHINDIGxSITE/Index
and if it's appropriate for this type of info?

davep

On Fri, May 2, 2008 at 3:59 AM, Chris Chabot <[EMAIL PROTECTED]> wrote:
> Hi Lini,
>
>
>
> >  1.. first of all, who generates the security token containing the
> information about the owner, viewer and token id.
> >
>
>  The social network site (SNS in short) is the one that deals with the user
> information of all kinds (profiles, authentication, etc). So this site knows
> who the current user is (viewer), who the page belongs to (owner), what
> gadget this is (app id), which instance of it (mod id), and what preferences
> a user has (things like, country, language, but also user preferences for
> gadgets) .... none of this is 'created' by shindig, shindig consumes this
> information and uses it.
>
>  So how you should imagine this is that:
>  1) The SNS creates a <iframe> and in the iframe url it puts a lot of info
> like the security token for instance, but also the app url, id, mod id, user
> preferences, etc.
>  2) Shindig recieves this url, and renders the gadget based on the input of
> step (1)
>
>
>
> >  2.. This token is then passed to the gadget server along with the
> application url.
> >
>
>  Yes, plus some other info.
>
>  There are 2 methods of doing this, one is that you use the methods provided
> by javascript/container/gadget.js to create gadget iframe's from javascript
> (feeding it the url, st, and all other info), see the example files in
> javascript/container to see how to do this.
>
>  Or you could create your own iframe's on page rendering in PHP, this means
> you would include the basic files required for creating a token in your site
> (Crypto.php, BlobCrypter.php, GadgetToken.php, BasicBlobCrypter.php and
> BasicGadgetToken.php) and then do something like (forgive me if i make a
> syntax error or 2, i just woke up and my mail program doesn't make a good
> IDE) ps this assumes you fill in all the variables it uses below with info
> from your database:
>
>  // these come from your DB, the user preferences of this user / gadget /
> module id combo
>  $prefs = '';
>  foreach ($gadget_user_prefs as $name => $value) {
>         $prefs .= 'up_'.$name.'='.urlencode($value);
>  }
>
>  // create an encrypted security token using shindig's code and the
> owner/viewer/app/mod data from the site
>  $securityToken = BasicGadgetToken::createFromValues(
>  $owner,
>  $viewer,
>  $gadget_id,
>  $_SERVER['HTTP_HOST'], // domain
>  urlencode($gadget_url),
>  $gadget_mod_id /* first gadget on the page would be '1', second 'has mod id
> 2'.. or some other identifiable number that determines which instance of the
> one gadget it is (you can have multiple of the same on a page) */
>  );
>
>  // and create the iframe url using the above info
>  $iframe_url =
>  $gadget_server_url.'/gadgets/ifr?'.
>  "container=default".
>  "&mid=".$gadget_mod_id.
>  ((isset($_GET['nocache']) && $_GET['nocache'] == '1') ||
> isset($_GET['bpc']) && $_GET['bpc'] == '1' ? "&nocache=1" : '').
>  "&country=".(!empty($country) ? $country : 'ALL').
>  "&lang=".(!empty($lang) ? $lang : 'ALL').
>  "&view=".$view. // view of the page, like 'home', 'profile', 'canvas'
>  "&parent=".urlencode("http://".$_SERVER['HTTP_HOST']).
>  $prefs.
>  "&st=".$securityToken->toSerialForm().
>  "&url=".urlencode($gadget_url).
>  "#rpctoken=".rand(0,getrandmax());
>
>  // Then the html to create the gadget would be:
>  ?>
>  <iframe width="<?=$my_prefered_site_width?>" scrolling="no"
> height="<?=!empty($gadget_height)?$gadget_height : '200'?>" frameborder="no"
> src="<?=$iframe_url?>" class="gadgets-gadget"
> name="remote_iframe_<?=$gadget_mod_id?>"
> id="remote_iframe_<?=$gadget_mod_id?>"></iframe>
>  <?
>
>  In my experience creating your own iframe's in PHP means the page loads a
> smoother (since there's no re-rendering when the page onLoad creates all the
> iframe's in javascript). But that does mean your responsible for updating
> the code as the spec changes or expands.
>
>  To make a SNS you also need meta data of gadgets (title, directory title,
> author, etc). Shindig provides this metadata for you, see the
> sample-metadata.html in javascript/container for an example how to use this
> ... Your best bet is to use CURL to connect to this service from your site,
> and cache this info for 'some time' (could be from an hour to a day, but not
> much longer).
>
>
>
> >  3.. Now what will the gadget server do with this token?
> >
>
>  Both the social data server and the gadget server use this token to know
> who the viewer and owner is, and what the app id, mod id etc are.
>
>
>
> >  4.. If any site data is required, then the gadget server will call the
> container for the data, the container will return the data as json string to
> the gadget server. Is this correct?
> >
>
>  Incorrect. Shindig has 2 servers (located under /gadgets and /social), one
> of the renders gadgets and provides the meta data and proxy services.
>
>  The other is the social data interface, which provides the infrastructure
> and wire format to communicate this info to your gadgets.
>
>  To make this interface with your data source, you need to create a class
> that plugs into shindig following its interface definition, see
> php/src/socialdata/samplecontainer/*.php as a example of how to do this.
>
>  The provided samplecontainer files are pretty basic as far as the amount of
> information they deal with, but they should give you the right idea.
>
>  So create your own class(es), put them inside of the socialdata/ directory
> (so the auto include can find them), and edit the config.php 'handlers' bit
> to the class name(s) you created. (aka something like 'handlers' =>
> 'MySocialDataHandler' if your class is called MySocialDataHandler, and the
> file containing it is called MySocialDataHandler.php)
>
>
>
>
> >  5.. Now, out of this, what has been integrated in shindig?
> >
>
>  See the bits above :) You need to create:
>  - the social network site (shindig isn't a SNS site, it just provides open
> social functionality)
>  - the SNS needs to manage people, gadget info, gadget preferences etc
>  - load info of your gadgets in your SNS through the metadata interface
>  - generate the the iframe's with all the right info and security token
>  - create a social data interface to your own data and plug this into the
> social data server
>
>  Well then your mostly done, then you also need to create a UserPrefStore
> javascript file and data backend to store preferences. The
> javascript/container/cookiebaseduserpref.js has a basic implementation using
> cookies, something that is nice for a demo but not for a real site... so
> replace this with your own logic and your good to go :)
>
>
>
> > Can someone please reply to these points as based on this I need to start
> my work.
> >
>
>
>  Currently the shindig list consists mostly out of shindig developers, or
> people from social network sites who already contributed too, or used
> shindig and know it quite well ... which is reflected in the lack of
> documentation, our apologies for that. I'm sure in the future this will
> improve. But for now i hope this gave you some idea on what to do and how to
> get started.
>
>         -- Chris
>
>
>

Reply via email to