まちゅダイアリー

はてな認証APIで tDiary にログイン

2006-05-21

tDiary の日記を書く画面 (update.rb) は、 Basic 認証で保護するようになっている。 これを、はてなの認証APIを使って認証するように改造してみた。

(2006/06/18 追記) 新しいバージョンを公開した。

はてなの認証APIを使うメリットは、「Basic認証の設定がいらないので、設置が楽になるかも」、「Basic認証が動かないサーバでも動かせる」、「ログアウトができる(まだ実装してない)」、「認証した人だけにツッコミを許可するなどの応用ができる(実装してない)」など。 逆にデメリットは、「携帯からの編集が(おそらく)できない」、「はてなサーバが落ちていたら日記が書けない(!)」、「はてながサービス終了したら(略)」などなど。

んで、時間が取れれば、今後やってみたいこと。 他の認証APIへの対応や訪問者側への応用ができたら、いろいろと面白そう。

ダウンロード

参考までに、今の時点でのファイルを公開。

セキュリティ上の問題点がある可能性もある(XSSには対応したつもりだけど、CSRFは不安)ので、万一導入する場合はかなりの覚悟が必要。 このサイトでも試しに使っているけど、正直怖い(笑)。 まぁ、こんなこともできるよ、というサンプルとしてどうぞ。

導入方法

設定ファイルには、以下の3行を追加する。 api_key と secret は「はてな認証API」のページから取得する。 コールバックURLは、設定画面のURLにしておくこと。

@options['author'] = 'kmachu'
@options['api_key'] = ''
@options['secret'] = ''

補足

本体への差分は以下のとおり。 思ったよりも差分が少なかった。

$ svn diff update.rb
Index: update.rb
===================================================================
--- update.rb   (リビジョン 2679)
+++ update.rb   (作業コピー)
@@ -16,13 +16,17 @@
        end
        $:.unshift( org_path.untaint )
        require 'tdiary'
+       require 'tdiary/auth'

        @cgi = CGI::new
+       @session = CGI::Session.new(@cgi)
        conf = TDiary::Config::new(@cgi)
        tdiary = nil

        begin
-               if @cgi.valid?( 'append' )
+               if !@session['author'] || @session['author'] != 'true'
+                       tdiary = TDiary::TDiaryLogin::new( @cgi, '', conf, @session )
+               elsif @cgi.valid?( 'append' )
                        tdiary = TDiary::TDiaryAppend::new( @cgi, 'show.rhtml', conf )
                elsif @cgi.valid?( 'edit' )
                        tdiary = TDiary::TDiaryEdit::new( @cgi, 'update.rhtml', conf )