Plack-Middleware-Session

 view release on metacpan or  search on metacpan

lib/Plack/Session/State.pm  view on Meta::CPAN

package Plack::Session::State;
use strict;
use warnings;

our $VERSION   = '0.36';
our $AUTHORITY = 'cpan:STEVAN';

use Crypt::SysRandom ();

# RECOMMEND PREREQ: Crypt::SysRandom::XS

use Plack::Request;
use Plack::Util::Accessor qw[
    session_key
    sid_generator
    sid_validator
];

sub new {
    my ($class, %params) = @_;

    $params{'session_key'}   ||= 'plack_session';
    $params{'sid_generator'} ||= sub {
        unpack('H*', Crypt::SysRandom::random_bytes(20))
    };
    $params{'sid_validator'} ||= qr/\A[0-9a-f]{40}\Z/;

    bless { %params } => $class;
}

sub expire_session_id {
    my ($self, $id, $res) = @_;
}

sub validate_session_id {
    my ($self, $id) = @_;
    $id =~ $self->sid_validator;
}

sub get_session_id {
    my ($self, $env) = @_;
    return Plack::Request->new($env)->param( $self->session_key );
}

sub extract {
    my ($self, $env) = @_;

    my $id = $self->get_session_id( $env );
    return unless defined $id;

    return $id if $self->validate_session_id( $id );
    return;
}

sub generate {
    my $self = shift;
    $self->sid_generator->( @_ );
}


sub finalize {
    my ($self, $id, $res, $options) = @_;
    ();
}

1;

__END__

=pod

=head1 NAME

Plack::Session::State - Basic parameter-based session state

=head1 SYNOPSIS

  use Plack::Builder;
  use Plack::Middleware::Session;
  use Plack::Session::State;

  my $app = sub {
      return [ 200, [ 'Content-Type' => 'text/plain' ], [ 'Hello Foo' ] ];
  };

  builder {
      enable 'Session',
          state => Plack::Session::State->new;



( run in 3.024 seconds using v1.01-cache-2.11-cpan-0bb4e1dffa6 )