ClearPress
view release on metacpan or search on metacpan
lib/ClearPress/authenticator/session.pm view on Meta::CPAN
# -*- mode: cperl; tab-width: 8; indent-tabs-mode: nil; basic-offset: 2 -*-
# vim:ts=8:sw=2:et:sta:sts=2
#########
# Author: rmp
#
package ClearPress::authenticator::session;
use strict;
use warnings;
use Crypt::CBC;
use base qw(ClearPress::authenticator);
use Readonly;
use Carp;
use MIME::Base64 qw(encode_base64 decode_base64);
use YAML::Tiny qw(Load Dump);
our $VERSION = q[477.1.4];
Readonly::Scalar our $KEY => q[topsecretkey];
sub authen_token {
my ($self, $token) = @_;
return $self->decode_token($token);
}
sub encode_token {
my ($self, $user_hash) = @_;
my $user_yaml = Dump($user_hash);
my $encrypted = $self->cipher->encrypt($user_yaml);
my $encoded = encode_base64($encrypted);
return $encoded;
}
sub decode_token {
my ($self, $token) = @_;
my $decoded = q[];
eval {
$decoded = decode_base64($token);
} or do {
carp q[Failed to decode token];
return;
};
my $decrypted = q[];
eval {
$decrypted = $self->cipher->decrypt($decoded);
} or do {
carp q[Failed to decrypt token];
return;
};
my $deyamled;
eval {
$deyamled = Load($decrypted);
} or do {
carp q[Failed to de-YAML token];
return;
};
return $deyamled;
}
sub key {
my ($self, $key) = @_;
if($key) {
$self->{key} = $key;
}
if($self->{key}) {
return $self->{key};
}
return $KEY;
}
sub cipher {
my $self = shift;
if(!$self->{cipher}) {
$self->{cipher} = Crypt::CBC->new(
-cipher => 'Blowfish',
-key => $self->key,
);
}
return $self->{cipher};
}
1;
__END__
=head1 NAME
ClearPress::authenticator::session
=head1 VERSION
$LastChangedRevision: 470 $
=head1 SYNOPSIS
=head1 DESCRIPTION
=head1 SUBROUTINES/METHODS
( run in 0.449 second using v1.01-cache-2.11-cpan-2398b32b56e )