NAME
OpenSocialX::Shindig::Crypter - OpenSocial Shindig Crypter
VERSION
version 0.03
SYNOPSIS
use OpenSocialX::Shindig::Crypter;
my $crypter = OpenSocialX::Shindig::Crypter->new( {
cipher => 'length16length16',
hmac => 'forhmac_sha1',
iv => 'anotherlength16k'
} );
my $token = $crypter->create_token( {
owner => $owner_id,
viewer => $viewer_id,
app => $app_id,
app_url => $app_url,
domain => $domain,
module_id => $module_id
} );
DESCRIPTION
Apache Shindig <http://incubator.apache.org/shindig/> is an OpenSocial
container and helps you to start hosting OpenSocial apps quickly by
providing the code to render gadgets, proxy requests, and handle REST
and RPC requests.
From the article
<http://www.chabotc.com/generic/using-shindig-in-a-non-php-or-java-envir
ionment/>, we know that we can do 'Application' things in Perl.
basically the stuff will be
* use Perl OpenSocialX::Shindig::Crypter (this module) to create st=
encrypted token through "create_token"
* the php "BasicBlobCrypter.php" will unwrap the token and validate
it. The file is in the "php" dir of this .tar.gz or you can download
it from
<http://github.com/fayland/opensocialx-shindig-crypter/raw/master/ph
p/BasicBlobCrypter.php>
you can copy it to the dir of "extension_class_paths" defined in
shindig/config/container.php, it will override the default
"BasicBlobCrypter.php" provided by shindig.
and the last thing is to defined the same keys in
shindig/config/container.php like:
'token_cipher_key' => 'length16length16',
'token_hmac_key' => 'forhmac_sha1',
'token_iv_key' => 'anotherlength16k',
remember that "token_iv_key" is new
METHODS
* new
my $crypter = OpenSocialX::Shindig::Crypter->new( {
cipher => 'length16length16',
hmac => 'forhmac_sha1',
iv => 'anotherlength16k'
} );
"cipher" and "iv" must be 16 chars.
* create_token
my $token = $crypter->create_token( {
owner => $owner_id,
viewer => $viewer_id,
app => $app_id,
app_url => $app_url,
domain => $domain,
module_id => $module_id
} );
if you don't know what "module_id" is, you can leave it alone.
* wrap
my $encrypted = $crypter->wrap({
a => 1,
c => 3,
o => 5
} );
encrypt the hash by Crypt::Rijndael and Digest::SHA and
encode_base64 it
* unwrap
my $hash = $crypter->unwrap($encrypted);
decrypt the above data
* deserialize
* checkTimestamp
* _serializeAndTimestamp
EXAMPLE
use URI::Escape;
use MIME::Base64;
use OpenSocialX::Shindig::Crypter;
my $crypter = OpenSocialX::Shindig::Crypter->new( {
cipher => $config->{opensocial}->{cipherKey},
hmac => $config->{opensocial}->{hmacKey},
iv => $config->{opensocial}->{ivKey},
} );
my $security_token = uri_escape( encode_base64( $crypter->create_token( {
owner => $owner_id,
viewer => $viwer_id,
app => $gadget->{id},
domain => $config->{opensocial}->{container},
app_url => $gadget->{url},
} ) ) );
# later in tt2 or others
# st=$security_token
AUTHOR
Fayland Lam <fayland@gmail.com>
COPYRIGHT AND LICENSE
This software is copyright (c) 2009 by Fayland Lam.
This is free software; you can redistribute it and/or modify it under
the same terms as perl itself.