d85dd5a02ba4ac29fa86edba410866ee7820bbd3
[catagits/Web-Session.git] / lib / Plack / Middleware / Session.pm
1 package Plack::Middleware::Session;
2 use strict;
3 use warnings;
4
5 use Plack::Session;
6 use Plack::Request;
7 use Plack::Response;
8 use Plack::Session::State::Cookie;
9 use Plack::Session::Store;
10
11 use parent 'Plack::Middleware';
12
13 use Plack::Util::Accessor qw( state store );
14
15 sub prepare_app {
16     my $self = shift;
17     unless ($self->state) {
18         $self->state( Plack::Session::State::Cookie->new );
19     }
20
21     unless ($self->store) {
22         $self->store( Plack::Session::Store->new );
23     }
24 }
25
26 sub call {
27     my $self = shift;
28     my $env  = shift;
29
30     $env->{'psgix.session'} = Plack::Session->new(
31         state   => $self->state || $self->default_state,
32         store   => $self->store,
33         request => Plack::Request->new( $env )
34     );
35
36     my $res = $self->app->($env);
37     $self->response_cb($res, sub {
38         my $res = Plack::Response->new(@{$_[0]});
39         $env->{'psgix.session'}->finalize( $res );
40         @{$_[0]} = @{$res->finalize};
41     });
42 }
43
44 1;
45
46 __END__