RAILS PRESS RUBY on RAILS, it’s DRY and COOL …

RSS Feed

RAILS PRESS RSS

Tag Cloud

はてなブックマーク - railspress.matake.jp の注目エントリー
象形文字くさび形文字ミイラそろばんの玉そろばんコーラン占いの板?象牙大英博物館
« 前のエントリ
iKnow! Developers Conference が終了しました
次のエントリー »
iKnow! gem をアップデートしました version 0.0.4

Posted on
2008/11/26

Tags
Gem, OpenID, iKnow!, ノウハウ

Keywords


この記事をはてなブックマークに登録 この記事のはてなブックマーク数 この記事を livedoor クリップに登録この記事の livedoor クリップ数 このエントリを del.icio.us に追加
ブックマークに追加する

iKnow! の OpenID で XRI をサポート & ruby-openid を日本語 XRI 対応に

昨日 OpenID Foundation Japan で NRI の崎村さんに「iKnow! の OpenID は XRI をサポートしてないですね」ってなことを言われたらしいので、iKnow! の OpenID を XRI に対応させました。

OpenID Authentication Plugin の XRI 対応は RailsのOpenID Authentication PluginをXRI対応にする方法 に書きましたが、OpenID::Yadis::XRI.identifier_scheme というメソッドが既にあったので、今回はそれを使いました。

LANG : RUBY
  1. module OpenIdAuthentication
  2.   # XRI support
  3.   def self.normalize_url_with_xri(identifier)
  4.     case OpenID::Yadis::XRI.identifier_scheme(identifier)
  5.     when :xri : identifier
  6.     when :uri : normalize_url_without_xri(identifier)
  7.     end
  8.   end
  9.   class <<self
  10.     alias_method :normalize_url_without_xri, :normalize_url
  11.     alias_method :normalize_url, :normalize_url_with_xri
  12.   end
  13. end

で、久しぶりに @freexri に行ってみたら、「=名前*nov」とかとれるようになってました。いつのまにか XRI って日本語も使えるようになってるんですね。日本語 XRI は微妙だけど、一応対応しておきました。

ruby-openid が日本語 XRI に対応してなかったので、OpenID::Yadis::XRI.escape_for_iri_with_multibyte をちょっと変更する必要があります。

LANG : RUBY
  1. module OpenID::Yadis::XRI
  2.   def self.escape_for_iri_with_multibyte(xri)
  3.     esc = escape_for_iri_without_multibyte(xri)
  4.     esc.gsub!(/([\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF]{2}|[\xF0-\xF7][\x80-\xBF]{3})/e) { |char_match|
  5.       CGI::escape(char_match)
  6.     }
  7.     return esc
  8.   end
  9.   class <<self
  10.     alias_method :escape_for_iri_without_multibyte, :escape_for_iri
  11.     alias_method :escape_for_iri, :escape_for_iri_with_multibyte
  12.   end
  13. end

これで OK なはずですが...

そもそも「=名前*nov」の Yadis が動いてないみたい...意味ねー(涙

...「@id*またけ」はちゃんと動いてるから、まぁ良しとしよう。

fuckin @freexri !!

ps.
ruby-openid は XRI のエラー処理が不十分なので、以下のパッチも当てておくと良いかと思います。

LANG : RUBY
  1. module OpenID
  2.   # XRI Error handling
  3.   def self.discover_xri_with_error_handling(xri)
  4.     discover_xri_without_error_handling(xri)
  5.   rescue OpenID::Yadis::XRI::XRIHTTPError => e
  6.     raise DiscoveryFailure.new("XRI is not valid: #{e.message}", nil)
  7.   end
  8.   class <<self
  9.     alias_method :discover_xri_without_error_handling, :discover_xri
  10.     alias_method :discover_xri, :discover_xri_with_error_handling
  11.   end
  12. end


この記事がお役に立ちましたら、一言コメントもらえると嬉しいですm_ _m


コメントはこちらから




使用可能タグ: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>


« 前のエントリ
iKnow! Developers Conference が終了しました
次のエントリー »
iKnow! gem をアップデートしました version 0.0.4