Ado

 view release on metacpan or  search on metacpan

lib/Ado/Sessions.pm  view on Meta::CPAN

package Ado::Sessions;
use Mojo::Base -base;
use Mojo::JSON;

has [qw(cookie_domain secure)];
has cookie_name        => 'ado';
has cookie_path        => '/';
has default_expiration => 3600;

sub generate_id {
    return Mojo::Util::sha1_hex(rand() . $$ . {} . time);
}

sub session_id {
    my ($self, $c) = @_;

    #once
    state $cookie_name = $self->cookie_name;

    return
         $c->param($cookie_name)
      || $c->cookie($cookie_name)
      || '';
}

sub get_instance {
    my $config  = shift;
    my $options = $config->{session}{options} || {};
    my $type    = lc($config->{session}{type} || 'mojo');    #sane default

    if ($type eq 'mojo') {
        return Mojolicious::Sessions->new(%$options);
    }
    elsif ($type eq 'file') {
        require Ado::Sessions::File;
        return Ado::Sessions::File->new(%$options);
    }
    elsif ($type eq 'database') {
        require Ado::Sessions::Database;
        return Ado::Sessions::Database->new(%$options);
    }

    Carp::croak('Please provide valid session type:(mojo,file,database)');
    return;
}

sub prepare_load {
    my ($self, $c, $session) = @_;

    # "expiration" value is inherited
    my $expiration = $session->{expiration} // $self->default_expiration;
    return if !(my $expires = delete $session->{expires}) && $expiration;
    return if defined $expires && $expires <= time;

    my $stash = $c->stash;
    return unless $stash->{'mojo.active_session'} = keys %$session;
    $stash->{'mojo.session'} = $session;
    $session->{flash} = delete $session->{new_flash} if $session->{new_flash};

    return;
}

sub prepare_store {



( run in 0.843 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )