package ACC::HatenaAuth; use base qw( Class::Accessor::Fast ); use strict; use vars qw($VERSION); use warnings; use ACC::DBI::hatena_auth; use Hatena::API::Auth; use POSIX; __PACKAGE__->mk_accessors(qw(cert user api dbi session)); sub new { my $class = shift; my $session = shift; my $api = Hatena::API::Auth->new({ api_key => $ENV{HatenaApiKey}, secret => $ENV{HatenaKey}, }); my $self = bless { api => $api, cert => '', session => $session, }, $class; $self->load if $self->session; $self; } sub login { my ($self, $cert) = @_; my $user = $self->api->login($cert); my $userdb = ACC::DBI::hatena_auth->create({ cert => $cert, name => $user->name, image_url => $user->image_url, thumbnail_url => $user->thumbnail_url, create_date => POSIX::strftime('%Y-%m-%d %H:%I%S', localtime), }); $self->user( $userdb ); } sub logout { my $self = shift; $self->user->delete if $self->is_login; } sub load { my $self = shift; my $session = shift; $self->session($session); $self->user( ACC::DBI::hatena_auth->retrieve($session) ); } sub is_login { my $self = shift; $self->user && $self->user->name ? 1 : 0; } 1; __END__ create table hatena_auth ( cert char(64) not null, name char(128) not null, image_url char(128) not null default '', thumbnail_url char(128) not null default '', create_date datetime not null, unique(cert), index(name), index(create_date) ); auther & copyright Kazuhiro Osawa