gadgets.rpcを理解するにあたって、別ドメイン別フレームという環境がほしくなった。
そこで、ShindigのlockedDomain機能を有効にしてみた。
以下手順。
1) container.jsで、lockedDomainを有効にする。
container.jsのgadgets.lockedDomainRequiredとgadgets.lockedDomainSuffixを有効にすべく
設定する。以下設定後の値。
"gadgets.lockedDomainRequired" : true,
"gadgets.lockedDomainSuffix" : ".gadget.example.com"
期待するdomainは、
<変な値>.gadget.example.com
として、<変な値>はgadgetXMLと一対一の値。
Shindigとしては、GadgetXMLのRequireタグにlocked-domainフィーチャーが指定されている
と、lockedDomain機能が有効になるが、それはまた別のお話。
2) /gadgets/metadataリクエスト経由でiframeに渡すURLを取得する。
参考になるのはShindig付属のsamplecontainer.js。
これをみて、/gadgets/metadataへリクエストし、gadgetのiframeUrlを取得する。
取得したiframeUrlは
//<変な値>.gadget.example.com/gadgets/ifr・・・・・
と先頭が'//'で始まっているかもしれない。そんときは、現在のschemeを付加してやればよい。
で、上記iframeUrlをiframeタグのsrcに指定してあげる。
これでクライアント側はOKのはず。
3) DNSでワイルドカード指定
<変な値>.gadget.example.comで、IPが返るようにDNSでワイルドカード指定する。
bindでもtinydnsでも可能。
4) Apache mod_proxy
もしApache mod_proxyを使用しているなら、
ShindigでlockedDomain機能を有効にしている場合、もともとのHostヘッダを見て
チェックするので、
ProxyPreserveHost On
と設定してやる必要がある。
これでガジェット毎に別ドメインになっていい感じ。
さて、locked-domain機能だけど、
gadgetごとに決まったURLじゃないとInvalid domainを返す機能・・・
で合っているかどうかは良くわからない。
ちなみに<変な値>の生成ロジックは以下のとおり。
1) gadgetXMLファイルへのURLからSHA1でハッシュ値を求める。
2) 1)で求めたSHA1ハッシュ値をBase64ではなく、Base32で文字列化
3) 2)で求めた文字列にcontainer.jsのgadgets.lockedDomainSuffixで指定した文字列を単純に連結。
な感じ。
なのでわざわざ/gadgets/metadata経由でDefaultUrlGeneratorを使って生成しなくても、
自前でもっと簡単に生成しても別にいい感じ。
そんだけ。
.
0 コメント:
コメントを投稿