Changeset 22986 for lang/perl/Moxy

Show
Ignore:
Timestamp:
11/08/08 10:15:26 (2 months ago)
Author:
tokuhirom
Message:

use HTTP::Session for session management

Location:
lang/perl/Moxy/trunk
Files:
4 added
3 removed
14 modified

Legend:

Unmodified
Added
Removed
  • lang/perl/Moxy/trunk/Makefile.PL

    r20491 r22986  
    2929requires 'HTTP::MobileAttribute'; 
    3030requires 'Path::Class'; 
     31requires 'HTTP::Session' => 0.08; 
    3132 
    3233test_requires('Test::More'); 
  • lang/perl/Moxy/trunk/config.yaml.sample

    r11492 r22986  
    88  log: 
    99    level: debug 
    10   storage: 
    11     module: DBM_File 
    12     file: /tmp/moxy.ndbm 
    13     dbm_class: NDBM_File 
     10  session: 
     11    state: 
     12      module: BasicAuth 
     13    store: 
     14      module: DBM 
     15      config: 
     16        file: /tmp/moxy.ndbm 
     17        dbm_class: NDBM_File 
    1418 
    1519plugins: 
  • lang/perl/Moxy/trunk/lib/Moxy.pm

    r22899 r22986  
    1616use HTML::TreeBuilder::XPath; 
    1717use HTML::TreeBuilder; 
     18use HTTP::Session; 
    1819use LWP::UserAgent; 
    1920use MIME::Base64; 
     
    5253    $self->conf->{global}->{log}->{fh} ||= \*STDERR; 
    5354 
    54     $self->_init_storage; 
    55  
    5655    return $self; 
    5756} 
     
    6564    }; 
    6665} 
    67  
    68 # ------------------------------------------------------------------------- 
    69  
    70 sub _init_storage { 
    71     my ($self, ) = @_; 
    72  
    73     my $mod = $self->{config}->{global}->{storage}->{module}; 
    74        $mod = $mod ? "Moxy::Storage::$mod" : 'Moxy::Storage::DBM_File'; 
    75     $mod->use or die $@; 
    76     $self->{storage} = $mod->new($self, $self->conf->{global}->{storage} || {}); 
    77 } 
    78  
    79 sub storage { shift->{storage} } 
    8066 
    8167# ------------------------------------------------------------------------- 
     
    181167sub handle_request { 
    182168    my ($self, $req) = @_; 
    183  
    184     my $session_id = join ',', $req->headers->authorization_basic; 
    185     $self->log(debug => "Authorization header: $session_id"); 
    186     if ($session_id) { 
    187         return $self->_make_response( 
    188             req => $req, 
    189             user_id  => $session_id, 
    190         ); 
    191     } else { 
     169    warn "HOGE"; 
     170 
     171    my $conf = $self->conf->{global}->{session}; 
     172    my $state_type = $conf->{state}->{module} || 'BasicAuth'; 
     173    my $state = sub { 
     174        if ($state_type eq 'Cookie') { 
     175            require HTTP::Session::State::Cookie; 
     176            HTTP::Session::State::Cookie->new( 
     177                $conf->{state}->{config} 
     178            ); 
     179        } else { 
     180            require Moxy::Session::State::BasicAuth; 
     181            Moxy::Session::State::BasicAuth->new( 
     182                $conf->{state}->{config} || {} 
     183            ); 
     184        } 
     185    }->(); 
     186    my $store = sub { 
     187        my $klass = "HTTP::Session::Store::$conf->{store}->{module}"; 
     188        Class::MOP::load_class($klass); 
     189        $klass->new( $conf->{store}->{config} ); 
     190    }->(); 
     191 
     192    my $auth = join(',', $req->headers->authorization_basic); 
     193    if ($state->isa('Moxy::Session::State::BasicAuth') && !$auth) { 
     194        $self->log(debug => 'basicauth'); 
    192195        return HTTP::Engine::Response->new( 
    193196            status => 401, 
     
    197200            body => 'authentication required', 
    198201        ); 
     202    } else { 
     203        $self->log(debug => "session: state: $state, store: $store"); 
     204        my $session = HTTP::Session->new( 
     205            state   => $state, 
     206            store   => $store, 
     207            request => $req, 
     208        ); 
     209        $self->log(debug => "session: $session"); 
     210        my $res = $self->_make_response( 
     211            req     => $req, 
     212            session => $session, 
     213        ); 
     214        $session->response_filter($res); 
     215        return $res; 
    199216    } 
    200217} 
     
    204221    my %args = validate( 
    205222        @_ => +{ 
    206             req     => { isa  => 'HTTP::Engine::Request', }, 
    207             user_id => { type => SCALAR }, 
     223            req     => { isa => 'HTTP::Engine::Request', }, 
     224            session => { type => OBJECT }, 
    208225        } 
    209226    ); 
     
    222239            url     => $url, 
    223240            request => $req->as_http_request, 
    224             user_id => $args{user_id}, 
     241            session => $args{session}, 
    225242        ); 
    226243        $self->log(debug => '-- response status: ' . $res->code); 
     
    271288            url      => qr{^https?://}, 
    272289            request  => { isa  => 'HTTP::Request' }, 
    273             user_id  => { type => SCALAR }, 
     290            session  => { type => OBJECT }, 
    274291        } 
    275292    ); 
     
    283300        'request_filter_process_agent', 
    284301        {   request => $req, # HTTP::Request object 
    285             user    => $args{user_id}, 
     302            session => $args{session}, 
    286303        } 
    287304    ); 
     
    294311                request          => $req,              # HTTP::Request object 
    295312                mobile_attribute => $mobile_attribute, 
    296                 user             => $args{user_id}, 
     313                session          => $args{session}, 
    297314            } 
    298315        ); 
     
    322339                response         => $response,           # HTTP::Response object 
    323340                mobile_attribute => $mobile_attribute, 
    324                 user             => $args{user_id}, 
     341                session          => $args{session}, 
    325342            } 
    326343        ); 
  • lang/perl/Moxy/trunk/lib/Moxy/Plugin/HTTPHeader.pm

    r10675 r22986  
    1010    my ($self, $context, $args) = @_; 
    1111 
    12     my $http_header = $context->storage->get(__PACKAGE__. $args->{user}); 
     12    my $http_header = $args->{session}->get(__PACKAGE__); 
    1313 
    1414    if ($http_header) { 
     
    3535            params      => \%params, 
    3636            current_uri => $args->{response}->request->uri, 
    37             headers     => $context->storage->get(__PACKAGE__ . $args->{user}), 
     37            headers     => $args->{session}->get(__PACKAGE__), 
    3838        } 
    3939    ); 
     
    4949        # store settings 
    5050        my $r = CGI->new($args->{request}->content); 
    51         $context->storage->set(__PACKAGE__ . $args->{user} => $r->param('moxy_http_header')); 
     51        $args->{session}->set(__PACKAGE__ => $r->param('moxy_http_header')); 
    5252 
    5353        # back 
  • lang/perl/Moxy/trunk/lib/Moxy/Plugin/UserAgentSwitcher.pm

    r22897 r22986  
    1212    my ($self, $context, $args) = @_; 
    1313 
    14     my $user_agent = $context->storage->get('user_agent_' . $args->{user}) || 'KDDI-TS3G UP.Browser/6.2.0.7.3.129 (GUI) MMP/2.0'; 
     14    my $user_agent = $args->{session}->get('user_agent') || 'KDDI-TS3G UP.Browser/6.2.0.7.3.129 (GUI) MMP/2.0'; 
    1515    my $ua_info = $self->get_ua_info($context, $user_agent); 
    1616 
     
    5151        # store settings 
    5252        my $r = CGI->new($args->{request}->content); # CGI.pm は遅いやん。他になんかないんかねー 
    53         $context->storage->set("user_agent_$args->{user}" => $r->param('moxy_user_agent')); 
     53        $args->{session}->set("user_agent" => $r->param('moxy_user_agent')); 
    5454 
    5555        # back 
  • lang/perl/Moxy/trunk/lib/Moxy/Plugin/UserID.pm

    r10675 r22986  
    99    my ($self, $context, $args) = @_; 
    1010 
    11     my $key = join(',', __PACKAGE__, $args->{user}, $args->{mobile_attribute}->user_agent); 
    12     my $user_id = $context->storage->get($key); 
     11    my $key = join(',', __PACKAGE__, $args->{mobile_attribute}->user_agent); 
     12    my $user_id = $args->{session}->get($key); 
    1313    if ($user_id) { 
    1414        # au subscriber id. 
     
    3131 
    3232        # store to user stash. 
    33         my $key = join(',', __PACKAGE__, $args->{user}, $args->{mobile_attribute}->user_agent); 
    34         $context->storage->set($key => $r->param('user_id')); 
     33        my $key = join(',', __PACKAGE__, $args->{mobile_attribute}->user_agent); 
     34        $args->{session}->set($key => $r->param('user_id')); 
    3535 
    3636        my $response = HTTP::Response->new( 302, 'Moxy(UserID)' ); 
     
    4444    return '' unless $args->{mobile_attribute}->is_ezweb || $args->{mobile_attribute}->is_docomo; 
    4545 
    46     my $key = join(',', __PACKAGE__, $args->{user}, $args->{mobile_attribute}->user_agent); 
    47     my $user_id = $context->storage->get($key); 
     46    my $key = join(',', __PACKAGE__, $args->{mobile_attribute}->user_agent); 
     47    my $user_id = $args->{session}->get($key); 
    4848 
    4949    return $self->render_template( 
  • lang/perl/Moxy/trunk/t/Plugins/DisableTableTag.t

    r9973 r22986  
    1414        global => { 
    1515            assets_path => catfile( $FindBin::Bin, '..', 'assets' ), 
    16             storage => { 
    17                 module    => 'DBM_File', 
    18                 file      => 't/testing.ndbm', 
    19                 dbm_class => 'NDBM_File', 
    20             }, 
    2116            'log' => { 
    2217                level => 'info', 
  • lang/perl/Moxy/trunk/t/Plugins/FlashUseImgTag.t

    r9973 r22986  
    1414        global => { 
    1515            assets_path => catfile( $FindBin::Bin, '..', 'assets' ), 
    16             storage => { 
    17                 module    => 'DBM_File', 
    18                 file      => 't/testing.ndbm', 
    19                 dbm_class => 'NDBM_File', 
    20             }, 
    2116            'log' => { 
    2217                level => 'info', 
  • lang/perl/Moxy/trunk/t/Plugins/GPS-request.t

    r9973 r22986  
    1414        global => { 
    1515            assets_path => catfile( $FindBin::Bin, '..', 'assets' ), 
    16             storage => { 
    17                 module    => 'DBM_File', 
    18                 file      => 't/testing.ndbm', 
    19                 dbm_class => 'NDBM_File', 
    20             }, 
    2116            'log' => { 
    2217                level => 'info', 
  • lang/perl/Moxy/trunk/t/Plugins/GPS-response.t

    r9973 r22986  
    1515        global => { 
    1616            assets_path => catfile( $FindBin::Bin, '..', 'assets' ), 
    17             storage => { 
    18                 module    => 'DBM_File', 
    19                 file      => 't/testing.ndbm', 
    20                 dbm_class => 'NDBM_File', 
    21             }, 
    2217            'log' => { 
    2318                level => 'info', 
  • lang/perl/Moxy/trunk/t/Plugins/Pictogram.t

    r10687 r22986  
    1313        global => { 
    1414            assets_path => File::Spec->catfile( $FindBin::Bin, '..', '..', 'assets' ), 
    15             storage => { 
    16                 module    => 'DBM_File', 
    17                 file      => 't/testing.ndbm', 
    18                 dbm_class => 'NDBM_File', 
    19             }, 
    2015            'log' => { 
    2116                level => 'info', 
  • lang/perl/Moxy/trunk/t/Plugins/RefererCutter.t

    r9973 r22986  
    1111        global => { 
    1212            assets_path => File::Spec->catfile( $FindBin::Bin, '..', 'assets' ), 
    13             storage => { 
    14                 module    => 'DBM_File', 
    15                 file      => 't/testing.ndbm', 
    16                 dbm_class => 'NDBM_File', 
    17             }, 
    1813            'log' => { 
    1914                level => 'info', 
  • lang/perl/Moxy/trunk/t/Plugins/Scrubber.t

    r17849 r22986  
    1616        global => { 
    1717            assets_path => catfile( $FindBin::Bin, '..', '..', 'assets' ), 
    18             storage => { 
    19                 module    => 'DBM_File', 
    20                 file      => 't/testing.ndbm', 
    21                 dbm_class => 'NDBM_File', 
    22             }, 
    2318            'log' => { 
    2419                level => 'info', 
  • lang/perl/Moxy/trunk/t/Plugins/StripScripts.t

    r17847 r22986  
    1616        global => { 
    1717            assets_path => catfile( $FindBin::Bin, '..', '..', 'assets' ), 
    18             storage => { 
    19                 module    => 'DBM_File', 
    20                 file      => 't/testing.ndbm', 
    21                 dbm_class => 'NDBM_File', 
    22             }, 
    2318            'log' => { 
    2419                level => 'info',