May 21, 2006

Catalystではてな認証APIを使うプラグイン

何かWebアプリでも作りたいなーという時にCatalystでがっつり認証処理を作るのは少し面倒。

そこで、Catalystで今流行り(?)のはてな認証を使うためのプラグインを書いてみました。中身はHatena::API::Authを単に使ってみただけ。

→Catalyst::Plugin::Authentication::Credential::HatenaAuth

これを使うとこんな感じに書けるようになります。

use Catalyst qw/Authentication::Credential::HatenaAuth/;

MyApp->config->{authentication}{hatenaauth} = {    
    secret   => 'xxxxxxxxx',
    api_key => 'xxxxxxxxxxxxxxxxxxxx',
};

__PACKAGE__->setup;

sub default : Private {
    my ( $self, $c ) = @_;
    $c->authenticate_hatena;
    $c->res->redirect('/') if $c->req->param('cert');

    if( $c->req->cookies->{hatenaauth} ){
    my %data = $c->req->cookies->{hatenaauth}->value;
        $c->stash->{username}       = $data{name};
        $c->stash->{image_url}       = $data{image_url};
        $c->stash->{thumbnail_url} = $data{thumbnail_url};
    }
}

sub login : Local {
        my ( $self, $c ) = @_;

        $c->res->redirect( $c->config->{hatena_api}->uri_to_login );
}

以下、一応使い方。

はてな認証に必要なのは秘密鍵とAPIキーなので、configかYAMLファイルのどちらかに指定しておきます。

# configに書く場合

MyApp->config->{authentication}{hatenaauth} = {    
    secret   => 'xxxxxxxxx',
    api_key => 'xxxxxxxxxxxxxxxxxxxx',
};

# myapp.ymlに書く場合

authentication:
    hatenaauth:
        secret:  xxxxxxxxx
        api_key: xxxxxxxxxxxxxxxxxxxx

Cookieに格納されたデータの受け取りと、はてな認証APIからの認証結果受け取り(コールバックURL)。この例ではトップページで両方やっています。
cert付きのURLで「更新」ボタンを押されるとエラーになるので、はてなの認証結果が来る時(certがあるとき)はリダイレクトしています。

sub default : Private {
    my ( $self, $c ) = @_;
    $c->authenticate_hatena; # これはcallback URLに書く。
    $c->res->redirect('/') if $c->req->param('cert'); # 

    if( $c->req->cookies->{hatenaauth} ){
    my %data = $c->req->cookies->{hatenaauth}->value;
        $c->stash->{username}       = $data{name};
        $c->stash->{image_url}       = $data{image_url};
        $c->stash->{thumbnail_url} = $data{thumbnail_url};
    }
}

http://example.com/loginをログインURLとする。

sub login : Local {
        my ( $self, $c ) = @_;

        $c->res->redirect( $c->config->{hatena_api}->uri_to_login );
}

後はTTで適当に分岐してあげれば、ログイン済みの場合はユーザ情報を表示し、そうでない場合にはログインURLを表示するということができます。

と、勢いで書いてみましたが果たしてこんなのに意味があるのかどうか・・。外向けのモジュールを書くのは初めてなので見当違いのことをしているのではないかと思えて仕方がありません。なんかすごく汚いような気も(汗)。いきなりCookieにぶち込むというのもどうなのやら。取りあえず自己満足です。ほぼTypeKeyのやつのパクりですし。

何か変なトコなどあればご指摘いただければ幸いです。というか、識者の方こういうの作ってくれないかなぁ。

5/29 CPANにありました。探したつもりですっかり忘れていたようです。更にこちらの作者の方よりご指摘を頂いていました。これではいろいろとまずいようです。取りあえず消しましたorz。

参考
http://www.tcool.org/catalyst/WritingPlugins.html
http://qootas.org/blog/archives/2005/06/catalyst_authen.html
http://blog.nomadscafe.jp/archives/000540.html
http://blog.nomadscafe.jp/archives/000501.html
http://d.hatena.ne.jp/hyuki/20060424

  

Mac OS X のファイル関連付け変更方法

Finderで該当ファイル右クリック
→情報を見る
→このアプリケーションで開く (メニュー展開)
→プルダウンでアプリ変更
→全てを変更


一年間わかりませんでした・・orz

参考
http://allabout.co.jp/computer/macos/closeup/CU20020206plst/  

May 16, 2006

portsからmod_proxy付きでApache2をインストール

portsでいれたらmod_proxyがなかった。入れ直し。リバースプロキシ設定。

# vi /usr/local/etc/apache22/Includes/virtual.conf
NameVirtualHost *:80
<VirtualHost *:80>
ServerName example.com
ServerAdmin webmaster@example.com
DocumentRoot /usr/local/www/apache22/data
ErrorLog /var/log/httpd-example.com-error.log
CustomLog /var/log/httpd-example.com-access.log combined

ProxyPass / http://192.168.0.200/
ProxyPassreverse / http://192.168.0.200/
</VirtualHost>



下記追加
# vi /usr/local/etc/apache22/httpd.conf
LoadModule proxy_module libexec/apache22/mod_proxy.so
LoadModule proxy_http_module libexec/apache22/mod_proxy_http.so


# cd /usr/ports/www/apache22/
# make deinstall
# make clean
# make WITH_PROXY_MODULES=yes
# make install
# /usr/local/etc/rc.d/apache22.sh start



参考
http://mimori.org/~h/tdiary/20041014.html  

May 15, 2006

Apache2.2+PHP5+phpMyAdmin+MySQLインストール

新しいPCに環境を作る必要があったので適当に作成。この作業何度目だろう・・いい加減面倒になってきました。しかもmakeが遅くてこれだけの作業なのに存外時間を取られてしまいました。無念。

一応最低限の環境構築メモとして残しておきます。それにしてもやたらとインストール方法ばかり書いてあるブログになってますね。

環境はFreeBSD 6.0-RELEASE。   続きを読む

May 08, 2006

PlaggerでBloglinesとMixi日記をGmailに送る。

Plaggerを試してみました。
環境はMac OSX 10.4.6 + Perl 5.8.6。

# cpan install Plagger
# cpan install XML::RSS
# cpan install XML::RSS::LibXML
# cpan install XML::LibXML::Common
# cpan install WebService::Bloglines
# cpan install XML::Feed
# cpan install Net::SMTP::TLS
# cpan install WWW::Mixi

※Plaggerのインストールは以前にやっていて忘れたのでかなり適当。WebService::Bloglinesの依存関係モジュールが意外に多かったです。

# vi config.yaml
global:
assets_path: /Users/username/plagger/assets
timezone: Asia/Tokyo

plugins:
- module: Subscription::Bloglines
config:
username: foobar@example.com
password: password

- module: CustomFeed::Mixi
config:
email: email@example.com
password: password
fetch_body: 1
show_icon: 1

- module: Publish::Gmail
config:
mailto: example@gmail.com
mailfrom: dummy@teachat.org
mailroute:
via: smtp_tls
host: smtp.gmail.com:587
username: example@gmail.com
password: password


※最後の改行がないとエラー。「code: YAML_PARSE_ERR_NO_FINAL_NEWLINE」とか言われます。

# mkdir plagger
# mkdir plagger/assets
# mkdir plagger/assets/common
# cp /private/var/root/.cpan/build/Plagger-0.6.4/assets/plugins/Publish-Gmail/gmail_notify.tt plagger/assets/common/gmail_notify.tt

こちらこちらを参考に何やら対処。

# plagger -c ./config.yaml

実行。

取りあえず動作。便利っぽいです。Bloglinesの使いづらさに辟易していたし、Mixiはログインする気が全く起きないしで全く人の日記を読んでいなかったのですがこれで少しは読みやすくなりそうです。Mac miniは常時起動しているので、コマンドをcronに登録しておくことにしました。

Plaggerは他にもいろいろできそうですが、取りあえず触ってみたということで。


参考
http://plagger.org/trac/wiki/CookbookBloglinesGmail
http://sky.taro-web.com/2006/03/14/000552
http://kerolin.jspeed.jp/Computer/Linux/Plagger060322.html
http://en.yummy.stripper.jp/?eid=168211
http://d.hatena.ne.jp/tokuhirom/20060226/1140967554  

May 04, 2006

荒川


opencms_setup


何も予定を立てないと家でゴロゴロし続けてしまうので、久々に自転車に乗ってきました。

荒川沿いをの〜んびりと北上。バーベキューや少年野球の姿が多々見られました。お天気は快晴。平和です。
調子に乗って上流に向かっていたところ、上尾まで辿り着いてしまいました。行きは追い風だったらしく楽だったのですが、帰りは酷い向かい風で大変。まともに進まず途中でめげてしまいました。荒川サイクリングロードは自転車で走るにはとても快適なのですが、次は風の強さを調べてから行こうと固く心に誓ったのでありました。

結局、往復で約88kmを走破。約半年ぶりで慣れていないのに過去最高の距離を走ってしまったため、最後は手の皮や尻が痛くてまともに進めなくなる始末。普段からもう少し乗るようにしないとダメですねぇ。